Merge tag 'mips_5.15' of git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux
[linux-2.6-microblaze.git] / net / ipv6 / addrconf.c
index 8381288..17756f3 100644 (file)
@@ -394,6 +394,7 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
                ndev->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
 
        ndev->cnf.mtu6 = dev->mtu;
+       ndev->ra_mtu = 0;
        ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);
        if (!ndev->nd_parms) {
                kfree(ndev);
@@ -3849,6 +3850,7 @@ restart:
        }
 
        idev->tstamp = jiffies;
+       idev->ra_mtu = 0;
 
        /* Last: Shot the device (if unregistered) */
        if (unregister) {
@@ -5543,6 +5545,7 @@ static inline size_t inet6_ifla6_size(void)
             + nla_total_size(ICMP6_MIB_MAX * 8) /* IFLA_INET6_ICMP6STATS */
             + nla_total_size(sizeof(struct in6_addr)) /* IFLA_INET6_TOKEN */
             + nla_total_size(1) /* IFLA_INET6_ADDR_GEN_MODE */
+            + nla_total_size(4) /* IFLA_INET6_RA_MTU */
             + 0;
 }
 
@@ -5651,6 +5654,10 @@ static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev,
        if (nla_put_u8(skb, IFLA_INET6_ADDR_GEN_MODE, idev->cnf.addr_gen_mode))
                goto nla_put_failure;
 
+       if (idev->ra_mtu &&
+           nla_put_u32(skb, IFLA_INET6_RA_MTU, idev->ra_mtu))
+               goto nla_put_failure;
+
        return 0;
 
 nla_put_failure:
@@ -5767,6 +5774,9 @@ update_lft:
 static const struct nla_policy inet6_af_policy[IFLA_INET6_MAX + 1] = {
        [IFLA_INET6_ADDR_GEN_MODE]      = { .type = NLA_U8 },
        [IFLA_INET6_TOKEN]              = { .len = sizeof(struct in6_addr) },
+       [IFLA_INET6_RA_MTU]             = { .type = NLA_REJECT,
+                                           .reject_message =
+                                               "IFLA_INET6_RA_MTU can not be set" },
 };
 
 static int check_addr_gen_mode(int mode)