ipv6: Add labels for site-local and 6bone testing addresses (RFC6724)
authorYOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org>
Mon, 10 Sep 2012 18:16:49 +0000 (18:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Sep 2012 20:34:03 +0000 (16:34 -0400)
Added labels for site-local addresses (fec0::/10) and 6bone testing
addresses (3ffe::/16) in order to depreference them.

Note that the RFC introduced new rows for Teredo, ULA and 6to4 addresses
in the default policy table.  Some of them have different labels from ours.
For backward compatibility, we do not change the "default" labels.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrlabel.c

index 0b01715..4be23da 100644 (file)
@@ -57,7 +57,7 @@ struct net *ip6addrlbl_net(const struct ip6addrlbl_entry *lbl)
 }
 
 /*
- * Default policy table (RFC3484 + extensions)
+ * Default policy table (RFC6724 + extensions)
  *
  * prefix              addr_type       label
  * -------------------------------------------------------------------------
@@ -69,8 +69,12 @@ struct net *ip6addrlbl_net(const struct ip6addrlbl_entry *lbl)
  * fc00::/7            N/A             5               ULA (RFC 4193)
  * 2001::/32           N/A             6               Teredo (RFC 4380)
  * 2001:10::/28                N/A             7               ORCHID (RFC 4843)
+ * fec0::/10           N/A             11              Site-local
+ *                                                     (deprecated by RFC3879)
+ * 3ffe::/16           N/A             12              6bone
  *
  * Note: 0xffffffff is used if we do not have any policies.
+ * Note: Labels for ULA and 6to4 are different from labels listed in RFC6724.
  */
 
 #define IPV6_ADDR_LABEL_DEFAULT        0xffffffffUL
@@ -88,10 +92,18 @@ static const __net_initdata struct ip6addrlbl_init_table
                .prefix = &(struct in6_addr){{{ 0xfc }}},
                .prefixlen = 7,
                .label = 5,
+       },{     /* fec0::/10 */
+               .prefix = &(struct in6_addr){{{ 0xfe, 0xc0 }}},
+               .prefixlen = 10,
+               .label = 11,
        },{     /* 2002::/16 */
                .prefix = &(struct in6_addr){{{ 0x20, 0x02 }}},
                .prefixlen = 16,
                .label = 2,
+       },{     /* 3ffe::/16 */
+               .prefix = &(struct in6_addr){{{ 0x3f, 0xfe }}},
+               .prefixlen = 16,
+               .label = 12,
        },{     /* 2001::/32 */
                .prefix = &(struct in6_addr){{{ 0x20, 0x01 }}},
                .prefixlen = 32,