You can subscribe to this list here.
| 2002 | Jan | Feb | Mar | Apr (24) | May (14) | Jun (29) | Jul (33) | Aug (3) | Sep (8) | Oct (18) | Nov (1) | Dec (10) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 | Jan (3) | Feb (33) | Mar (7) | Apr (28) | May (30) | Jun (5) | Jul (10) | Aug (7) | Sep (32) | Oct (41) | Nov (20) | Dec (10) |
| 2004 | Jan (24) | Feb (18) | Mar (57) | Apr (40) | May (55) | Jun (48) | Jul (77) | Aug (15) | Sep (56) | Oct (80) | Nov (74) | Dec (52) |
| 2005 | Jan (38) | Feb (42) | Mar (39) | Apr (56) | May (79) | Jun (73) | Jul (16) | Aug (23) | Sep (68) | Oct (77) | Nov (52) | Dec (27) |
| 2006 | Jan (27) | Feb (18) | Mar (51) | Apr (62) | May (28) | Jun (50) | Jul (36) | Aug (33) | Sep (47) | Oct (50) | Nov (77) | Dec (13) |
| 2007 | Jan (15) | Feb (8) | Mar (14) | Apr (18) | May (25) | Jun (16) | Jul (16) | Aug (19) | Sep (32) | Oct (17) | Nov (5) | Dec (5) |
| 2008 | Jan (64) | Feb (25) | Mar (25) | Apr (6) | May (28) | Jun (20) | Jul (10) | Aug (27) | Sep (28) | Oct (59) | Nov (37) | Dec (43) |
| 2009 | Jan (40) | Feb (25) | Mar (12) | Apr (57) | May (46) | Jun (29) | Jul (39) | Aug (10) | Sep (20) | Oct (42) | Nov (50) | Dec (57) |
| 2010 | Jan (82) | Feb (165) | Mar (256) | Apr (260) | May (36) | Jun (87) | Jul (53) | Aug (89) | Sep (107) | Oct (51) | Nov (88) | Dec (117) |
| 2011 | Jan (69) | Feb (60) | Mar (113) | Apr (71) | May (67) | Jun (90) | Jul (88) | Aug (90) | Sep (48) | Oct (64) | Nov (69) | Dec (118) |
| 2012 | Jan (49) | Feb (528) | Mar (351) | Apr (190) | May (238) | Jun (193) | Jul (104) | Aug (100) | Sep (57) | Oct (41) | Nov (47) | Dec (51) |
| 2013 | Jan (94) | Feb (57) | Mar (96) | Apr (105) | May (77) | Jun (102) | Jul (27) | Aug (81) | Sep (32) | Oct (53) | Nov (127) | Dec (65) |
| 2014 | Jan (113) | Feb (59) | Mar (104) | Apr (259) | May (70) | Jun (70) | Jul (146) | Aug (45) | Sep (58) | Oct (149) | Nov (77) | Dec (83) |
| 2015 | Jan (53) | Feb (66) | Mar (86) | Apr (50) | May (135) | Jun (76) | Jul (151) | Aug (83) | Sep (97) | Oct (262) | Nov (245) | Dec (231) |
| 2016 | Jan (131) | Feb (233) | Mar (97) | Apr (138) | May (221) | Jun (254) | Jul (92) | Aug (248) | Sep (168) | Oct (275) | Nov (477) | Dec (445) |
| 2017 | Jan (218) | Feb (217) | Mar (146) | Apr (172) | May (216) | Jun (252) | Jul (164) | Aug (192) | Sep (190) | Oct (143) | Nov (255) | Dec (182) |
| 2018 | Jan (295) | Feb (164) | Mar (113) | Apr (147) | May (64) | Jun (262) | Jul (184) | Aug (90) | Sep (69) | Oct (364) | Nov (102) | Dec (101) |
| 2019 | Jan (119) | Feb (64) | Mar (64) | Apr (102) | May (57) | Jun (154) | Jul (84) | Aug (81) | Sep (76) | Oct (102) | Nov (233) | Dec (89) |
| 2020 | Jan (38) | Feb (170) | Mar (155) | Apr (172) | May (120) | Jun (223) | Jul (461) | Aug (227) | Sep (268) | Oct (113) | Nov (56) | Dec (124) |
| 2021 | Jan (121) | Feb (48) | Mar (334) | Apr (345) | May (207) | Jun (136) | Jul (71) | Aug (112) | Sep (122) | Oct (173) | Nov (184) | Dec (223) |
| 2022 | Jan (197) | Feb (206) | Mar (156) | Apr (212) | May (192) | Jun (170) | Jul (143) | Aug (380) | Sep (182) | Oct (148) | Nov (128) | Dec (269) |
| 2023 | Jan (248) | Feb (196) | Mar (264) | Apr (36) | May (123) | Jun (66) | Jul (120) | Aug (48) | Sep (157) | Oct (198) | Nov (300) | Dec (273) |
| 2024 | Jan (271) | Feb (147) | Mar (207) | Apr (78) | May (107) | Jun (168) | Jul (151) | Aug (51) | Sep (438) | Oct (221) | Nov (302) | Dec (357) |
| 2025 | Jan (451) | Feb (219) | Mar (326) | Apr (232) | May (306) | Jun (181) | Jul (452) | Aug (282) | Sep (620) | Oct (793) | Nov (682) | Dec |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| | | | | | | 1 |
| 2 (11) | 3 (10) | 4 | 5 (1) | 6 | 7 | 8 |
| 9 (2) | 10 (6) | 11 (6) | 12 (2) | 13 (3) | 14 (2) | 15 |
| 16 | 17 | 18 (1) | 19 | 20 (1) | 21 | 22 |
| 23 | 24 (9) | 25 (2) | 26 (1) | 27 | 28 | 29 |
| 30 | | | | | | |
| From: Sergey M. <se...@ci...> - 2012-09-24 18:07:51 |
24.09.2012 19:20, Gert Doering wrote: > Hi, > > On Mon, Sep 24, 2012 at 02:56:50AM -0700, ehsan enayati wrote: >> thanks for your quick reply, I know that openvpn is single threaded but it supports multiple user connection simultaneously, I wanted to know how this is done although it just have one thread. > > "by sufficiently advanced magic" > The magic is called "multiplexing connections" :) |
| From: Krzysztof W. <ne...@wi...> - 2012-09-24 17:46:28 |
On 09/24/2012 07:30 PM, Krzysztof Witek wrote: > On 09/24/2012 07:28 PM, Davide Brini wrote: >> On Mon, 24 Sep 2012 19:20:18 +0200, Krzysztof Witek <ne...@wi...> wrote: >> >>> From: Krzysztof Witek <krz...@wi...> >>> >>> If multiple ip addresses of the same subnet are configured on an >>> interface, openvpn may not send udp datagrams to the peer >>> using the correct source ip address. >>> >>> If a host sends the udp datagrams to the ip address A, then it >>> should receive the answer from A even if the its peer has multiple >>> ip addresses and the default routing selects a different one. >>> >>> The issue can be reproduced with the following scenario: >>> >>> Host A is connected to two gateways each on the same subnet: >>> gw1 with ip address 10.0.0.254 >>> gw2 with ip address 10.0.0.253 >>> >>> Host A has two ip addresses: 10.0.0.1 and 10.0.0.2. >>> It receives DNAT-ed traffic from gw1 via 10.0.0.1 >>> and DNAT-ed traffic from gw2 via 10.0.0.2. >>> >>> Two ip rules are set up on the host A: >>> ip rule add from 10.0.0.1 table 1 >>> ip rule add from 10.0.0.2 table 2 >>> >>> and three default routes: >>> ip route add default via 10.0.0.254 table 1 >>> ip route add default via 10.0.0.253 table 2 >>> ip route add default via 10.0.0.254 >>> >>> This way all traffic from 10.0.0.1 will go via 10.0.0.254 >>> and all traffic from 10.0.0.2 will go via 10.0.0.253. >>> >>> The current openvpn server doesn't work if it receives a connection >>> from the router gw2 because it will send its udp datagrams via gw1. >>> >>> Saving the destination ip address on which the udp datagram arrived and >>> then using it as the source ip address solves this issue. >> I haven't checked, but doesn't --multihome work in this case? >> > no, it doesn't seem to work > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Openvpn-devel mailing list > Ope...@li... > https://lists.sourceforge.net/lists/listinfo/openvpn-devel sorry, checked with a wrong version, it does work with --multihome the patch can be dropped thanks |
| From: Krzysztof W. <ne...@wi...> - 2012-09-24 17:30:38 |
On 09/24/2012 07:28 PM, Davide Brini wrote: > On Mon, 24 Sep 2012 19:20:18 +0200, Krzysztof Witek <ne...@wi...> wrote: > >> From: Krzysztof Witek <krz...@wi...> >> >> If multiple ip addresses of the same subnet are configured on an >> interface, openvpn may not send udp datagrams to the peer >> using the correct source ip address. >> >> If a host sends the udp datagrams to the ip address A, then it >> should receive the answer from A even if the its peer has multiple >> ip addresses and the default routing selects a different one. >> >> The issue can be reproduced with the following scenario: >> >> Host A is connected to two gateways each on the same subnet: >> gw1 with ip address 10.0.0.254 >> gw2 with ip address 10.0.0.253 >> >> Host A has two ip addresses: 10.0.0.1 and 10.0.0.2. >> It receives DNAT-ed traffic from gw1 via 10.0.0.1 >> and DNAT-ed traffic from gw2 via 10.0.0.2. >> >> Two ip rules are set up on the host A: >> ip rule add from 10.0.0.1 table 1 >> ip rule add from 10.0.0.2 table 2 >> >> and three default routes: >> ip route add default via 10.0.0.254 table 1 >> ip route add default via 10.0.0.253 table 2 >> ip route add default via 10.0.0.254 >> >> This way all traffic from 10.0.0.1 will go via 10.0.0.254 >> and all traffic from 10.0.0.2 will go via 10.0.0.253. >> >> The current openvpn server doesn't work if it receives a connection >> from the router gw2 because it will send its udp datagrams via gw1. >> >> Saving the destination ip address on which the udp datagram arrived and >> then using it as the source ip address solves this issue. > I haven't checked, but doesn't --multihome work in this case? > no, it doesn't seem to work |
| From: Davide B. <da...@gm...> - 2012-09-24 17:26:23 |
On Mon, 24 Sep 2012 19:20:18 +0200, Krzysztof Witek <ne...@wi...> wrote: > From: Krzysztof Witek <krz...@wi...> > > If multiple ip addresses of the same subnet are configured on an > interface, openvpn may not send udp datagrams to the peer > using the correct source ip address. > > If a host sends the udp datagrams to the ip address A, then it > should receive the answer from A even if the its peer has multiple > ip addresses and the default routing selects a different one. > > The issue can be reproduced with the following scenario: > > Host A is connected to two gateways each on the same subnet: > gw1 with ip address 10.0.0.254 > gw2 with ip address 10.0.0.253 > > Host A has two ip addresses: 10.0.0.1 and 10.0.0.2. > It receives DNAT-ed traffic from gw1 via 10.0.0.1 > and DNAT-ed traffic from gw2 via 10.0.0.2. > > Two ip rules are set up on the host A: > ip rule add from 10.0.0.1 table 1 > ip rule add from 10.0.0.2 table 2 > > and three default routes: > ip route add default via 10.0.0.254 table 1 > ip route add default via 10.0.0.253 table 2 > ip route add default via 10.0.0.254 > > This way all traffic from 10.0.0.1 will go via 10.0.0.254 > and all traffic from 10.0.0.2 will go via 10.0.0.253. > > The current openvpn server doesn't work if it receives a connection > from the router gw2 because it will send its udp datagrams via gw1. > > Saving the destination ip address on which the udp datagram arrived and > then using it as the source ip address solves this issue. I haven't checked, but doesn't --multihome work in this case? -- D. |
| From: Krzysztof W. <ne...@wi...> - 2012-09-24 17:20:28 |
From: Krzysztof Witek <krz...@wi...> If multiple ip addresses of the same subnet are configured on an interface, openvpn may not send udp datagrams to the peer using the correct source ip address. If a host sends the udp datagrams to the ip address A, then it should receive the answer from A even if the its peer has multiple ip addresses and the default routing selects a different one. The issue can be reproduced with the following scenario: Host A is connected to two gateways each on the same subnet: gw1 with ip address 10.0.0.254 gw2 with ip address 10.0.0.253 Host A has two ip addresses: 10.0.0.1 and 10.0.0.2. It receives DNAT-ed traffic from gw1 via 10.0.0.1 and DNAT-ed traffic from gw2 via 10.0.0.2. Two ip rules are set up on the host A: ip rule add from 10.0.0.1 table 1 ip rule add from 10.0.0.2 table 2 and three default routes: ip route add default via 10.0.0.254 table 1 ip route add default via 10.0.0.253 table 2 ip route add default via 10.0.0.254 This way all traffic from 10.0.0.1 will go via 10.0.0.254 and all traffic from 10.0.0.2 will go via 10.0.0.253. The current openvpn server doesn't work if it receives a connection from the router gw2 because it will send its udp datagrams via gw1. Saving the destination ip address on which the udp datagram arrived and then using it as the source ip address solves this issue. Signed-off-by: Krzysztof Witek <krz...@wi...> --- src/openvpn/forward.c | 6 ++++-- src/openvpn/openvpn.h | 1 + src/openvpn/socket.c | 19 +++++++++++-------- src/openvpn/socket.h | 28 ++++++++++++++++++---------- 4 files changed, 34 insertions(+), 20 deletions(-) diff --git a/src/openvpn/forward.c b/src/openvpn/forward.c index 57c7846..6e629c2 100644 --- a/src/openvpn/forward.c +++ b/src/openvpn/forward.c @@ -674,7 +674,8 @@ read_incoming_link (struct context *c) status = link_socket_read (c->c2.link_socket, &c->c2.buf, MAX_RW_SIZE_LINK (&c->c2.frame), - &c->c2.from); + &c->c2.from, + &c->c2.to); if (socket_connection_reset (c->c2.link_socket, status)) { @@ -1135,7 +1136,8 @@ process_outgoing_link (struct context *c) /* Send packet */ size = link_socket_write (c->c2.link_socket, &c->c2.to_link, - to_addr); + to_addr, + &c->c2.to); #ifdef ENABLE_SOCKS /* Undo effect of prepend */ diff --git a/src/openvpn/openvpn.h b/src/openvpn/openvpn.h index 7abfb08..53a3c00 100644 --- a/src/openvpn/openvpn.h +++ b/src/openvpn/openvpn.h @@ -258,6 +258,7 @@ struct context_2 struct link_socket_actual *to_link_addr; /* IP address of remote */ struct link_socket_actual from; /* address of incoming datagram */ + struct link_socket_actual to; /* address of local datagram */ /* MTU frame parameters */ struct frame frame; diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c index 505cf3b..0f57973 100644 --- a/src/openvpn/socket.c +++ b/src/openvpn/socket.c @@ -653,7 +653,7 @@ create_socket_udp (const unsigned int flags) { int pad = 1; #ifdef IP_PKTINFO - if (setsockopt (sd, SOL_IP, IP_PKTINFO, + if (setsockopt (sd, IPPROTO_IP, IP_PKTINFO, (void*)&pad, sizeof(pad)) < 0) msg(M_ERR, "UDP: failed setsockopt for IP_PKTINFO"); #elif defined(IP_RECVDSTADDR) @@ -2657,7 +2657,8 @@ static socklen_t link_socket_read_udp_posix_recvmsg (struct link_socket *sock, struct buffer *buf, int maxsize, - struct link_socket_actual *from) + struct link_socket_actual *from, + struct link_socket_actual *to) { struct iovec iov; union openvpn_pktinfo opi; @@ -2680,11 +2681,10 @@ link_socket_read_udp_posix_recvmsg (struct link_socket *sock, cmsg = CMSG_FIRSTHDR (&mesg); if (cmsg != NULL && CMSG_NXTHDR (&mesg, cmsg) == NULL + && cmsg->cmsg_level == IPPROTO_IP #ifdef IP_PKTINFO - && cmsg->cmsg_level == SOL_IP && cmsg->cmsg_type == IP_PKTINFO #elif defined(IP_RECVDSTADDR) - && cmsg->cmsg_level == IPPROTO_IP && cmsg->cmsg_type == IP_RECVDSTADDR #else #error ENABLE_IP_PKTINFO is set without IP_PKTINFO xor IP_RECVDSTADDR (fix syshead.h) @@ -2695,6 +2695,7 @@ link_socket_read_udp_posix_recvmsg (struct link_socket *sock, struct in_pktinfo *pkti = (struct in_pktinfo *) CMSG_DATA (cmsg); from->pi.in4.ipi_ifindex = pkti->ipi_ifindex; from->pi.in4.ipi_spec_dst = pkti->ipi_spec_dst; + to->pi.in4.ipi_addr = pkti->ipi_addr; #elif defined(IP_RECVDSTADDR) from->pi.in4 = *(struct in_addr*) CMSG_DATA (cmsg); #else @@ -2720,7 +2721,8 @@ int link_socket_read_udp_posix (struct link_socket *sock, struct buffer *buf, int maxsize, - struct link_socket_actual *from) + struct link_socket_actual *from, + struct link_socket_actual *to) { socklen_t fromlen = sizeof (from->dest.addr); socklen_t expectedlen = af_addr_size(proto_sa_family(sock->info.proto)); @@ -2729,7 +2731,7 @@ link_socket_read_udp_posix (struct link_socket *sock, #if ENABLE_IP_PKTINFO /* Both PROTO_UDPv4 and PROTO_UDPv6 */ if (proto_is_udp(sock->info.proto) && sock->sockflags & SF_USE_IP_PKTINFO) - fromlen = link_socket_read_udp_posix_recvmsg (sock, buf, maxsize, from); + fromlen = link_socket_read_udp_posix_recvmsg (sock, buf, maxsize, from, to); else #endif buf->len = recvfrom (sock->sd, BPTR (buf), maxsize, 0, @@ -2767,7 +2769,8 @@ link_socket_write_tcp (struct link_socket *sock, int link_socket_write_udp_posix_sendmsg (struct link_socket *sock, struct buffer *buf, - struct link_socket_actual *to) + struct link_socket_actual *to, + struct link_socket_actual *from) { struct iovec iov; struct msghdr mesg; @@ -2797,7 +2800,7 @@ link_socket_write_udp_posix_sendmsg (struct link_socket *sock, pkti = (struct in_pktinfo *) CMSG_DATA (cmsg); pkti->ipi_ifindex = to->pi.in4.ipi_ifindex; pkti->ipi_spec_dst = to->pi.in4.ipi_spec_dst; - pkti->ipi_addr.s_addr = 0; + pkti->ipi_addr = from->pi.in4.ipi_addr; } #elif defined(IP_RECVDSTADDR) cmsg->cmsg_level = IPPROTO_IP; diff --git a/src/openvpn/socket.h b/src/openvpn/socket.h index 44f1098..7aad95f 100644 --- a/src/openvpn/socket.h +++ b/src/openvpn/socket.h @@ -867,7 +867,8 @@ link_socket_read_udp_win32 (struct link_socket *sock, int link_socket_read_udp_posix (struct link_socket *sock, struct buffer *buf, int maxsize, - struct link_socket_actual *from); + struct link_socket_actual *from, + struct link_socket_actual *to); #endif @@ -876,16 +877,18 @@ static inline int link_socket_read (struct link_socket *sock, struct buffer *buf, int maxsize, - struct link_socket_actual *from) + struct link_socket_actual *from, + struct link_socket_actual *to) { if (proto_is_udp(sock->info.proto)) /* unified UDPv4 and UDPv6 */ { int res; #ifdef WIN32 + (void) to; res = link_socket_read_udp_win32 (sock, buf, from); #else - res = link_socket_read_udp_posix (sock, buf, maxsize, from); + res = link_socket_read_udp_posix (sock, buf, maxsize, from, to); #endif return res; } @@ -940,16 +943,18 @@ link_socket_write_win32 (struct link_socket *sock, static inline int link_socket_write_udp_posix (struct link_socket *sock, struct buffer *buf, - struct link_socket_actual *to) + struct link_socket_actual *to, + struct link_socket_actual *from) { #if ENABLE_IP_PKTINFO int link_socket_write_udp_posix_sendmsg (struct link_socket *sock, struct buffer *buf, - struct link_socket_actual *to); + struct link_socket_actual *to, + struct link_socket_actual *from); if (proto_is_udp(sock->info.proto) && (sock->sockflags & SF_USE_IP_PKTINFO) && addr_defined_ipi(to)) - return link_socket_write_udp_posix_sendmsg (sock, buf, to); + return link_socket_write_udp_posix_sendmsg (sock, buf, to, from); else #endif return sendto (sock->sd, BPTR (buf), BLEN (buf), 0, @@ -970,12 +975,14 @@ link_socket_write_tcp_posix (struct link_socket *sock, static inline int link_socket_write_udp (struct link_socket *sock, struct buffer *buf, - struct link_socket_actual *to) + struct link_socket_actual *to, + struct link_socket_actual *from) { #ifdef WIN32 + (void) from; return link_socket_write_win32 (sock, buf, to); #else - return link_socket_write_udp_posix (sock, buf, to); + return link_socket_write_udp_posix (sock, buf, to, from); #endif } @@ -983,11 +990,12 @@ link_socket_write_udp (struct link_socket *sock, static inline int link_socket_write (struct link_socket *sock, struct buffer *buf, - struct link_socket_actual *to) + struct link_socket_actual *to, + struct link_socket_actual *from) { if (proto_is_udp(sock->info.proto)) /* unified UDPv4 and UDPv6 */ { - return link_socket_write_udp (sock, buf, to); + return link_socket_write_udp (sock, buf, to, from); } else if (proto_is_tcp(sock->info.proto)) /* unified TCPv4 and TCPv6 */ { -- 1.7.0.4 |
| From: Gert D. <ge...@gr...> - 2012-09-24 15:21:06 |
Hi, On Mon, Sep 24, 2012 at 02:56:50AM -0700, ehsan enayati wrote: > thanks for your quick reply, I know that openvpn is single threaded but it supports multiple user connection simultaneously, I wanted to know how this is done although it just have one thread. "by sufficiently advanced magic" gert -- USENET is *not* the non-clickable part of WWW! //www.muc.de/~gert/ Gert Doering - Munich, Germany ge...@gr... fax: +49-89-35655025 ge...@ne... |
| From: ehsan e. <ehs...@ya...> - 2012-09-24 09:57:01 |
thanks for your quick reply, I know that openvpn is single threaded but it supports multiple user connection simultaneously, I wanted to know how this is done although it just have one thread. thanks - ________________________________ From: Gert Doering <ge...@gr...> To: ehsan enayati <ehs...@ya...> Cc: "ope...@li..." <ope...@li...> Sent: Monday, September 24, 2012 12:48 PM Subject: Re: [Openvpn-devel] multi threading support Hi, On Mon, Sep 24, 2012 at 02:00:46AM -0700, ehsan enayati wrote: > Hi, i wanna know how does openvpn server handles multiple requests? > for example if there is an active connection with a client on 1194 > port and another requests from some other client comes in what will > happen? Is this task managed in operating system or by openvpn > itself? OpenVPN itself (single-threaded with smart work queues). Multi-Threading might happen in OpenVPN 3.0. gert -- USENET is *not* the non-clickable part of WWW! //www.muc.de/~gert/ Gert Doering - Munich, Germany ge...@gr... fax: +49-89-35655025 ge...@ne... |
| From: Gert D. <ge...@gr...> - 2012-09-24 09:18:49 |
Hi, On Mon, Sep 24, 2012 at 02:00:46AM -0700, ehsan enayati wrote: > Hi, i wanna know how does openvpn server handles multiple requests? > for example if there is an active connection with a client on 1194 > port and another requests from some other client comes in what will > happen? Is this task managed in operating system or by openvpn > itself? OpenVPN itself (single-threaded with smart work queues). Multi-Threading might happen in OpenVPN 3.0. gert -- USENET is *not* the non-clickable part of WWW! //www.muc.de/~gert/ Gert Doering - Munich, Germany ge...@gr... fax: +49-89-35655025 ge...@ne... |
| From: ehsan e. <ehs...@ya...> - 2012-09-24 09:00:57 |
Hi, i wanna know how does openvpn server handles multiple requests? for example if there is an active connection with a client on 1194 port and another requests from some other client comes in what will happen? Is this task managed in operating system or by openvpn itself? Thanks |