Le support 6rd a été intégré à partir de linux 2.6.33 (
Kconfig,
sit.c). Par rapport au patch précité, il y a plus de paramètres :
59struct ip_tunnel_6rd {
60 struct in6_addr prefix;
61 __be32 relay_prefix;
62 __u16 prefixlen;
63 __u16 relay_prefixlen;
64};
On a ajouté un préfixe IPv4 :
prefixIPv4 = relay_prefix/relay_prefixlen
Chaque abonné est identifié par ID et non par son adresse IPv4:
IPv4 = prefixIPv4 || ID
ID est le suffixe de l'adresse IPv4. ID fait donc (32 - relay_prefixlen) bits; l'espace d'adressage peut être économisé.
On a donc :
addrv6 = prefix || ID || localpart
Le mode 6rd de base qu'utilise Free est obtenu avec relay_prefixlen = 0.
On remarque quand CONFIG_IPV6_SIT_6RD est sélectionné, le 6to4 est défini par
ipip6_tunnel_clone_6rd comme étant du 6rd :
204 if (t->dev == sitn->fb_tunnel_dev) {
205 ipv6_addr_set(&t->ip6rd.prefix, htonl(0x20020000), 0, 0, 0);
206 t->ip6rd.relay_prefix = 0;
207 t->ip6rd.prefixlen = 16;
208 t->ip6rd.relay_prefixlen = 0;
209 } else {