kernel: bump 4.14 to 4.14.77
[openwrt/openwrt.git] / target / linux / generic / pending-4.14 / 666-Add-support-for-MAP-E-FMRs-mesh-mode.patch
index 4a76db0ff30e84cbc36fff4915439fd8a976dddf..0b46ed9e47b8009ab12d2e77ffddb8c995f6d5e2 100644 (file)
@@ -268,7 +268,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        skb_reset_network_header(skb);
        memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
  
-+      if (tpi->proto == htons(ETH_P_IP) &&
++      if (tpi->proto == htons(ETH_P_IP) && tunnel->parms.fmrs &&
 +              !ipv6_addr_equal(&ipv6h->saddr, &tunnel->parms.raddr)) {
 +                      /* Packet didn't come from BR, so lookup FMR */
 +                      struct __ip6_tnl_fmr *fmr;
@@ -303,12 +303,12 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
 @@ -1304,6 +1444,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
  {
        struct ip6_tnl *t = netdev_priv(dev);
-       struct ipv6hdr *ipv6h = ipv6_hdr(skb);
+       struct ipv6hdr *ipv6h;
 +      struct __ip6_tnl_fmr *fmr;
        int encap_limit = -1;
        __u16 offset;
        struct flowi6 fl6;
-@@ -1366,6 +1507,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
+@@ -1370,6 +1511,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str
  
        fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);
  
@@ -327,7 +327,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        if (iptunnel_handle_offloads(skb, SKB_GSO_IPXIP6))
                return -1;
  
-@@ -1494,6 +1647,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
+@@ -1498,6 +1651,14 @@ ip6_tnl_change(struct ip6_tnl *t, const
        t->parms.link = p->link;
        t->parms.proto = p->proto;
        t->parms.fwmark = p->fwmark;
@@ -342,7 +342,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        dst_cache_reset(&t->dst_cache);
        ip6_tnl_link_config(t);
        return 0;
-@@ -1532,6 +1693,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
+@@ -1536,6 +1697,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_
        p->flowinfo = u->flowinfo;
        p->link = u->link;
        p->proto = u->proto;
@@ -350,7 +350,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        memcpy(p->name, u->name, sizeof(u->name));
  }
  
-@@ -1913,6 +2075,15 @@ static int ip6_tnl_validate(struct nlatt
+@@ -1922,6 +2084,15 @@ static int ip6_tnl_validate(struct nlatt
        return 0;
  }
  
@@ -366,7 +366,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
  static void ip6_tnl_netlink_parms(struct nlattr *data[],
                                  struct __ip6_tnl_parm *parms)
  {
-@@ -1950,6 +2121,46 @@ static void ip6_tnl_netlink_parms(struct
+@@ -1959,6 +2130,46 @@ static void ip6_tnl_netlink_parms(struct
  
        if (data[IFLA_IPTUN_FWMARK])
                parms->fwmark = nla_get_u32(data[IFLA_IPTUN_FWMARK]);
@@ -413,7 +413,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
  }
  
  static bool ip6_tnl_netlink_encap_parms(struct nlattr *data[],
-@@ -2061,6 +2272,12 @@ static void ip6_tnl_dellink(struct net_d
+@@ -2074,6 +2285,12 @@ static void ip6_tnl_dellink(struct net_d
  
  static size_t ip6_tnl_get_size(const struct net_device *dev)
  {
@@ -426,7 +426,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        return
                /* IFLA_IPTUN_LINK */
                nla_total_size(4) +
-@@ -2090,6 +2307,24 @@ static size_t ip6_tnl_get_size(const str
+@@ -2103,6 +2320,24 @@ static size_t ip6_tnl_get_size(const str
                nla_total_size(0) +
                /* IFLA_IPTUN_FWMARK */
                nla_total_size(4) +
@@ -451,7 +451,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
                0;
  }
  
-@@ -2097,6 +2332,9 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2110,6 +2345,9 @@ static int ip6_tnl_fill_info(struct sk_b
  {
        struct ip6_tnl *tunnel = netdev_priv(dev);
        struct __ip6_tnl_parm *parm = &tunnel->parms;
@@ -461,7 +461,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
  
        if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
            nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
-@@ -2106,9 +2344,27 @@ static int ip6_tnl_fill_info(struct sk_b
+@@ -2119,9 +2357,27 @@ static int ip6_tnl_fill_info(struct sk_b
            nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
            nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
            nla_put_u8(skb, IFLA_IPTUN_PROTO, parm->proto) ||
@@ -490,7 +490,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
        if (nla_put_u16(skb, IFLA_IPTUN_ENCAP_TYPE, tunnel->encap.type) ||
            nla_put_be16(skb, IFLA_IPTUN_ENCAP_SPORT, tunnel->encap.sport) ||
            nla_put_be16(skb, IFLA_IPTUN_ENCAP_DPORT, tunnel->encap.dport) ||
-@@ -2148,6 +2404,7 @@ static const struct nla_policy ip6_tnl_p
+@@ -2161,6 +2417,7 @@ static const struct nla_policy ip6_tnl_p
        [IFLA_IPTUN_ENCAP_DPORT]        = { .type = NLA_U16 },
        [IFLA_IPTUN_COLLECT_METADATA]   = { .type = NLA_FLAG },
        [IFLA_IPTUN_FWMARK]             = { .type = NLA_U32 },