Re: [Openvpn-devel] [PATCH v4] route.c: use sitnl to implement get_default_gateway_ipv6()

2019-07-15 Thread Antonio Quartulli
Hi,

On 14/07/2019 22:02, Gert Doering wrote:
> It *must not* set the ON_LINK flag for routes that are behind a gatway
> ("route to gateway" vs. "route to interface"), but it still does.
> 

[SKIP SKIP]

> 
> as you can see, it now insists on "everything is ON_LINK".
> 

interesting to note that on my test machine I don't see this behaviour.
ON_LINK is returned only when appropriate.

> 
> Now... I think the issue might be just that you removed the
> 
> -CLEAR(*rgi6);
> 
> bit, so "there is cruft in that structure, and it is flagged as 
> 'the ON_LINK bit is set'" - but it's too late for me to do a full
> code review, so can't say for sure.  If I just add it back, it
> behaves correctly, but it would be good to give this function another
> long and hard stare...
> 

This makes a lot of sense: that CLEAR() statement has been removed by
accident.

And honestly this missing initialization is somewhat compatible with not
always seeing the problem (initialization of stack variables may differ
on different platforms based on compiler version, kernel options, etc..).

Actually I also realized that the 'gw' variable introduced next to this
line was not used, so I have got rid of it.

> However - as it is today, I need to NAK this.  Sorry.  (And I should
> have been much quicker)

No worries. v5 incoming!!

Cheers,

> 
> gert
> 
> (PS: FreeBSD is, as expected, showing the same things before/after, with
> ON_LINK only for test 3+4 - but that's a totally different code path, so
> no surprises here)
> 

-- 
Antonio Quartulli



signature.asc
Description: OpenPGP digital signature
___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel


Re: [Openvpn-devel] [PATCH v4] route.c: use sitnl to implement get_default_gateway_ipv6()

2019-07-14 Thread Gert Doering
Hi,

On Tue, Jul 09, 2019 at 12:48:06AM +0200, Antonio Quartulli wrote:
> 
> Changes from v1:
> - use IN6_IS_ADDR_UNSPECIFIED to check if GW address is specified. This fixes
>   the issue of never setting the ON_LINK flag for IPv6 routes

Something is still not working correctly.

It *must not* set the ON_LINK flag for routes that are behind a gatway
("route to gateway" vs. "route to interface"), but it still does.

Here's what I tested:

 - my home network has 2001:608:4:0::/64 on link
 - I have set up a route fd00::200::/48 -> tun0  (no gateway)
 - default gateway is either statically configured (FreeBSD) or learned
   from RA (linux)
 - I asked openvpn the following question:

openvpn --show-gateway
openvpn --show-gateway 2001:608::2
openvpn --show-gateway 2001:608:4::123
openvpn --show-gateway fd00::200::1

the first is "find me the way to reach ::", which is via default 
gateway (and the target is not ON_LINK), the second is "find me the
way to this particular IPv6 address" - which is also via default
gateway (here), and not ON_LINK.

The third is "find me the way to reach 2001:608:4::123", which is
another host on the LAN, so packets for this IPv6 address must be 
sent "towards the LAN" not "to a gateway" -> this is ON_LINK.

The fourth is something of an oddball, point to point interfaces
do not have neighbour discovery - so all routes to a gateway *behind*
a p2p interface are also "ON_LINK", as there is no gateway we could
put into a route.


Now, this is what OpenVPN 2.4.7 prints here (or master "with no patch")
(leaving off IPv4):

$ openvpn247 --show-gateway
Sun Jul 14 21:51:09 2019 ROUTE6_GATEWAY fe80::250:43ff:fe01:dc37 IFACE=enp0s25
$ openvpn247 --show-gateway 2001:608::2
Sun Jul 14 21:51:22 2019 ROUTE6_GATEWAY fe80::250:43ff:fe01:dc37 IFACE=enp0s25
$ openvpn247 --show-gateway 2001:608:4::123
Sun Jul 14 21:51:33 2019 ROUTE6_GATEWAY 2001:608:4::123 ON_LINK IFACE=enp0s25
$ openvpn247 --show-gateway  fd00::200::1
Sun Jul 14 21:52:14 2019 ROUTE6_GATEWAY fd00::200::1 ON_LINK IFACE=tun0

and this is what OpenVPN master + your patch prints

$ src/openvpn/openvpn --show-gateway
Sun Jul 14 21:42:25 2019 ROUTE6_GATEWAY fe80::250:43ff:fe01:dc37 ON_LINK 
IFACE=enp0s25 HWADDR=00:00:00:00:54:97
$ src/openvpn/openvpn --show-gateway 2001:608::2 
Sun Jul 14 21:46:02 2019 ROUTE6_GATEWAY fe80::250:43ff:fe01:dc37 ON_LINK 
IFACE=enp0s25 HWADDR=00:00:00:00:54:b7
$ src/openvpn/openvpn --show-gateway 2001:608:4::123
Sun Jul 14 21:42:51 2019 ROUTE6_GATEWAY 2001:608:4::123 ON_LINK IFACE=enp0s25
$ src/openvpn/openvpn --show-gateway fd00::200::1
Sun Jul 14 21:42:59 2019 ROUTE6_GATEWAY fd00::200::1 ON_LINK IFACE=tun0 
HWADDR=00:00:00:00:54:87

as you can see, it now insists on "everything is ON_LINK".


Now... I think the issue might be just that you removed the

-CLEAR(*rgi6);

bit, so "there is cruft in that structure, and it is flagged as 
'the ON_LINK bit is set'" - but it's too late for me to do a full
code review, so can't say for sure.  If I just add it back, it
behaves correctly, but it would be good to give this function another
long and hard stare...

However - as it is today, I need to NAK this.  Sorry.  (And I should
have been much quicker)

gert

(PS: FreeBSD is, as expected, showing the same things before/after, with
ON_LINK only for test 3+4 - but that's a totally different code path, so
no surprises here)
-- 
"If was one thing all people took for granted, was conviction that if you 
 feed honest figures into a computer, honest figures come out. Never doubted 
 it myself till I met a computer with a sense of humor."
 Robert A. Heinlein, The Moon is a Harsh Mistress

Gert Doering - Munich, Germany g...@greenie.muc.de


signature.asc
Description: PGP signature
___
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel