Re: Multiple Fibs and INET6

From: Santiago Martinez <sm_at_codenetworks.net>
Date: Thu, 18 Jul 2024 16:11:53 UTC
Interesting, I'm running 14.1p2.

how does your routing table looks for fib1 ?

Santi


On 7/18/24 18:09, Zhenlei Huang wrote:
>
>
>> On Jul 13, 2024, at 1:06 AM, Santiago Martinez <sm@codenetworks.net> 
>> wrote:
>>
>> Hi Everyone.
>>
>> While adding -F ( fib as used in netstat ) to ping and ping6 I have 
>> found something that from my understanding is not correct.
>> Please can you advise?
>>
>> I have the following setup :
>>
>> -- two fibs (0 and 1)
>> -- two  loop-backs (lo0 and lo1).
>> -- Lo1 has been assigned to fib1
>> --net.add_addr_allfibs = 0
>>
>> My interface output looks like this:
>>
>>
>> ifconfig lo0 | grep inet6
>>        inet6 ::1 prefixlen 128
>>        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
>>
>> ifconfig lo1 | grep inet6
>>        inet6 fe80::1%lo1 prefixlen 64 scopeid 0x3
>>
>> If I do a netstat -rn -6  -F0 I get the following which is was i 
>> expected.
>>
>> Internet6:
>> Destination                       Gateway                       Flags 
>>     Netif Expire
>> ::/96                             link#2                        URS 
>>         lo0
>> ::1                               link#2                        UHS 
>>         lo0
>> ::ffff:0.0.0.0/96                 link#2                        URS 
>>         lo0
>> fe80::%lo0/10                     link#2                        URS 
>>         lo0
>> fe80::%lo0/64                     link#2                        U 
>>           lo0
>> fe80::1%lo0                       link#2                        UHS 
>>         lo0
>> ff02::/16                         link#2                        URS 
>>         lo0
>>
>> Now,  netstat -rn -6  -F1 shows  "fe80::1%lo0" which should not be 
>> there and "fe80::1%lo1" is missing which should be there.
>>
>> Internet6:
>> Destination                       Gateway                       Flags 
>>     Netif Expire
>> fe80::%lo1/64                     link#3                        U 
>>           lo1
>> *fe80::1%lo0                       link#2                        UHS 
>>         lo0*
>>
> That seems wrong from my first glance. IIRC, there's HACK ( I'd prefer 
> this ) for loopback route. For example
> ```
> # sysctl net.fibs=3
> net.fibs: 2 -> 3
> # ifconfig epair create
> # epair0a
> # ifconfig epair0a fib 2
> # ifconfig epair0a inet6 -ifdisabled up
> # netstat -6rnF 2
> Routing tables (fib: 2)
>
> Internet6:
> Destination                     Gateway                       Flags   
> Netif Expire
> fe80::%epair0a/64                 link#5                        U epair0a
> fe80::3b:b3ff:fe8f:9a0a%lo0       link#1                        UHS   
>       lo0
> ```
>
> The loopback route always refer the first loop interface, aka lo0.
>>
>>
>> What output I was expecting was:
>>
>> Internet6:
>> Destination                       Gateway                       Flags 
>>     Netif Expire
>> fe80::%lo1/64                     link#3                        U 
>>           lo1
>> *fe80::1%lo1                       link#3                        UHS 
>>         lo1*
>>
>>
>> This makes the ping -6 -F0 fe80::1%lo0  to work but ping -6 -F1 
>> fe80::1%l01 to fail which I wanted to use as test case.
>>
> That is interesting. I can ping without failure.
>
> ```
> # setfib 1 ping6 -c3 fe80::1%lo1
> PING(56=40+8+8 bytes) fe80::1%lo1 --> fe80::1%lo1
> 16 bytes from fe80::1%lo1, icmp_seq=0 hlim=64 time=0.050 ms
> 16 bytes from fe80::1%lo1, icmp_seq=1 hlim=64 time=0.067 ms
> 16 bytes from fe80::1%lo1, icmp_seq=2 hlim=64 time=0.096 ms
>
> --- fe80::1%lo1 ping statistics ---
> 3 packets transmitted, 3 packets received, 0.0% packet loss
> round-trip min/avg/max/stddev = 0.050/0.071/0.096/0.019 ms
> ```
>
> Best regards,
> Zhenlei
>
>> Thanks in advance.
>>
>> Santiago
>>
>>
>
>
>