Subject: bug#74907: 31.0.50; nsm-check-local-subnet-ipv4 test fails on macOS with VPN enabled

From: Stefan Kangas <[email-masked]>
Date: Tue, 17 Dec 2024 12:45:26 +0000

Robert Pluim <[email-masked]> writes:

>>>>>> On Tue, 17 Dec 2024 11:26:28 +0000, Stefan Kangas <[email-masked]> said:
>
>     Stefan>     (substring (nth 3 info) 0 -1)
>
>     Stefan> With a VPN, `info` is bound to this when I get the backtrace:
>
>     Stefan>     ("utun0"
>     Stefan>      [10 0 0 1 0]
>     Stefan>      (0 . [0 0 10 255 255 255 16 2 0 0 10 0 0 1])
>     Stefan>      (0 . [0 0 255 0 0 0 16 2 0 0 10 0 0 1]))
>
>     Stefan> Without a VPN, `info` is bound to this instead:
>
>     Stefan>     ("utun6"
>     Stefan>      [65153 0 0 0 6123 19123 32345 45123 0]
>     Stefan>      [65153 0 0 0 65535 65535 65535 65535 0]
>     Stefan>      [65535 65535 65535 65535 0 0 0 0 0])
>
>     Stefan> Clearly, this will not work:
>
>     Stefan>     (substring '(0 . [1 2 3 4]) 0 -1)
>
>     Stefan> So the question is why `network-interface-list` would return such an
>     Stefan> unusual value here.
>
> Because getifaddrs is returning bogus info for the netmask. How about this:
>
> diff --git a/src/process.c b/src/process.c
> index cd1378f07ad..4fe16ad1a85 100644
> --- a/src/process.c
> +++ b/src/process.c
> @@ -4351,6 +4351,7 @@ network_interface_list (bool full, unsigned short match)
>
>        if (full)
>          {
> +	  it->ifa_netmask->sa_family = it->ifa_addr->sa_family;
>            elt = Fcons (conv_sockaddr_to_lisp (it->ifa_netmask, len), elt);
>            /* There is an it->ifa_broadaddr field, but its contents are
>               unreliable, so always calculate the broadcast address from

Thanks, that fixes the issue.  Tested with and without VPN on macOS.