# Significant IPv6 packet loss on 9.0R



## djbloc (Dec 6, 2012)

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:


```
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:


```
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:


```
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.


```
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:


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

Re-running the command ifconfig returns:


```
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:


```
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


----------



## SirDice (Dec 7, 2012)

Leave the link-local address. You need it.


----------



## kpa (Dec 7, 2012)

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.


----------



## SirDice (Dec 7, 2012)

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.


```
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
```


----------



## kpa (Dec 7, 2012)

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.


----------

