kernel: update kernel 4.4 to version 4.4.32
Refresh patches for all targets that support kernel 4.4. Compile-tested on all targets that use kernel 4.4 and aren't marked broken. Runtime-tested on ar71xx, octeon. Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
This commit is contained in:
parent
c437a67152
commit
8e47655d4e
13 changed files with 70 additions and 84 deletions
|
@ -4,11 +4,11 @@ LINUX_RELEASE?=1
|
||||||
|
|
||||||
LINUX_VERSION-3.18 = .43
|
LINUX_VERSION-3.18 = .43
|
||||||
LINUX_VERSION-4.1 = .34
|
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-3.18.43 = b1faeb4a2e1e70ffe061bdbb3452840a
|
||||||
LINUX_KERNEL_MD5SUM-4.1.34 = fba99f0f4765ebf01033e69518740a3c
|
LINUX_KERNEL_MD5SUM-4.1.34 = fba99f0f4765ebf01033e69518740a3c
|
||||||
LINUX_KERNEL_MD5SUM-4.4.31 = 29d9b0b1aa4dec3eb1a9edf1b84e79c5
|
LINUX_KERNEL_MD5SUM-4.4.32 = 63e50dd0c477fe9ea450a358fe39485b
|
||||||
|
|
||||||
ifdef KERNEL_PATCHVER
|
ifdef KERNEL_PATCHVER
|
||||||
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))
|
||||||
|
|
|
@ -44,7 +44,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
|
|
||||||
#include "xhci.h"
|
#include "xhci.h"
|
||||||
#include "xhci-trace.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) { }
|
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||||
#endif /* CONFIG_ACPI */
|
#endif /* CONFIG_ACPI */
|
||||||
|
|
||||||
|
@ -503,7 +503,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
/* called during probe() after chip reset completes */
|
/* called during probe() after chip reset completes */
|
||||||
static int xhci_pci_setup(struct usb_hcd *hcd)
|
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 hc_driver *driver;
|
||||||
struct usb_hcd *hcd;
|
struct usb_hcd *hcd;
|
||||||
|
|
||||||
|
@ -526,7 +526,7 @@ Signed-off-by: Christian Lamparter <chunkeey@googlemail.com>
|
||||||
driver = (struct hc_driver *)id->driver_data;
|
driver = (struct hc_driver *)id->driver_data;
|
||||||
|
|
||||||
/* Prevent runtime suspending between USB-2 and USB-3 initialization */
|
/* 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;
|
struct xhci_hcd *xhci;
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ produce a noisy warning.
|
||||||
|
|
||||||
--- a/drivers/usb/host/xhci-pci.c
|
--- a/drivers/usb/host/xhci-pci.c
|
||||||
+++ b/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 &&
|
if (pdev->vendor == PCI_VENDOR_ID_RENESAS &&
|
||||||
pdev->device == 0x0015)
|
pdev->device == 0x0015)
|
||||||
|
|
|
@ -38,7 +38,11 @@
|
||||||
static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)
|
static int __dwc2_lowlevel_hw_enable(struct dwc2_hsotg *hsotg)
|
||||||
{
|
{
|
||||||
struct platform_device *pdev = to_platform_device(hsotg->dev);
|
struct platform_device *pdev = to_platform_device(hsotg->dev);
|
||||||
@@ -309,2 +340,3 @@ static int dwc2_driver_remove(struct pla
|
@@ -307,6 +338,7 @@ static int dwc2_driver_remove(struct pla
|
||||||
|
}
|
||||||
|
|
||||||
static const struct of_device_id dwc2_of_match_table[] = {
|
static const struct of_device_id dwc2_of_match_table[] = {
|
||||||
+ { .compatible = "amcc,usb-otg-405ex", .data = ¶ms_amcc_dwc_otg },
|
+ { .compatible = "amcc,usb-otg-405ex", .data = ¶ms_amcc_dwc_otg },
|
||||||
{ .compatible = "brcm,bcm2835-usb", .data = ¶ms_bcm2835 },
|
{ .compatible = "brcm,bcm2835-usb", .data = ¶ms_bcm2835 },
|
||||||
|
{ .compatible = "rockchip,rk3066-usb", .data = ¶ms_rk3066 },
|
||||||
|
{ .compatible = "snps,dwc2", .data = NULL },
|
||||||
|
|
|
@ -310,7 +310,7 @@
|
||||||
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
|
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
|
||||||
--- a/net/ipv6/ip6_tunnel.c
|
--- a/net/ipv6/ip6_tunnel.c
|
||||||
+++ b/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);
|
dsfield = ipv6_get_dsfield(ipv6h);
|
||||||
if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
|
if (t->parms.flags & IP6_TNL_F_USE_ORIG_TCLASS)
|
||||||
|
@ -838,7 +838,7 @@
|
||||||
|
|
||||||
--- a/net/ipv4/tcp_input.c
|
--- a/net/ipv4/tcp_input.c
|
||||||
+++ b/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);
|
const __be32 *ptr = (const __be32 *)(th + 1);
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||||
|
|
||||||
--- a/kernel/cgroup.c
|
--- a/kernel/cgroup.c
|
||||||
+++ b/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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Subject: [PATCH] config: Enable CONFIG_MEMCG, but leave it disabled (due to
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cgroup_init - cgroup initialization
|
* 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);
|
__setup("cgroup_disable=", cgroup_disable);
|
||||||
|
|
||||||
|
|
|
@ -10,28 +10,9 @@ Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
|
||||||
Acked-by: Alexei Starovoitov <ast@kernel.org>
|
Acked-by: Alexei Starovoitov <ast@kernel.org>
|
||||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||||
---
|
---
|
||||||
include/net/sch_generic.h | 9 +++++++++
|
|
||||||
net/sched/cls_bpf.c | 6 +-----
|
net/sched/cls_bpf.c | 6 +-----
|
||||||
2 files changed, 10 insertions(+), 5 deletions(-)
|
2 files changed, 10 insertions(+), 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
|
--- a/net/sched/cls_bpf.c
|
||||||
+++ b/net/sched/cls_bpf.c
|
+++ b/net/sched/cls_bpf.c
|
||||||
@@ -79,12 +79,8 @@ static int cls_bpf_classify(struct sk_bu
|
@@ -79,12 +79,8 @@ static int cls_bpf_classify(struct sk_bu
|
||||||
|
|
|
@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
#define PACKET_FANOUT_LB 1
|
#define PACKET_FANOUT_LB 1
|
||||||
--- a/net/packet/af_packet.c
|
--- a/net/packet/af_packet.c
|
||||||
+++ b/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 sock *sk;
|
||||||
struct sockaddr_pkt *spkt;
|
struct sockaddr_pkt *spkt;
|
||||||
|
@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When we registered the protocol we saved the socket in the data
|
* 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;
|
sk = pt->af_packet_priv;
|
||||||
|
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Yank back the headers [hope the device set this
|
* 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.
|
* so that this procedure is noop.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
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;
|
int skb_len = skb->len;
|
||||||
unsigned int snaplen, res;
|
unsigned int snaplen, res;
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
goto drop;
|
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.h2)) != 32);
|
||||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
goto drop;
|
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);
|
mutex_init(&po->pg_vec_lock);
|
||||||
po->rollover = NULL;
|
po->rollover = NULL;
|
||||||
po->prot_hook.func = packet_rcv;
|
po->prot_hook.func = packet_rcv;
|
||||||
|
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (sock->type == SOCK_PACKET)
|
if (sock->type == SOCK_PACKET)
|
||||||
po->prot_hook.func = packet_rcv_spkt;
|
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;
|
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
default:
|
default:
|
||||||
return -ENOPROTOOPT;
|
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:
|
case PACKET_VNET_HDR:
|
||||||
val = po->has_vnet_hdr;
|
val = po->has_vnet_hdr;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -127,7 +127,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
}
|
}
|
||||||
#endif
|
#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,
|
struct sk_buff *skb,
|
||||||
u16 vid)
|
u16 vid)
|
||||||
{
|
{
|
||||||
|
@ -135,7 +135,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
struct igmpv3_report *ih;
|
struct igmpv3_report *ih;
|
||||||
struct igmpv3_grec *grec;
|
struct igmpv3_grec *grec;
|
||||||
int i;
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,7 +151,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
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,
|
struct sk_buff *skb,
|
||||||
u16 vid)
|
u16 vid)
|
||||||
{
|
{
|
||||||
|
@ -159,7 +159,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
struct icmp6hdr *icmp6h;
|
struct icmp6hdr *icmp6h;
|
||||||
struct mld2_grec *grec;
|
struct mld2_grec *grec;
|
||||||
int i;
|
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) &&
|
grec->grec_type == MLD2_MODE_IS_INCLUDE) &&
|
||||||
ntohs(*nsrcs) == 0) {
|
ntohs(*nsrcs) == 0) {
|
||||||
br_ip6_multicast_leave_group(br, port, &grec->grec_mca,
|
br_ip6_multicast_leave_group(br, port, &grec->grec_mca,
|
||||||
|
@ -172,7 +172,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
if (err)
|
if (err)
|
||||||
break;
|
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 net_bridge_port *port,
|
||||||
struct br_ip *group,
|
struct br_ip *group,
|
||||||
struct bridge_mcast_other_query *other_query,
|
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_htable *mdb;
|
||||||
struct net_bridge_mdb_entry *mp;
|
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;
|
for (pp = &mp->ports;
|
||||||
(p = mlock_dereference(*pp, br)) != NULL;
|
(p = mlock_dereference(*pp, br)) != NULL;
|
||||||
pp = &p->next) {
|
pp = &p->next) {
|
||||||
|
@ -191,7 +191,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
rcu_assign_pointer(*pp, p->next);
|
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);
|
for (p = mlock_dereference(mp->ports, br);
|
||||||
p != NULL;
|
p != NULL;
|
||||||
p = mlock_dereference(p->next, br)) {
|
p = mlock_dereference(p->next, br)) {
|
||||||
|
@ -200,7 +200,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!hlist_unhashed(&p->mglist) &&
|
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,
|
static void br_ip4_multicast_leave_group(struct net_bridge *br,
|
||||||
struct net_bridge_port *port,
|
struct net_bridge_port *port,
|
||||||
|
@ -211,7 +211,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
{
|
{
|
||||||
struct br_ip br_group;
|
struct br_ip br_group;
|
||||||
struct bridge_mcast_own_query *own_query;
|
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_group.vid = vid;
|
||||||
|
|
||||||
br_multicast_leave_group(br, port, &br_group, &br->ip4_other_query,
|
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 br_ip br_group;
|
||||||
struct bridge_mcast_own_query *own_query;
|
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_group.vid = vid;
|
||||||
|
|
||||||
br_multicast_leave_group(br, port, &br_group, &br->ip6_other_query,
|
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
|
#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,
|
struct sk_buff *skb,
|
||||||
u16 vid)
|
u16 vid)
|
||||||
{
|
{
|
||||||
|
@ -245,7 +245,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
struct sk_buff *skb_trimmed = NULL;
|
struct sk_buff *skb_trimmed = NULL;
|
||||||
struct igmphdr *ih;
|
struct igmphdr *ih;
|
||||||
int err;
|
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;
|
BR_INPUT_SKB_CB(skb)->igmp = 1;
|
||||||
ih = igmp_hdr(skb);
|
ih = igmp_hdr(skb);
|
||||||
|
@ -260,7 +260,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
break;
|
break;
|
||||||
case IGMPV3_HOST_MEMBERSHIP_REPORT:
|
case IGMPV3_HOST_MEMBERSHIP_REPORT:
|
||||||
err = br_ip4_multicast_igmp3_report(br, port, skb_trimmed, vid);
|
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);
|
err = br_ip4_multicast_query(br, port, skb_trimmed, vid);
|
||||||
break;
|
break;
|
||||||
case IGMP_HOST_LEAVE_MESSAGE:
|
case IGMP_HOST_LEAVE_MESSAGE:
|
||||||
|
@ -269,7 +269,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
break;
|
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,
|
struct sk_buff *skb,
|
||||||
u16 vid)
|
u16 vid)
|
||||||
{
|
{
|
||||||
|
@ -277,7 +277,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
struct sk_buff *skb_trimmed = NULL;
|
struct sk_buff *skb_trimmed = NULL;
|
||||||
struct mld_msg *mld;
|
struct mld_msg *mld;
|
||||||
int err;
|
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) {
|
switch (mld->mld_type) {
|
||||||
case ICMPV6_MGM_REPORT:
|
case ICMPV6_MGM_REPORT:
|
||||||
|
@ -288,7 +288,7 @@ Implement optinal multicast->unicast conversion for igmp snooping
|
||||||
break;
|
break;
|
||||||
case ICMPV6_MLD2_REPORT:
|
case ICMPV6_MLD2_REPORT:
|
||||||
err = br_ip6_multicast_mld2_report(br, port, skb_trimmed, vid);
|
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);
|
err = br_ip6_multicast_query(br, port, skb_trimmed, vid);
|
||||||
break;
|
break;
|
||||||
case ICMPV6_MGM_REDUCTION:
|
case ICMPV6_MGM_REDUCTION:
|
||||||
|
|
|
@ -94,7 +94,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip6_tnl_dev_init(struct net_device *dev);
|
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 *
|
static struct ip6_tnl *
|
||||||
ip6_tnl_lookup(struct net *net, const struct in6_addr *remote, const struct in6_addr *local)
|
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 <cyrus@openwrt.org>
|
||||||
+ hash = HASH(local);
|
+ hash = HASH(local);
|
||||||
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
|
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
|
||||||
if (ipv6_addr_equal(local, &t->parms.laddr) &&
|
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;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,8 +137,8 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
+ hash = HASH(&any);
|
+ hash = HASH(&any);
|
||||||
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
|
for_each_ip6_tunnel_rcu(ip6n->tnls_r_l[hash]) {
|
||||||
if (ipv6_addr_equal(remote, &t->parms.raddr) &&
|
if (ipv6_addr_equal(remote, &t->parms.raddr) &&
|
||||||
(t->dev->flags & IFF_UP))
|
ipv6_addr_any(&t->parms.laddr) &&
|
||||||
@@ -285,7 +294,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
|
@@ -287,7 +296,7 @@ ip6_tnl_bucket(struct ip6_tnl_net *ip6n,
|
||||||
|
|
||||||
if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) {
|
if (!ipv6_addr_any(remote) || !ipv6_addr_any(local)) {
|
||||||
prio = 1;
|
prio = 1;
|
||||||
|
@ -146,7 +147,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
}
|
}
|
||||||
return &ip6n->tnls[prio][h];
|
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 net *net = t->net;
|
||||||
struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
|
struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);
|
||||||
|
|
||||||
|
@ -159,7 +160,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
if (dev == ip6n->fb_tnl_dev)
|
if (dev == ip6n->fb_tnl_dev)
|
||||||
RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
|
RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL);
|
||||||
else
|
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);
|
EXPORT_SYMBOL_GPL(ip6_tnl_rcv_ctl);
|
||||||
|
|
||||||
|
@ -268,7 +269,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
/**
|
/**
|
||||||
* ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
|
* ip6_tnl_rcv - decapsulate IPv6 packet and retransmit it locally
|
||||||
* @skb: received socket buffer
|
* @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_reset_network_header(skb);
|
||||||
skb->protocol = htons(protocol);
|
skb->protocol = htons(protocol);
|
||||||
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
|
memset(skb->cb, 0, sizeof(struct inet6_skb_parm));
|
||||||
|
@ -295,7 +296,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
|
|
||||||
__skb_tunnel_rx(skb, t->dev, t->net);
|
__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;
|
__u32 mtu;
|
||||||
u8 tproto;
|
u8 tproto;
|
||||||
int err;
|
int err;
|
||||||
|
@ -303,7 +304,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
|
|
||||||
tproto = ACCESS_ONCE(t->parms.proto);
|
tproto = ACCESS_ONCE(t->parms.proto);
|
||||||
if ((tproto != IPPROTO_IPV6 && tproto != 0) ||
|
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)
|
if (t->parms.flags & IP6_TNL_F_USE_ORIG_FWMARK)
|
||||||
fl6.flowi6_mark = skb->mark;
|
fl6.flowi6_mark = skb->mark;
|
||||||
|
|
||||||
|
@ -322,7 +323,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
|
err = ip6_tnl_xmit2(skb, dev, dsfield, &fl6, encap_limit, &mtu);
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
if (err == -EMSGSIZE)
|
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.flowinfo = p->flowinfo;
|
||||||
t->parms.link = p->link;
|
t->parms.link = p->link;
|
||||||
t->parms.proto = p->proto;
|
t->parms.proto = p->proto;
|
||||||
|
@ -337,7 +338,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
ip6_tnl_dst_reset(t);
|
ip6_tnl_dst_reset(t);
|
||||||
ip6_tnl_link_config(t);
|
ip6_tnl_link_config(t);
|
||||||
return 0;
|
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->flowinfo = u->flowinfo;
|
||||||
p->link = u->link;
|
p->link = u->link;
|
||||||
p->proto = u->proto;
|
p->proto = u->proto;
|
||||||
|
@ -345,7 +346,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
memcpy(p->name, u->name, sizeof(u->name));
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -361,7 +362,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
static void ip6_tnl_netlink_parms(struct nlattr *data[],
|
static void ip6_tnl_netlink_parms(struct nlattr *data[],
|
||||||
struct __ip6_tnl_parm *parms)
|
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])
|
if (data[IFLA_IPTUN_PROTO])
|
||||||
parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
|
parms->proto = nla_get_u8(data[IFLA_IPTUN_PROTO]);
|
||||||
|
@ -408,7 +409,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ip6_tnl_newlink(struct net *src_net, struct net_device *dev,
|
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)
|
static size_t ip6_tnl_get_size(const struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
@ -421,7 +422,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
return
|
return
|
||||||
/* IFLA_IPTUN_LINK */
|
/* IFLA_IPTUN_LINK */
|
||||||
nla_total_size(4) +
|
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) +
|
nla_total_size(4) +
|
||||||
/* IFLA_IPTUN_PROTO */
|
/* IFLA_IPTUN_PROTO */
|
||||||
nla_total_size(1) +
|
nla_total_size(1) +
|
||||||
|
@ -446,7 +447,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
0;
|
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 *tunnel = netdev_priv(dev);
|
||||||
struct __ip6_tnl_parm *parm = &tunnel->parms;
|
struct __ip6_tnl_parm *parm = &tunnel->parms;
|
||||||
|
@ -456,7 +457,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
|
|
||||||
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
|
if (nla_put_u32(skb, IFLA_IPTUN_LINK, parm->link) ||
|
||||||
nla_put_in6_addr(skb, IFLA_IPTUN_LOCAL, &parm->laddr) ||
|
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_u8(skb, IFLA_IPTUN_ENCAP_LIMIT, parm->encap_limit) ||
|
||||||
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
|
nla_put_be32(skb, IFLA_IPTUN_FLOWINFO, parm->flowinfo) ||
|
||||||
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
|
nla_put_u32(skb, IFLA_IPTUN_FLAGS, parm->flags) ||
|
||||||
|
@ -485,7 +486,7 @@ Signed-off-by: Steven Barth <cyrus@openwrt.org>
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
nla_put_failure:
|
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_FLOWINFO] = { .type = NLA_U32 },
|
||||||
[IFLA_IPTUN_FLAGS] = { .type = NLA_U32 },
|
[IFLA_IPTUN_FLAGS] = { .type = NLA_U32 },
|
||||||
[IFLA_IPTUN_PROTO] = { .type = NLA_U8 },
|
[IFLA_IPTUN_PROTO] = { .type = NLA_U8 },
|
||||||
|
|
|
@ -193,7 +193,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
case -EAGAIN:
|
case -EAGAIN:
|
||||||
rtm->rtm_type = RTN_THROW;
|
rtm->rtm_type = RTN_THROW;
|
||||||
break;
|
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
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
net->ipv6.ip6_prohibit_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
|
@ -202,7 +202,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
net->ipv6.ip6_blk_hole_entry->dst.dev = dev;
|
||||||
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev);
|
||||||
#endif
|
#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;
|
net->ipv6.ip6_blk_hole_entry->dst.ops = &net->ipv6.ip6_dst_ops;
|
||||||
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
dst_init_metrics(&net->ipv6.ip6_blk_hole_entry->dst,
|
||||||
ip6_template_metrics, true);
|
ip6_template_metrics, true);
|
||||||
|
@ -220,7 +220,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
net->ipv6.sysctl.flush_delay = 0;
|
net->ipv6.sysctl.flush_delay = 0;
|
||||||
@@ -3594,6 +3644,8 @@ out:
|
@@ -3596,6 +3646,8 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
|
@ -229,7 +229,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
out_ip6_prohibit_entry:
|
out_ip6_prohibit_entry:
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
out_ip6_null_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
|
#ifdef CONFIG_IPV6_MULTIPLE_TABLES
|
||||||
kfree(net->ipv6.ip6_prohibit_entry);
|
kfree(net->ipv6.ip6_prohibit_entry);
|
||||||
kfree(net->ipv6.ip6_blk_hole_entry);
|
kfree(net->ipv6.ip6_blk_hole_entry);
|
||||||
|
@ -237,7 +237,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
||||||
#endif
|
#endif
|
||||||
dst_entries_destroy(&net->ipv6.ip6_dst_ops);
|
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_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->dst.dev = init_net.loopback_dev;
|
||||||
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
init_net.ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(init_net.loopback_dev);
|
||||||
|
|
|
@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/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;
|
enum gro_result ret;
|
||||||
int grow;
|
int grow;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (!(skb->dev->features & NETIF_F_GRO))
|
if (!(skb->dev->features & NETIF_F_GRO))
|
||||||
goto normal;
|
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);
|
&upper_dev->adj_list.lower);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||||
struct net_device *upper_dev, bool master,
|
struct net_device *upper_dev, bool master,
|
||||||
void *private)
|
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;
|
goto rollback_lower_mesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,15 +84,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
||||||
&changeupper_info.info);
|
&changeupper_info.info);
|
||||||
return 0;
|
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)
|
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);
|
+ netdev_update_addr_mask(dev);
|
||||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
||||||
&changeupper_info.info);
|
&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)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
dev->addr_assign_type = NET_ADDR_SET;
|
dev->addr_assign_type = NET_ADDR_SET;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
__iomem void *ltq_pci_mapped_cfg;
|
__iomem void *ltq_pci_mapped_cfg;
|
||||||
static __iomem void *ltq_pci_membase;
|
static __iomem void *ltq_pci_membase;
|
||||||
|
|
||||||
@@ -87,8 +89,8 @@
|
@@ -87,8 +89,8 @@ static inline u32 ltq_calc_bar11mask(voi
|
||||||
u32 mem, bar11mask;
|
u32 mem, bar11mask;
|
||||||
|
|
||||||
/* BAR11MASK value depends on available memory on system. */
|
/* BAR11MASK value depends on available memory on system. */
|
||||||
|
|
Loading…
Reference in a new issue