Significant IPv6 packet loss on 9.0R

Hello,

I wanted to try out FreeBSD for a while and recently installed FreeBSD 9.0. Unfortunately I have a networking issue that I can't seem to resolve. While I'm experienced in linux, I am new to both FreeBSD and IPv6.

After installing FreeBSD, I setup up IPv6 using guidance found in the handbook. My host specifies that the gateway address for IPv6 should be fe80::1 (http://www.bytemark.co.uk/support/technical_documents/ipv6)

In /etc/rc.conf I've added the following lines:

Code:
ifconfig_vtnet0_ipv6="inet6 2001:41c8:51:f9:feff:ff:fe00:a9e prefixlen 64"
ipv6_defaultrouter="fe80::1%vtnet0"

Rebooting the machine and running ifconfig returns:

Code:
vtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500                                                                                    
        options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>                                                                                                             
        ether fe:ff:00:00:0a:9e
        inet6 2001:41c8:51:f9:feff:ff:fe00:a9e prefixlen 64 
        inet6 fe80::fcff:ff:fe00:a9e%vtnet0 prefixlen 64 scopeid 0x2 
        inet 213.138.100.249 netmask 0xffffff00 broadcast 213.138.100.255
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: Ethernet 1000baseT <full-duplex>
        status: active

Running netstat -rn returns:

Code:
Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0 =>
default                           fe80::1%vtnet0                UGS      vtnet0
::1                               ::1                           UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
2001:41c8:51:f9::/64              link#2                        U        vtnet0
2001:41c8:51:f9:feff:ff:fe00:a9e  link#2                        UHS         lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%vtnet0/64                  link#2                        U        vtnet0
fe80::fcff:ff:fe00:a9e%vtnet0     link#2                        UHS         lo0
fe80::%lo0/64                     link#4                        U           lo0
fe80::1%lo0                       link#4                        UHS         lo0
ff01::%vtnet0/32                  2001:41c8:51:f9:feff:ff:fe00:a9e U        vtnet0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%vtnet0/32                  2001:41c8:51:f9:feff:ff:fe00:a9e U        vtnet0
ff02::%lo0/32                     ::1                           U           lo0

At this point if I try to ping ipv6.google.com or ipv6.download.thinkbroadband.com over a course of a minute I see significant packet loss (> 60%). It seems the interface works, then drops a load of packets, then returns to working again.

Code:
ping6 ipv6.google.com
PING6(56=40+8+8 bytes) 2001:41c8:51:f9:feff:ff:fe00:a9e --> 2a00:1450:400c:c03::93
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=0 hlim=56 time=18.105 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=1 hlim=56 time=13.102 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=2 hlim=56 time=12.965 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=3 hlim=56 time=13.009 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=4 hlim=56 time=12.913 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=5 hlim=56 time=12.961 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=6 hlim=56 time=13.009 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=7 hlim=56 time=13.072 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=25 hlim=56 time=1002.069 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=26 hlim=56 time=15.304 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=27 hlim=56 time=13.089 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=28 hlim=56 time=13.517 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=29 hlim=56 time=13.127 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=30 hlim=56 time=12.931 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=31 hlim=56 time=13.000 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=32 hlim=56 time=12.954 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=33 hlim=56 time=13.045 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=51 hlim=56 time=1001.775 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=52 hlim=56 time=16.977 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=53 hlim=56 time=13.299 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=54 hlim=56 time=12.983 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=55 hlim=56 time=13.038 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=56 hlim=56 time=12.929 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=57 hlim=56 time=13.192 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=58 hlim=56 time=13.040 ms
16 bytes from 2a00:1450:400c:c03::93, icmp_seq=59 hlim=56 time=13.127 ms
^C
--- ipv6.l.google.com ping6 statistics ---
61 packets transmitted, 26 packets received, 57.4% packet loss
round-trip min/avg/max/std-dev = 12.913/89.559/1002.069/263.380 ms

Not knowing why there seemed to be two inet6 addresses in ifconfig, I deleted the "fe80..." inet6 address with the following command:

Code:
ifconfig vtnet0 inet6 fe80::fcff:ff:fe00:a9e%vtnet0 delete

Re-running the command ifconfig returns:

Code:
vtnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>
        ether fe:ff:00:00:0a:9e
        inet6 2001:41c8:51:f9:feff:ff:fe00:a9e prefixlen 64 
        inet 213.138.100.249 netmask 0xffffff00 broadcast 213.138.100.255
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: Ethernet 1000baseT <full-duplex>
        status: active

Running netstat -rn again, returns:

Code:
Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0 =>
default                           fe80::1%vtnet0                UGS      vtnet0
::1                               ::1                           UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
2001:41c8:51:f9::/64              link#2                        U        vtnet0
2001:41c8:51:f9:feff:ff:fe00:a9e  link#2                        UHS         lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%vtnet0/64                  link#2                        U        vtnet0
fe80::%lo0/64                     link#4                        U           lo0
fe80::1%lo0                       link#4                        UHS         lo0
ff01::%vtnet0/32                  2001:41c8:51:f9:feff:ff:fe00:a9e U        vtnet0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%vtnet0/32                  2001:41c8:51:f9:feff:ff:fe00:a9e U        vtnet0
ff02::%lo0/32                     ::1                           U           lo0

Retrying ping6, I now get no packet loss when trying either ipv6.google.com or ipv6.download.thinkbroadband.com. On one test I left it for 30 mins with no packet loss.

I've tried a number of things with no luck. I tried appending "-auto_linklocal" to the end of ifconfig_vtnet0_ipv6 configuration in /etc/rc.conf. On reboot, the inet6 address starting "fe80..." was not created but also I could not ping6 any host with the command returning "ping6: UDP connect: No route to host"

I should point out that IPv4 is working fine.

I'm stuck so any pointers to avoiding IPv6 packet loss without manual intervention would be greatly appreciated.

Thanks for your time
djbloc
 
As SirDice said, don't mess with the link-local address, it's part of the spec and required for operation.


Someone who knows more please correct me if I'm wrong but I think you shouldn't be given a fe80: address for the default gateway when manually configuring the interface and default gw. You should be given a real routable ipv6 address for the default gw in that case.
 
kpa said:
Someone who knows more please correct me if I'm wrong but I think you shouldn't be given a fe80: address for the default gateway when manually configuring the interface and default gw. You should be given a real routable ipv6 address for the default gw in that case.
No, this appears to be correct. When I first started with IPv6 I received a global address for a default gateway. These days I too get a link-local address. If I recall correctly that's supposed to happen according to the IPv6 specifications.

Code:
root@williscorto:~# netstat -rn -f inet6
Routing tables

Internet6:
Destination                       Gateway                       Flags      Netif Expire
::/96                             ::1                           UGRS        lo0 =>
default                           fe80::211:9ff:fe88:861c%re0   UG          re0
::1                               link#9                        UH          lo0
::ffff:0.0.0.0/96                 ::1                           UGRS        lo0
2001:980:169e::/64                link#1                        U           re0
2001:980:169e::3000               link#1                        UHS         lo0
2001:980:169e:0:201:2eff:fe41:a3e8 link#1                        UHS         lo0
fe80::/10                         ::1                           UGRS        lo0
fe80::%re0/64                     link#1                        U           re0
fe80::201:2eff:fe41:a3e8%re0      link#1                        UHS         lo0
fe80::%lo0/64                     link#9                        U           lo0
fe80::1%lo0                       link#9                        UHS         lo0
ff01::%re0/32                     fe80::201:2eff:fe41:a3e8%re0  U           re0
ff01::%lo0/32                     ::1                           U           lo0
ff02::/16                         ::1                           UGRS        lo0
ff02::%re0/32                     fe80::201:2eff:fe41:a3e8%re0  U           re0
ff02::%lo0/32                     ::1                           U           lo0
 
Well that makes sense, the gateway address has to be reachable on the link and nothing more. A link-local address is sufficient for that purpose regardless of the configuration method.
 
Back
Top