From: Paul Wassi <p.wa...@gmx.at> Refresh patches for all targets that support kernel 4.4. compile/run-tested on kirkwood, ar71xx, brcm47xx.
Signed-off-by: Paul Wassi <p.wa...@gmx.at> --- This patch is meant to be applied upon 4.4.31! Apply https://patchwork.ozlabs.org/patch/694032/ first. include/kernel-version.mk | 4 - target/linux/apm821xx/patches-4.4/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch | 6 - target/linux/apm821xx/patches-4.4/802-usb-xhci-force-msi-renesas-xhci.patch | 2 target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch | 4 - target/linux/brcm2708/patches-4.4/0061-config-Enable-CONFIG_MEMCG-but-leave-it-disabled-due.patch | 4 - target/linux/brcm2708/patches-4.4/0220-net-sched-add-skb_at_tc_ingress-helper.patch | 23 ------ target/linux/generic/patches-4.4/630-packet_socket_type.patch | 16 ++-- target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch | 32 ++++---- target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch | 37 +++++----- target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch | 10 +- target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch | 12 +-- 11 files changed, 66 insertions(+), 84 deletions(-) diff --git a/include/kernel-version.mk b/include/kernel-version.mk --- a/include/kernel-version.mk +++ b/include/kernel-version.mk @@ -4,11 +4,11 @@ LINUX_RELEASE?=1 LINUX_VERSION-3.18 = .43 LINUX_VERSION-4.1 = .34 -LINUX_VERSION-4.4 = .31 +LINUX_VERSION-4.4 = .32 LINUX_KERNEL_MD5SUM-3.18.43 = b1faeb4a2e1e70ffe061bdbb3452840a LINUX_KERNEL_MD5SUM-4.1.34 = fba99f0f4765ebf01033e69518740a3c -LINUX_KERNEL_MD5SUM-4.4.31 = 29d9b0b1aa4dec3eb1a9edf1b84e79c5 +LINUX_KERNEL_MD5SUM-4.4.32 = ecda1c3a2f1103e91504ee4c90ed17ce508a585e5e8ecf9b4f000a86d7e7c30e ifdef KERNEL_PATCHVER LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) diff --git a/target/linux/apm821xx/patches-4.4/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch b/target/linux/apm821xx/patches-4.4/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch --- a/target/linux/apm821xx/patches-4.4/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch +++ b/target/linux/apm821xx/patches-4.4/801-usb-xhci-add-firmware-loader-for-uPD720201-and-uPD72.patch @@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunk...@googlemail.com> #include "xhci.h" #include "xhci-trace.h" -@@ -209,6 +211,458 @@ static void xhci_pme_acpi_rtd3_enable(st +@@ -211,6 +213,458 @@ static void xhci_pme_acpi_rtd3_enable(st static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { } #endif /* CONFIG_ACPI */ @@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunk...@googlemail.com> /* called during probe() after chip reset completes */ static int xhci_pci_setup(struct usb_hcd *hcd) { -@@ -248,6 +702,22 @@ static int xhci_pci_probe(struct pci_dev +@@ -250,6 +704,22 @@ static int xhci_pci_probe(struct pci_dev struct hc_driver *driver; struct usb_hcd *hcd; @@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunk...@googlemail.com> driver = (struct hc_driver *)id->driver_data; /* Prevent runtime suspending between USB-2 and USB-3 initialization */ -@@ -305,6 +775,16 @@ static void xhci_pci_remove(struct pci_d +@@ -307,6 +777,16 @@ static void xhci_pci_remove(struct pci_d { struct xhci_hcd *xhci; diff --git a/target/linux/apm821xx/patches-4.4/802-usb-xhci-force-msi-renesas-xhci.patch b/target/linux/apm821xx/patches-4.4/802-usb-xhci-force-msi-renesas-xhci.patch --- a/target/linux/apm821xx/patches-4.4/802-usb-xhci-force-msi-renesas-xhci.patch +++ b/target/linux/apm821xx/patches-4.4/802-usb-xhci-force-msi-renesas-xhci.patch @@ -13,7 +13,7 @@ produce a noisy warning. --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c -@@ -176,7 +176,7 @@ static void xhci_pci_quirks(struct devic +@@ -178,7 +178,7 @@ static void xhci_pci_quirks(struct devic } if (pdev->vendor == PCI_VENDOR_ID_RENESAS && pdev->device == 0x0015) diff --git a/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch b/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch --- a/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch +++ b/target/linux/ar71xx/patches-4.4/910-unaligned_access_hacks.patch @@ -310,7 +310,7 @@ if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c -@@ -1386,7 +1386,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str +@@ -1388,7 +1388,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str dsfield = ipv6_get_dsfield(ipv6h); if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS) @@ -838,7 +838,7 @@ --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c -@@ -3819,14 +3819,16 @@ static bool tcp_parse_aligned_timestamp( +@@ -3818,14 +3818,16 @@ static bool tcp_parse_aligned_timestamp( { const __be32 *ptr = (const __be32 *)(th + 1); diff --git a/target/linux/brcm2708/patches-4.4/0061-config-Enable-CONFIG_MEMCG-but-leave-it-disabled-due.patch b/target/linux/brcm2708/patches-4.4/0061-config-Enable-CONFIG_MEMCG-but-leave-it-disabled-due.patch --- a/target/linux/brcm2708/patches-4.4/0061-config-Enable-CONFIG_MEMCG-but-leave-it-disabled-due.patch +++ b/target/linux/brcm2708/patches-4.4/0061-config-Enable-CONFIG_MEMCG-but-leave-it-disabled-due.patch @@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -5307,7 +5307,7 @@ int __init cgroup_init_early(void) +@@ -5310,7 +5310,7 @@ int __init cgroup_init_early(void) return 0; } @@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to /** * cgroup_init - cgroup initialization -@@ -5803,6 +5803,27 @@ static int __init cgroup_disable(char *s +@@ -5806,6 +5806,27 @@ static int __init cgroup_disable(char *s } __setup("cgroup_disable=", cgroup_disable); diff --git a/target/linux/brcm2708/patches-4.4/0220-net-sched-add-skb_at_tc_ingress-helper.patch b/target/linux/brcm2708/patches-4.4/0220-net-sched-add-skb_at_tc_ingress-helper.patch --- a/target/linux/brcm2708/patches-4.4/0220-net-sched-add-skb_at_tc_ingress-helper.patch +++ b/target/linux/brcm2708/patches-4.4/0220-net-sched-add-skb_at_tc_ingress-helper.patch @@ -10,28 +10,9 @@ Signed-off-by: Daniel Borkmann <dan...@iogearbox.net> Acked-by: Alexei Starovoitov <a...@kernel.org> Signed-off-by: David S. Miller <da...@davemloft.net> --- - include/net/sch_generic.h | 9 +++++++++ - net/sched/cls_bpf.c | 6 +----- - 2 files changed, 10 insertions(+), 5 deletions(-) + net/shed/cls_bpf.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) ---- a/include/net/sch_generic.h -+++ b/include/net/sch_generic.h -@@ -409,6 +409,15 @@ bool tcf_destroy(struct tcf_proto *tp, b - void tcf_destroy_chain(struct tcf_proto __rcu **fl); - int skb_do_redirect(struct sk_buff *); - -+static inline bool skb_at_tc_ingress(const struct sk_buff *skb) -+{ -+#ifdef CONFIG_NET_CLS_ACT -+ return G_TC_AT(skb->tc_verd) & AT_INGRESS; -+#else -+ return false; -+#endif -+} -+ - /* Reset all TX qdiscs greater then index of a device. */ - static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i) - { --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c @@ -79,12 +79,8 @@ static int cls_bpf_classify(struct sk_bu diff --git a/target/linux/generic/patches-4.4/630-packet_socket_type.patch b/target/linux/generic/patches-4.4/630-packet_socket_type.patch --- a/target/linux/generic/patches-4.4/630-packet_socket_type.patch +++ b/target/linux/generic/patches-4.4/630-packet_socket_type.patch @@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> #define PACKET_FANOUT_LB 1 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c -@@ -1764,6 +1764,7 @@ static int packet_rcv_spkt(struct sk_buf +@@ -1763,6 +1763,7 @@ static int packet_rcv_spkt(struct sk_buf { struct sock *sk; struct sockaddr_pkt *spkt; @@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> /* * When we registered the protocol we saved the socket in the data -@@ -1771,6 +1772,7 @@ static int packet_rcv_spkt(struct sk_buf +@@ -1770,6 +1771,7 @@ static int packet_rcv_spkt(struct sk_buf */ sk = pt->af_packet_priv; @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> /* * Yank back the headers [hope the device set this -@@ -1783,7 +1785,7 @@ static int packet_rcv_spkt(struct sk_buf +@@ -1782,7 +1784,7 @@ static int packet_rcv_spkt(struct sk_buf * so that this procedure is noop. */ @@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> goto out; if (!net_eq(dev_net(dev), sock_net(sk))) -@@ -1986,12 +1988,12 @@ static int packet_rcv(struct sk_buff *sk +@@ -1985,12 +1987,12 @@ static int packet_rcv(struct sk_buff *sk int skb_len = skb->len; unsigned int snaplen, res; @@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> if (!net_eq(dev_net(dev), sock_net(sk))) goto drop; -@@ -2111,12 +2113,12 @@ static int tpacket_rcv(struct sk_buff *s +@@ -2110,12 +2112,12 @@ static int tpacket_rcv(struct sk_buff *s BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32); BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48); @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> if (!net_eq(dev_net(dev), sock_net(sk))) goto drop; -@@ -3092,6 +3094,7 @@ static int packet_create(struct net *net +@@ -3091,6 +3093,7 @@ static int packet_create(struct net *net mutex_init(&po->pg_vec_lock); po->rollover = NULL; po->prot_hook.func = packet_rcv; @@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> if (sock->type == SOCK_PACKET) po->prot_hook.func = packet_rcv_spkt; -@@ -3708,6 +3711,16 @@ packet_setsockopt(struct socket *sock, i +@@ -3707,6 +3710,16 @@ packet_setsockopt(struct socket *sock, i po->xmit = val ? packet_direct_xmit : dev_queue_xmit; return 0; } @@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> default: return -ENOPROTOOPT; } -@@ -3760,6 +3773,13 @@ static int packet_getsockopt(struct sock +@@ -3759,6 +3772,13 @@ static int packet_getsockopt(struct sock case PACKET_VNET_HDR: val = po->has_vnet_hdr; break; diff --git a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch --- a/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch +++ b/target/linux/generic/patches-4.4/645-bridge_multicast_to_unicast.patch @@ -127,7 +127,7 @@ Implement optinal multicast->unicast conversion for igmp snooping } #endif -@@ -998,6 +1021,7 @@ static int br_ip4_multicast_igmp3_report +@@ -1003,6 +1026,7 @@ static int br_ip4_multicast_igmp3_report struct sk_buff *skb, u16 vid) { @@ -135,7 +135,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct igmpv3_report *ih; struct igmpv3_grec *grec; int i; -@@ -1038,12 +1062,13 @@ static int br_ip4_multicast_igmp3_report +@@ -1043,12 +1067,13 @@ static int br_ip4_multicast_igmp3_report continue; } @@ -151,7 +151,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (err) break; } -@@ -1058,6 +1083,7 @@ static int br_ip6_multicast_mld2_report( +@@ -1063,6 +1088,7 @@ static int br_ip6_multicast_mld2_report( struct sk_buff *skb, u16 vid) { @@ -159,7 +159,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct icmp6hdr *icmp6h; struct mld2_grec *grec; int i; -@@ -1109,10 +1135,10 @@ static int br_ip6_multicast_mld2_report( +@@ -1114,10 +1140,10 @@ static int br_ip6_multicast_mld2_report( grec->grec_type == MLD2_MODE_IS_INCLUDE) && ntohs(*nsrcs) == 0) { br_ip6_multicast_leave_group(br, port, &grec->grec_mca, @@ -172,7 +172,7 @@ Implement optinal multicast->unicast conversion for igmp snooping if (err) break; } -@@ -1427,7 +1453,8 @@ br_multicast_leave_group(struct net_brid +@@ -1432,7 +1458,8 @@ br_multicast_leave_group(struct net_brid struct net_bridge_port *port, struct br_ip *group, struct bridge_mcast_other_query *other_query, @@ -182,7 +182,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct net_bridge_mdb_htable *mdb; struct net_bridge_mdb_entry *mp; -@@ -1451,7 +1478,7 @@ br_multicast_leave_group(struct net_brid +@@ -1456,7 +1483,7 @@ br_multicast_leave_group(struct net_brid for (pp = &mp->ports; (p = mlock_dereference(*pp, br)) != NULL; pp = &p->next) { @@ -191,7 +191,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; rcu_assign_pointer(*pp, p->next); -@@ -1514,7 +1541,7 @@ br_multicast_leave_group(struct net_brid +@@ -1519,7 +1546,7 @@ br_multicast_leave_group(struct net_brid for (p = mlock_dereference(mp->ports, br); p != NULL; p = mlock_dereference(p->next, br)) { @@ -200,7 +200,7 @@ Implement optinal multicast->unicast conversion for igmp snooping continue; if (!hlist_unhashed(&p->mglist) && -@@ -1532,8 +1559,8 @@ out: +@@ -1537,8 +1564,8 @@ out: static void br_ip4_multicast_leave_group(struct net_bridge *br, struct net_bridge_port *port, @@ -211,7 +211,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1548,14 +1575,14 @@ static void br_ip4_multicast_leave_group +@@ -1553,14 +1580,14 @@ static void br_ip4_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query, @@ -228,7 +228,7 @@ Implement optinal multicast->unicast conversion for igmp snooping { struct br_ip br_group; struct bridge_mcast_own_query *own_query; -@@ -1570,7 +1597,7 @@ static void br_ip6_multicast_leave_group +@@ -1575,7 +1602,7 @@ static void br_ip6_multicast_leave_group br_group.vid = vid; br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query, @@ -237,7 +237,7 @@ Implement optinal multicast->unicast conversion for igmp snooping } #endif -@@ -1579,6 +1606,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1584,6 +1611,7 @@ static int br_multicast_ipv4_rcv(struct struct sk_buff *skb, u16 vid) { @@ -245,7 +245,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct igmphdr *ih; int err; -@@ -1595,12 +1623,13 @@ static int br_multicast_ipv4_rcv(struct +@@ -1600,12 +1628,13 @@ static int br_multicast_ipv4_rcv(struct BR_INPUT_SKB_CB(skb)->igmp = 1; ih = igmp_hdr(skb); @@ -260,7 +260,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case IGMPV3_HOST_MEMBERSHIP_REPORT: err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid); -@@ -1609,7 +1638,7 @@ static int br_multicast_ipv4_rcv(struct +@@ -1614,7 +1643,7 @@ static int br_multicast_ipv4_rcv(struct err = br_ip4_multicast_query(br, port, skb_trimmed, vid); break; case IGMP_HOST_LEAVE_MESSAGE: @@ -269,7 +269,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; } -@@ -1625,6 +1654,7 @@ static int br_multicast_ipv6_rcv(struct +@@ -1630,6 +1659,7 @@ static int br_multicast_ipv6_rcv(struct struct sk_buff *skb, u16 vid) { @@ -277,7 +277,7 @@ Implement optinal multicast->unicast conversion for igmp snooping struct sk_buff *skb_trimmed = NULL; struct mld_msg *mld; int err; -@@ -1644,8 +1674,9 @@ static int br_multicast_ipv6_rcv(struct +@@ -1649,8 +1679,9 @@ static int br_multicast_ipv6_rcv(struct switch (mld->mld_type) { case ICMPV6_MGM_REPORT: @@ -288,7 +288,7 @@ Implement optinal multicast->unicast conversion for igmp snooping break; case ICMPV6_MLD2_REPORT: err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid); -@@ -1654,7 +1685,8 @@ static int br_multicast_ipv6_rcv(struct +@@ -1659,7 +1690,8 @@ static int br_multicast_ipv6_rcv(struct err = br_ip6_multicast_query(br, port, skb_trimmed, vid); break; case ICMPV6_MGM_REDUCTION: diff --git a/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch b/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch --- a/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch +++ b/target/linux/generic/patches-4.4/666-Add-support-for-MAP-E-FMRs-mesh-mode.patch @@ -94,7 +94,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> } static int ip6_tnl_dev_init(struct net_device *dev); -@@ -230,27 +230,36 @@ EXPORT_SYMBOL_GPL(ip6_tnl_dst_init); +@@ -230,20 +230,29 @@ EXPORT_SYMBOL_GPL(ip6_tnl_dst_init); static struct ip6_tnl * ip6_tnl_lookup(struct net *net, const struct in6_addr *remote, const struct in6_addr *local) { @@ -128,7 +128,8 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> + hash = HASH(local); for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) { if (ipv6_addr_equal(local, &t->parms.laddr) && - (t->dev->flags & IFF_UP)) + ipv6_addr_any(&t->parms.raddr) && +@@ -251,7 +260,7 @@ ip6_tnl_lookup(struct net *net, const st return t; } @@ -136,8 +137,8 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> + hash = HASH(&any); for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) { if (ipv6_addr_equal(remote, &t->parms.raddr) && - (t->dev->flags & IFF_UP)) -@@ -285,7 +294,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n, + ipv6_addr_any(&t->parms.laddr) && +@@ -287,7 +296,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n, if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) { prio = 1; @@ -146,7 +147,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> } return &ip6n->tnls[prio][h]; } -@@ -458,6 +467,12 @@ ip6_tnl_dev_uninit(struct net_device *de +@@ -460,6 +469,12 @@ ip6_tnl_dev_uninit(struct net_device *de struct net *net = t->net; struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id); @@ -159,7 +160,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> if (dev == ip6n->fb_tnl_dev) RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL); else -@@ -844,6 +859,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t, +@@ -846,6 +861,108 @@ int ip6_tnl_rcv_ctl(struct ip6_tnl *t, } EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl); @@ -268,7 +269,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> /** * ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally * @skb: received socket buffer -@@ -889,6 +1006,26 @@ static int ip6_tnl_rcv(struct sk_buff *s +@@ -891,6 +1008,26 @@ static int ip6_tnl_rcv(struct sk_buff *s skb_reset_network_header(skb); skb->protocol = htons(protocol); memset(skb->cb, 0, sizeof(struct inet6_skb_parm)); @@ -295,7 +296,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> __skb_tunnel_rx(skb, t->dev, t->net); -@@ -1224,6 +1361,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str +@@ -1226,6 +1363,7 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str __u32 mtu; u8 tproto; int err; @@ -303,7 +304,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> tproto = ACCESS_ONCE(t->parms.proto); if ((tproto != IPPROTO_IPV6 && tproto != 0) || -@@ -1254,6 +1392,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str +@@ -1256,6 +1394,18 @@ ip6ip6_tnl_xmit(struct sk_buff *skb, str if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK) fl6.flowi6_mark = skb->mark; @@ -322,7 +323,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu); if (err != 0) { if (err == -EMSGSIZE) -@@ -1368,6 +1518,14 @@ ip6_tnl_change(struct ip6_tnl *t, const +@@ -1370,6 +1520,14 @@ ip6_tnl_change(struct ip6_tnl *t, const t->parms.flowinfo = p->flowinfo; t->parms.link = p->link; t->parms.proto = p->proto; @@ -337,7 +338,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> ip6_tnl_dst_reset(t); ip6_tnl_link_config(t); return 0; -@@ -1406,6 +1564,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ +@@ -1408,6 +1566,7 @@ ip6_tnl_parm_from_user(struct __ip6_tnl_ p->flowinfo = u->flowinfo; p->link = u->link; p->proto = u->proto; @@ -345,7 +346,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> memcpy(p->name, u->name, sizeof(u->name)); } -@@ -1701,6 +1860,15 @@ static int ip6_tnl_validate(struct nlatt +@@ -1703,6 +1862,15 @@ static int ip6_tnl_validate(struct nlatt return 0; } @@ -361,7 +362,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> static void ip6_tnl_netlink_parms(struct nlattr *data[], struct __ip6_tnl_parm *parms) { -@@ -1732,6 +1900,46 @@ static void ip6_tnl_netlink_parms(struct +@@ -1734,6 +1902,46 @@ static void ip6_tnl_netlink_parms(struct if (data[IFLA_IPTUN_PROTO]) parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]); @@ -408,7 +409,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> } static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev, -@@ -1784,6 +1992,12 @@ static void ip6_tnl_dellink(struct net_d +@@ -1786,6 +1994,12 @@ static void ip6_tnl_dellink(struct net_d static size_t ip6_tnl_get_size(const struct net_device *dev) { @@ -421,7 +422,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> return /* IFLA_IPTUN_LINK */ nla_total_size(4) + -@@ -1801,6 +2015,24 @@ static size_t ip6_tnl_get_size(const str +@@ -1803,6 +2017,24 @@ static size_t ip6_tnl_get_size(const str nla_total_size(4) + /* IFLA_IPTUN_PROTO */ nla_total_size(1) + @@ -446,7 +447,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> 0; } -@@ -1808,6 +2040,9 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -1810,6 +2042,9 @@ static int ip6_tnl_fill_info(struct sk_b { struct ip6_tnl *tunnel = netdev_priv(dev); struct __ip6_tnl_parm *parm = &tunnel->parms; @@ -456,7 +457,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) || nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) || -@@ -1816,8 +2051,27 @@ static int ip6_tnl_fill_info(struct sk_b +@@ -1818,8 +2053,27 @@ static int ip6_tnl_fill_info(struct sk_b nla_put_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) || nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) || nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) || @@ -485,7 +486,7 @@ Signed-off-by: Steven Barth <cy...@openwrt.org> return 0; nla_put_failure: -@@ -1841,6 +2095,7 @@ static const struct nla_policy ip6_tnl_p +@@ -1843,6 +2097,7 @@ static const struct nla_policy ip6_tnl_p [IFLA_IPTUN_FLOWINFO] = { .type = NLA_U32 }, [IFLA_IPTUN_FLAGS] = { .type = NLA_U32 }, [IFLA_IPTUN_PROTO] = { .type = NLA_U8 }, diff --git a/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch b/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch --- a/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch +++ b/target/linux/generic/patches-4.4/670-ipv6-allow-rejecting-with-source-address-failed-policy.patch @@ -193,7 +193,7 @@ Signed-off-by: Jonas Gorski <j...@openwrt.org> case -EAGAIN: rtm->rtm_type = RTN_THROW; break; -@@ -3360,6 +3397,8 @@ static int ip6_route_dev_notify(struct n +@@ -3362,6 +3399,8 @@ static int ip6_route_dev_notify(struct n #ifdef CONFIG_IPV6_MULTIPLE_TABLES net->ipv6.ip6_prohibit_entry->dst.dev = dev; net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); @@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <j...@openwrt.org> net->ipv6.ip6_blk_hole_entry->dst.dev = dev; net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); #endif -@@ -3576,6 +3615,17 @@ static int __net_init ip6_route_net_init +@@ -3578,6 +3617,17 @@ static int __net_init ip6_route_net_init net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops; dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst, ip6_template_metrics, true); @@ -220,7 +220,7 @@ Signed-off-by: Jonas Gorski <j...@openwrt.org> #endif net->ipv6.sysctl.flush_delay = 0; -@@ -3594,6 +3644,8 @@ out: +@@ -3596,6 +3646,8 @@ out: return ret; #ifdef CONFIG_IPV6_MULTIPLE_TABLES @@ -229,7 +229,7 @@ Signed-off-by: Jonas Gorski <j...@openwrt.org> out_ip6_prohibit_entry: kfree(net->ipv6.ip6_prohibit_entry); out_ip6_null_entry: -@@ -3611,6 +3663,7 @@ static void __net_exit ip6_route_net_exi +@@ -3613,6 +3665,7 @@ static void __net_exit ip6_route_net_exi #ifdef CONFIG_IPV6_MULTIPLE_TABLES kfree(net->ipv6.ip6_prohibit_entry); kfree(net->ipv6.ip6_blk_hole_entry); @@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <j...@openwrt.org> #endif dst_entries_destroy(&net->ipv6.ip6_dst_ops); } -@@ -3708,6 +3761,9 @@ int __init ip6_route_init(void) +@@ -3710,6 +3763,9 @@ int __init ip6_route_init(void) init_net.ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); init_net.ipv6.ip6_blk_hole_entry->dst.dev = init_net.loopback_dev; init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev); diff --git a/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch b/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch --- a/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch +++ b/target/linux/generic/patches-4.4/680-NET-skip-GRO-for-foreign-MAC-addresses.patch @@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4221,6 +4221,9 @@ static enum gro_result dev_gro_receive(s +@@ -4222,6 +4222,9 @@ static enum gro_result dev_gro_receive(s enum gro_result ret; int grow; @@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> if (!(skb->dev->features & NETIF_F_GRO)) goto normal; -@@ -5373,6 +5376,48 @@ static void __netdev_adjacent_dev_unlink +@@ -5381,6 +5384,48 @@ static void __netdev_adjacent_dev_unlink &upper_dev->adj_list.lower); } @@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> static int __netdev_upper_dev_link(struct net_device *dev, struct net_device *upper_dev, bool master, void *private) -@@ -5444,6 +5489,7 @@ static int __netdev_upper_dev_link(struc +@@ -5452,6 +5497,7 @@ static int __netdev_upper_dev_link(struc goto rollback_lower_mesh; } @@ -84,15 +84,15 @@ Signed-off-by: Felix Fietkau <n...@nbd.name> call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); return 0; -@@ -5570,6 +5616,7 @@ void netdev_upper_dev_unlink(struct net_ +@@ -5578,6 +5624,7 @@ void netdev_upper_dev_unlink(struct net_ list_for_each_entry(i, &upper_dev->all_adj_list.upper, list) - __netdev_adjacent_dev_unlink(dev, i->dev); + __netdev_adjacent_dev_unlink(dev, i->dev, i->ref_nr); + netdev_update_addr_mask(dev); call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev, &changeupper_info.info); } -@@ -6110,6 +6157,7 @@ int dev_set_mac_address(struct net_devic +@@ -6118,6 +6165,7 @@ int dev_set_mac_address(struct net_devic if (err) return err; dev->addr_assign_type = NET_ADDR_SET; _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev