kernel: bump 4.14 to 4.14.174
Remove upstream patches: - 600-ipv6-addrconf-call-ipv6_mc_up-for-non-Ethernet-inter.patch Signed-off-by: CN_SZTL <cnsztl@project-openwrt.eu.org>
This commit is contained in:
parent
33733198bf
commit
9a4de1f5a2
@ -7,11 +7,11 @@ ifdef CONFIG_TESTING_KERNEL
|
||||
endif
|
||||
|
||||
LINUX_VERSION-4.9 = .215
|
||||
LINUX_VERSION-4.14 = .173
|
||||
LINUX_VERSION-4.14 = .174
|
||||
LINUX_VERSION-4.19 = .110
|
||||
|
||||
LINUX_KERNEL_HASH-4.9.215 = 236f2f47853700f22b9925cb17917d97ff7120fcc8110ec827c5a030a8129f48
|
||||
LINUX_KERNEL_HASH-4.14.173 = a282ad7a445dcfc7ff8939d18d55ee09e59f96d2aa96d05583483f155f1db74f
|
||||
LINUX_KERNEL_HASH-4.14.174 = 4c223ca3565d4267b403f7432860d87c8301767eb654d046d268782b18155189
|
||||
LINUX_KERNEL_HASH-4.19.110 = ca113d2c4a061cbb6efaab60290b10dda0298e3249ff1d0c2327eb3d827c6b96
|
||||
|
||||
remove_uri_prefix=$(subst git://,,$(subst http://,,$(subst https://,,$(1))))
|
||||
|
||||
@ -55,7 +55,7 @@ Cc: Kir Kolyshkin <kir@openvz.org>
|
||||
rwlock_t sk_callback_lock;
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -2745,6 +2745,7 @@ void sock_init_data(struct socket *sock,
|
||||
@@ -2748,6 +2748,7 @@ void sock_init_data(struct socket *sock,
|
||||
|
||||
sk->sk_max_pacing_rate = ~0U;
|
||||
sk->sk_pacing_rate = ~0U;
|
||||
|
||||
@ -27,7 +27,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/batman-adv/bat_iv_ogm.c
|
||||
+++ b/net/batman-adv/bat_iv_ogm.c
|
||||
@@ -51,6 +51,7 @@
|
||||
@@ -52,6 +52,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <net/genetlink.h>
|
||||
#include <net/netlink.h>
|
||||
@ -35,7 +35,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "bat_algo.h"
|
||||
@@ -62,7 +63,6 @@
|
||||
@@ -63,7 +64,6 @@
|
||||
#include "netlink.h"
|
||||
#include "network-coding.h"
|
||||
#include "originator.h"
|
||||
@ -45,7 +45,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
#include "translation-table.h"
|
||||
--- a/net/batman-adv/bat_v.c
|
||||
+++ b/net/batman-adv/bat_v.c
|
||||
@@ -37,6 +37,7 @@
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <linux/workqueue.h>
|
||||
#include <net/genetlink.h>
|
||||
#include <net/netlink.h>
|
||||
@ -53,7 +53,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
#include <uapi/linux/batman_adv.h>
|
||||
|
||||
#include "bat_algo.h"
|
||||
@@ -49,7 +50,6 @@
|
||||
@@ -48,7 +49,6 @@
|
||||
#include "log.h"
|
||||
#include "netlink.h"
|
||||
#include "originator.h"
|
||||
@ -80,7 +80,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/batman-adv/bat_v_ogm.c
|
||||
+++ b/net/batman-adv/bat_v_ogm.c
|
||||
@@ -38,13 +38,13 @@
|
||||
@@ -40,13 +40,13 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/workqueue.h>
|
||||
@ -174,7 +174,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
/**
|
||||
--- a/net/batman-adv/hard-interface.c
|
||||
+++ b/net/batman-adv/hard-interface.c
|
||||
@@ -36,6 +36,7 @@
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <net/net_namespace.h>
|
||||
#include <net/rtnetlink.h>
|
||||
@ -182,7 +182,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
#include "bat_v.h"
|
||||
#include "bridge_loop_avoidance.h"
|
||||
@@ -44,7 +45,6 @@
|
||||
@@ -45,7 +46,6 @@
|
||||
#include "gateway_client.h"
|
||||
#include "log.h"
|
||||
#include "originator.h"
|
||||
@ -1025,7 +1025,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
|
||||
--- a/net/batman-adv/types.h
|
||||
+++ b/net/batman-adv/types.h
|
||||
@@ -34,10 +34,9 @@
|
||||
@@ -35,10 +35,9 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
||||
@ -1,71 +0,0 @@
|
||||
From 82afdcd4ec3c8ca6551cbf7c43c09e2fd240487a Mon Sep 17 00:00:00 2001
|
||||
From: Hangbin Liu <liuhangbin@gmail.com>
|
||||
Date: Tue, 10 Mar 2020 15:27:37 +0800
|
||||
Subject: [PATCH] ipv6/addrconf: call ipv6_mc_up() for non-Ethernet interface
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Rafał found an issue that for non-Ethernet interface, if we down and up
|
||||
frequently, the memory will be consumed slowly.
|
||||
|
||||
The reason is we add allnodes/allrouters addressed in multicast list in
|
||||
ipv6_add_dev(). When link down, we call ipv6_mc_down(), store all multicast
|
||||
addresses via mld_add_delrec(). But when link up, we don't call ipv6_mc_up()
|
||||
for non-Ethernet interface to remove the addresses. This makes idev->mc_tomb
|
||||
getting bigger and bigger. The call stack looks like:
|
||||
|
||||
addrconf_notify(NETDEV_REGISTER)
|
||||
ipv6_add_dev
|
||||
ipv6_dev_mc_inc(ff01::1)
|
||||
ipv6_dev_mc_inc(ff02::1)
|
||||
ipv6_dev_mc_inc(ff02::2)
|
||||
|
||||
addrconf_notify(NETDEV_UP)
|
||||
addrconf_dev_config
|
||||
/* Alas, we support only Ethernet autoconfiguration. */
|
||||
return;
|
||||
|
||||
addrconf_notify(NETDEV_DOWN)
|
||||
addrconf_ifdown
|
||||
ipv6_mc_down
|
||||
igmp6_group_dropped(ff02::2)
|
||||
mld_add_delrec(ff02::2)
|
||||
igmp6_group_dropped(ff02::1)
|
||||
igmp6_group_dropped(ff01::1)
|
||||
|
||||
After investigating, I can't found a rule to disable multicast on
|
||||
non-Ethernet interface. In RFC2460, the link could be Ethernet, PPP, ATM,
|
||||
tunnels, etc. In IPv4, it doesn't check the dev type when calls ip_mc_up()
|
||||
in inetdev_event(). Even for IPv6, we don't check the dev type and call
|
||||
ipv6_add_dev(), ipv6_dev_mc_inc() after register device.
|
||||
|
||||
So I think it's OK to fix this memory consumer by calling ipv6_mc_up() for
|
||||
non-Ethernet interface.
|
||||
|
||||
v2: Also check IFF_MULTICAST flag to make sure the interface supports
|
||||
multicast
|
||||
|
||||
Reported-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Tested-by: Rafał Miłecki <zajec5@gmail.com>
|
||||
Fixes: 74235a25c673 ("[IPV6] addrconf: Fix IPv6 on tuntap tunnels")
|
||||
Fixes: 1666d49e1d41 ("mld: do not remove mld souce list info when set link down")
|
||||
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/addrconf.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
--- a/net/ipv6/addrconf.c
|
||||
+++ b/net/ipv6/addrconf.c
|
||||
@@ -3223,6 +3223,10 @@ static void addrconf_dev_config(struct n
|
||||
(dev->type != ARPHRD_TUNNEL) &&
|
||||
(dev->type != ARPHRD_NONE)) {
|
||||
/* Alas, we support only Ethernet autoconfiguration. */
|
||||
+ idev = __in6_dev_get(dev);
|
||||
+ if (!IS_ERR_OR_NULL(idev) && dev->flags & IFF_UP &&
|
||||
+ dev->flags & IFF_MULTICAST)
|
||||
+ ipv6_mc_up(idev);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -20,5 +20,5 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
-KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||
+KBUILD_LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds $(if $(CONFIG_PROFILING),,-s)
|
||||
GCC_PLUGINS_CFLAGS :=
|
||||
CLANG_FLAGS :=
|
||||
|
||||
export ARCH SRCARCH SUBARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD
|
||||
|
||||
@ -114,7 +114,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
config MODULES_TREE_LOOKUP
|
||||
--- a/kernel/module.c
|
||||
+++ b/kernel/module.c
|
||||
@@ -3022,9 +3022,11 @@ static struct module *setup_load_info(st
|
||||
@@ -3024,9 +3024,11 @@ static struct module *setup_load_info(st
|
||||
|
||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||
{
|
||||
@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
||||
modmagic = NULL;
|
||||
|
||||
@@ -3045,6 +3047,7 @@ static int check_modinfo(struct module *
|
||||
@@ -3047,6 +3049,7 @@ static int check_modinfo(struct module *
|
||||
mod->name);
|
||||
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
||||
}
|
||||
|
||||
@ -17,7 +17,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
depends on NETFILTER_ADVANCED
|
||||
help
|
||||
H.323 is a VoIP signalling protocol from ITU-T. As one of the most
|
||||
@@ -1052,7 +1051,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
@@ -1064,7 +1063,6 @@ config NETFILTER_XT_TARGET_SECMARK
|
||||
|
||||
config NETFILTER_XT_TARGET_TCPMSS
|
||||
tristate '"TCPMSS" target support'
|
||||
|
||||
@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
This option adds the flow table core infrastructure.
|
||||
|
||||
@@ -974,6 +973,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
@@ -986,6 +985,15 @@ config NETFILTER_XT_TARGET_NOTRACK
|
||||
depends on NETFILTER_ADVANCED
|
||||
select NETFILTER_XT_TARGET_CT
|
||||
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
+obj-$(CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD) += xt_FLOWOFFLOAD.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
|
||||
@@ -0,0 +1,422 @@
|
||||
|
||||
@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
EXPORT_SYMBOL(default_qdisc_ops);
|
||||
|
||||
/* Main transmission queue. */
|
||||
@@ -764,7 +764,7 @@ static void attach_one_default_qdisc(str
|
||||
@@ -772,7 +772,7 @@ static void attach_one_default_qdisc(str
|
||||
void *_unused)
|
||||
{
|
||||
struct Qdisc *qdisc;
|
||||
|
||||
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/sched/sch_generic.c
|
||||
+++ b/net/sched/sch_generic.c
|
||||
@@ -453,146 +453,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
||||
@@ -461,146 +461,6 @@ struct Qdisc_ops noqueue_qdisc_ops __rea
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
--- a/include/linux/phy.h
|
||||
+++ b/include/linux/phy.h
|
||||
@@ -547,6 +547,12 @@ struct phy_driver {
|
||||
@@ -549,6 +549,12 @@ struct phy_driver {
|
||||
/* Determines the negotiated speed and duplex */
|
||||
int (*read_status)(struct phy_device *phydev);
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -1462,6 +1462,9 @@ int genphy_update_link(struct phy_device
|
||||
@@ -1466,6 +1466,9 @@ int genphy_update_link(struct phy_device
|
||||
{
|
||||
int status;
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
*/
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -2532,6 +2532,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
@@ -2551,6 +2551,10 @@ static inline int pskb_trim(struct sk_bu
|
||||
return (len < skb->len) ? __pskb_trim(skb, len) : 0;
|
||||
}
|
||||
|
||||
@ -67,7 +67,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/**
|
||||
* pskb_trim_unique - remove end from a paged unique (not cloned) buffer
|
||||
* @skb: buffer to alter
|
||||
@@ -2663,16 +2667,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
@@ -2682,16 +2686,6 @@ static inline struct sk_buff *dev_alloc_
|
||||
}
|
||||
|
||||
|
||||
@ -101,8 +101,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
help
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -3004,10 +3004,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||
if (!list_empty(&ptype_all) || !list_empty(&dev->ptype_all))
|
||||
@@ -3012,10 +3012,20 @@ static int xmit_one(struct sk_buff *skb,
|
||||
#endif
|
||||
dev_queue_xmit_nit(skb, dev);
|
||||
|
||||
- len = skb->len;
|
||||
@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
#include <net/protocol.h>
|
||||
#include <net/dst.h>
|
||||
@@ -503,6 +504,22 @@ skb_fail:
|
||||
@@ -584,6 +585,22 @@ skb_fail:
|
||||
}
|
||||
EXPORT_SYMBOL(__napi_alloc_skb);
|
||||
|
||||
|
||||
@ -327,7 +327,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/core/sock.c
|
||||
+++ b/net/core/sock.c
|
||||
@@ -3384,6 +3384,8 @@ static __net_initdata struct pernet_oper
|
||||
@@ -3387,6 +3387,8 @@ static __net_initdata struct pernet_oper
|
||||
|
||||
static int __init proto_init(void)
|
||||
{
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h
|
||||
index 12d967b..c2b98b6 100644
|
||||
--- a/include/net/netfilter/nf_conntrack_ecache.h
|
||||
+++ b/include/net/netfilter/nf_conntrack_ecache.h
|
||||
@@ -71,6 +71,10 @@ struct nf_ct_event {
|
||||
@ -67,8 +65,6 @@ index 12d967b..c2b98b6 100644
|
||||
return nf_conntrack_eventmask_report(1 << event, ct, 0, 0);
|
||||
}
|
||||
|
||||
diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h
|
||||
index e469e85..1d31db8 100644
|
||||
--- a/include/net/netns/conntrack.h
|
||||
+++ b/include/net/netns/conntrack.h
|
||||
@@ -114,7 +114,11 @@ struct netns_ct {
|
||||
@ -83,13 +79,11 @@ index e469e85..1d31db8 100644
|
||||
struct nf_exp_event_notifier __rcu *nf_expect_event_cb;
|
||||
struct nf_ip_net nf_ct_proto;
|
||||
#if defined(CONFIG_NF_CONNTRACK_LABELS)
|
||||
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
|
||||
index 63073be..08d7aab 100644
|
||||
--- a/net/netfilter/Kconfig
|
||||
+++ b/net/netfilter/Kconfig
|
||||
@@ -118,6 +118,14 @@ config NF_CONNTRACK_EVENTS
|
||||
|
||||
If unsure, say `N'.
|
||||
@@ -136,6 +136,14 @@ config NF_CONNTRACK_RTCACHE
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
The module will be called nf_conntrack_rtcache.
|
||||
|
||||
+config NF_CONNTRACK_CHAIN_EVENTS
|
||||
+ bool "Register multiple callbacks to ct events"
|
||||
@ -102,11 +96,9 @@ index 63073be..08d7aab 100644
|
||||
config NF_CONNTRACK_TIMEOUT
|
||||
bool 'Connection tracking timeout'
|
||||
depends on NETFILTER_ADVANCED
|
||||
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
|
||||
index 6bd1508..9b81c7c 100644
|
||||
--- a/net/netfilter/nf_conntrack_core.c
|
||||
+++ b/net/netfilter/nf_conntrack_core.c
|
||||
@@ -2167,6 +2167,10 @@ int nf_conntrack_init_net(struct net *ne
|
||||
@@ -2249,6 +2249,10 @@ int nf_conntrack_init_net(struct net *ne
|
||||
ret = nf_conntrack_proto_pernet_init(net);
|
||||
if (ret < 0)
|
||||
goto err_proto;
|
||||
@ -117,8 +109,6 @@ index 6bd1508..9b81c7c 100644
|
||||
return 0;
|
||||
|
||||
err_proto:
|
||||
diff --git a/net/netfilter/nf_conntrack_ecache.c b/net/netfilter/nf_conntrack_ecache.c
|
||||
index da9df2d..e0e2a8f 100644
|
||||
--- a/net/netfilter/nf_conntrack_ecache.c
|
||||
+++ b/net/netfilter/nf_conntrack_ecache.c
|
||||
@@ -18,6 +18,9 @@
|
||||
@ -268,8 +258,6 @@ index da9df2d..e0e2a8f 100644
|
||||
EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier);
|
||||
|
||||
int nf_ct_expect_register_notifier(struct net *net,
|
||||
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c
|
||||
index 04111c1..8c741f7 100644
|
||||
--- a/net/netfilter/nf_conntrack_netlink.c
|
||||
+++ b/net/netfilter/nf_conntrack_netlink.c
|
||||
@@ -28,6 +28,11 @@
|
||||
@ -282,9 +270,9 @@ index 04111c1..8c741f7 100644
|
||||
+#endif
|
||||
+
|
||||
#include <linux/slab.h>
|
||||
#include <linux/siphash.h>
|
||||
|
||||
#include <linux/netfilter.h>
|
||||
@@ -618,14 +623,22 @@ static size_t ctnetlink_nlmsg_size(const
|
||||
@@ -621,14 +626,22 @@ static size_t ctnetlink_nlmsg_size(const
|
||||
;
|
||||
}
|
||||
|
||||
@ -307,7 +295,7 @@ index 04111c1..8c741f7 100644
|
||||
struct nf_conn *ct = item->ct;
|
||||
struct sk_buff *skb;
|
||||
unsigned int type;
|
||||
@@ -3290,9 +3303,15 @@ static int ctnetlink_stat_exp_cpu(struct
|
||||
@@ -3335,9 +3348,15 @@ static int ctnetlink_stat_exp_cpu(struct
|
||||
}
|
||||
|
||||
#ifdef CONFIG_NF_CONNTRACK_EVENTS
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c
|
||||
index c8ac57f..7f7d847 100644
|
||||
--- a/net/ipv4/netfilter/nf_nat_snmp_basic.c
|
||||
+++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c
|
||||
@@ -1196,7 +1196,7 @@ static int snmp_translate(struct nf_conn
|
||||
|
||||
@ -8,7 +8,7 @@ Signed-off-by: Giuseppe Lippolis <giu.lippolis@gmail.com>
|
||||
|
||||
--- a/drivers/spi/spidev.c
|
||||
+++ b/drivers/spi/spidev.c
|
||||
@@ -669,6 +669,7 @@ static const struct of_device_id spidev_
|
||||
@@ -672,6 +672,7 @@ static const struct of_device_id spidev_
|
||||
{ .compatible = "lineartechnology,ltc2488" },
|
||||
{ .compatible = "ge,achc" },
|
||||
{ .compatible = "semtech,sx1301" },
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/Kconfig 2018-04-22 23:17:57.583718674 -0400
|
||||
+++ b/drivers/net/Kconfig 2018-04-22 23:20:39.331768961 -0400
|
||||
@@ -277,6 +277,125 @@
|
||||
--- a/drivers/net/Kconfig
|
||||
+++ b/drivers/net/Kconfig
|
||||
@@ -277,6 +277,125 @@ config RIONET_RX_SIZE
|
||||
depends on RIONET
|
||||
default "128"
|
||||
|
||||
@ -126,9 +126,9 @@
|
||||
config TUN
|
||||
tristate "Universal TUN/TAP device driver support"
|
||||
depends on INET
|
||||
--- a/drivers/net/Makefile 2018-04-22 23:17:57.583718674 -0400
|
||||
+++ b/drivers/net/Makefile 2018-04-22 23:20:39.411768985 -0400
|
||||
@@ -13,6 +13,7 @@
|
||||
--- a/drivers/net/Makefile
|
||||
+++ b/drivers/net/Makefile
|
||||
@@ -13,6 +13,7 @@ obj-$(CONFIG_DUMMY) += dummy.o
|
||||
obj-$(CONFIG_EQUALIZER) += eql.o
|
||||
obj-$(CONFIG_IFB) += ifb.o
|
||||
obj-$(CONFIG_MACSEC) += macsec.o
|
||||
@ -136,8 +136,8 @@
|
||||
obj-$(CONFIG_MACVLAN) += macvlan.o
|
||||
obj-$(CONFIG_MACVTAP) += macvtap.o
|
||||
obj-$(CONFIG_MII) += mii.o
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/drivers/net/imq.c 2018-05-20 11:10:23.471713282 -0400
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/imq.c
|
||||
@@ -0,0 +1,1268 @@
|
||||
+/*
|
||||
+ * Pseudo-driver for the intermediate queue device.
|
||||
@ -1407,8 +1407,8 @@
|
||||
+MODULE_DESCRIPTION("Pseudo-driver for the intermediate queue device. See https://github.com/imq/linuximq/wiki for more information.");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_ALIAS_RTNL_LINK("imq");
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/include/linux/imq.h 2018-04-22 23:20:39.411768985 -0400
|
||||
--- /dev/null
|
||||
+++ b/include/linux/imq.h
|
||||
@@ -0,0 +1,13 @@
|
||||
+#ifndef _IMQ_H
|
||||
+#define _IMQ_H
|
||||
@ -1423,9 +1423,9 @@
|
||||
+
|
||||
+#endif /* _IMQ_H */
|
||||
+
|
||||
--- a/include/linux/netdevice.h 2018-04-22 23:18:14.351723881 -0400
|
||||
+++ b/include/linux/netdevice.h 2018-04-22 23:20:39.411768985 -0400
|
||||
@@ -1785,6 +1785,11 @@
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -1779,6 +1779,11 @@ struct net_device {
|
||||
/*
|
||||
* Cache lines mostly used on receive path (including eth_type_trans())
|
||||
*/
|
||||
@ -1437,7 +1437,7 @@
|
||||
/* Interface address info used in eth_type_trans() */
|
||||
unsigned char *dev_addr;
|
||||
|
||||
@@ -3646,6 +3651,19 @@
|
||||
@@ -3667,6 +3672,19 @@ static inline void netif_tx_unlock_bh(st
|
||||
} \
|
||||
}
|
||||
|
||||
@ -1457,8 +1457,8 @@
|
||||
static inline void netif_tx_disable(struct net_device *dev)
|
||||
{
|
||||
unsigned int i;
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/include/linux/netfilter/xt_IMQ.h 2018-04-22 23:20:39.415768987 -0400
|
||||
--- /dev/null
|
||||
+++ b/include/linux/netfilter/xt_IMQ.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+#ifndef _XT_IMQ_H
|
||||
+#define _XT_IMQ_H
|
||||
@ -1469,8 +1469,8 @@
|
||||
+
|
||||
+#endif /* _XT_IMQ_H */
|
||||
+
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h 2018-04-22 23:20:39.415768987 -0400
|
||||
--- /dev/null
|
||||
+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
|
||||
@@ -0,0 +1,10 @@
|
||||
+#ifndef _IPT_IMQ_H
|
||||
+#define _IPT_IMQ_H
|
||||
@ -1482,8 +1482,8 @@
|
||||
+
|
||||
+#endif /* _IPT_IMQ_H */
|
||||
+
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h 2018-04-22 23:20:39.415768987 -0400
|
||||
--- /dev/null
|
||||
+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
|
||||
@@ -0,0 +1,10 @@
|
||||
+#ifndef _IP6T_IMQ_H
|
||||
+#define _IP6T_IMQ_H
|
||||
@ -1495,8 +1495,8 @@
|
||||
+
|
||||
+#endif /* _IP6T_IMQ_H */
|
||||
+
|
||||
--- a/include/linux/skbuff.h 2018-04-22 23:18:15.079724108 -0400
|
||||
+++ b/include/linux/skbuff.h 2018-04-22 23:20:39.415768987 -0400
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -40,6 +40,10 @@
|
||||
#include <linux/in6.h>
|
||||
#include <linux/if_packet.h>
|
||||
@ -1508,7 +1508,7 @@
|
||||
|
||||
/* The interface for checksum offload between the stack and networking drivers
|
||||
* is as follows...
|
||||
@@ -582,7 +586,7 @@
|
||||
@@ -582,7 +586,7 @@ typedef unsigned int sk_buff_data_t;
|
||||
typedef unsigned char *sk_buff_data_t;
|
||||
#endif
|
||||
|
||||
@ -1517,7 +1517,7 @@
|
||||
* struct sk_buff - socket buffer
|
||||
* @next: Next buffer in list
|
||||
* @prev: Previous buffer in list
|
||||
@@ -685,6 +689,9 @@
|
||||
@@ -691,6 +695,9 @@ struct sk_buff {
|
||||
* first. This is owned by whoever has the skb queued ATM.
|
||||
*/
|
||||
char cb[48] __aligned(8);
|
||||
@ -1527,7 +1527,7 @@
|
||||
|
||||
unsigned long _skb_refdst;
|
||||
void (*destructor)(struct sk_buff *skb);
|
||||
@@ -694,6 +701,9 @@
|
||||
@@ -700,6 +707,9 @@ struct sk_buff {
|
||||
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
|
||||
unsigned long _nfct;
|
||||
#endif
|
||||
@ -1537,7 +1537,7 @@
|
||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||
struct nf_bridge_info *nf_bridge;
|
||||
#endif
|
||||
@@ -771,6 +781,9 @@
|
||||
@@ -776,6 +786,9 @@ struct sk_buff {
|
||||
#ifdef CONFIG_NET_SWITCHDEV
|
||||
__u8 offload_fwd_mark:1;
|
||||
#endif
|
||||
@ -1547,7 +1547,7 @@
|
||||
#ifdef CONFIG_NET_CLS_ACT
|
||||
__u8 tc_skip_classify:1;
|
||||
__u8 tc_at_ingress:1;
|
||||
@@ -870,7 +883,7 @@
|
||||
@@ -874,7 +887,7 @@ static inline bool skb_pfmemalloc(const
|
||||
*/
|
||||
static inline struct dst_entry *skb_dst(const struct sk_buff *skb)
|
||||
{
|
||||
@ -1556,7 +1556,7 @@
|
||||
* rcu_read_lock section
|
||||
*/
|
||||
WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
|
||||
@@ -960,6 +973,12 @@
|
||||
@@ -964,6 +977,12 @@ void skb_tx_error(struct sk_buff *skb);
|
||||
void consume_skb(struct sk_buff *skb);
|
||||
void __consume_stateless_skb(struct sk_buff *skb);
|
||||
void __kfree_skb(struct sk_buff *skb);
|
||||
@ -1569,7 +1569,7 @@
|
||||
extern struct kmem_cache *skbuff_head_cache;
|
||||
|
||||
void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
|
||||
@@ -3779,8 +3798,12 @@
|
||||
@@ -3847,8 +3866,12 @@ static inline void __nf_copy(struct sk_b
|
||||
dst->_nfct = src->_nfct;
|
||||
nf_conntrack_get(skb_nfct(src));
|
||||
#endif
|
||||
@ -1583,9 +1583,9 @@
|
||||
nf_bridge_get(src->nf_bridge);
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_NETFILTER_XT_TARGET_TRACE) || defined(CONFIG_NF_TABLES)
|
||||
--- a/include/net/netfilter/nf_queue.h 2018-04-22 23:18:15.199724146 -0400
|
||||
+++ b/include/net/netfilter/nf_queue.h 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -31,6 +31,12 @@
|
||||
--- a/include/net/netfilter/nf_queue.h
|
||||
+++ b/include/net/netfilter/nf_queue.h
|
||||
@@ -31,6 +31,12 @@ struct nf_queue_handler {
|
||||
void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh);
|
||||
void nf_unregister_queue_handler(struct net *net);
|
||||
void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict);
|
||||
@ -1598,9 +1598,9 @@
|
||||
|
||||
void nf_queue_entry_get_refs(struct nf_queue_entry *entry);
|
||||
void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
|
||||
--- a/include/net/pkt_sched.h 2018-04-22 23:18:15.219724151 -0400
|
||||
+++ b/include/net/pkt_sched.h 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -109,6 +109,8 @@
|
||||
--- a/include/net/pkt_sched.h
|
||||
+++ b/include/net/pkt_sched.h
|
||||
@@ -109,6 +109,8 @@ int sch_direct_xmit(struct sk_buff *skb,
|
||||
|
||||
void __qdisc_run(struct Qdisc *q);
|
||||
|
||||
@ -1609,9 +1609,9 @@
|
||||
static inline void qdisc_run(struct Qdisc *q)
|
||||
{
|
||||
if (qdisc_run_begin(q))
|
||||
--- a/include/net/sch_generic.h 2018-04-22 23:18:15.227724154 -0400
|
||||
+++ b/include/net/sch_generic.h 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -567,6 +567,13 @@
|
||||
--- a/include/net/sch_generic.h
|
||||
+++ b/include/net/sch_generic.h
|
||||
@@ -571,6 +571,13 @@ static inline int qdisc_enqueue(struct s
|
||||
return sch->enqueue(skb, sch, to_free);
|
||||
}
|
||||
|
||||
@ -1625,8 +1625,8 @@
|
||||
static inline bool qdisc_is_percpu_stats(const struct Qdisc *q)
|
||||
{
|
||||
return q->flags & TCQ_F_CPUSTATS;
|
||||
--- a/include/uapi/linux/netfilter.h 2018-04-22 23:18:16.159724442 -0400
|
||||
+++ b/include/uapi/linux/netfilter.h 2018-04-22 23:20:39.419768987 -0400
|
||||
--- a/include/uapi/linux/netfilter.h
|
||||
+++ b/include/uapi/linux/netfilter.h
|
||||
@@ -14,7 +14,8 @@
|
||||
#define NF_QUEUE 3
|
||||
#define NF_REPEAT 4
|
||||
@ -1637,8 +1637,8 @@
|
||||
|
||||
/* we overload the higher bits for encoding auxiliary data such as the queue
|
||||
* number or errno values. Not nice, but better than additional function
|
||||
--- a/net/core/dev.c 2018-04-22 23:18:24.391727000 -0400
|
||||
+++ b/net/core/dev.c 2018-04-22 23:20:39.419768987 -0400
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -143,6 +143,9 @@
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/netfilter_ingress.h>
|
||||
@ -1649,7 +1649,7 @@
|
||||
#include <linux/sctp.h>
|
||||
#include <net/udp_tunnel.h>
|
||||
|
||||
@@ -2979,7 +2982,12 @@
|
||||
@@ -3001,7 +3004,12 @@ static int xmit_one(struct sk_buff *skb,
|
||||
unsigned int len;
|
||||
int rc;
|
||||
|
||||
@ -1661,8 +1661,8 @@
|
||||
+#endif
|
||||
dev_queue_xmit_nit(skb, dev);
|
||||
|
||||
#ifdef CONFIG_ETHERNET_PACKET_MANGLE
|
||||
@@ -3028,6 +3036,8 @@
|
||||
len = skb->len;
|
||||
@@ -3040,6 +3048,8 @@ out:
|
||||
return skb;
|
||||
}
|
||||
|
||||
@ -1671,9 +1671,9 @@
|
||||
static struct sk_buff *validate_xmit_vlan(struct sk_buff *skb,
|
||||
netdev_features_t features)
|
||||
{
|
||||
--- a/net/core/skbuff.c 2018-04-22 23:18:24.395727003 -0400
|
||||
+++ b/net/core/skbuff.c 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -82,6 +82,87 @@
|
||||
--- a/net/core/skbuff.c
|
||||
+++ b/net/core/skbuff.c
|
||||
@@ -81,6 +81,87 @@ struct kmem_cache *skbuff_head_cache __r
|
||||
static struct kmem_cache *skbuff_fclone_cache __read_mostly;
|
||||
int sysctl_max_skb_frags __read_mostly = MAX_SKB_FRAGS;
|
||||
EXPORT_SYMBOL(sysctl_max_skb_frags);
|
||||
@ -1761,7 +1761,7 @@
|
||||
|
||||
/**
|
||||
* skb_panic - private function for out-of-line support
|
||||
@@ -628,6 +709,28 @@
|
||||
@@ -615,6 +696,28 @@ void skb_release_head_state(struct sk_bu
|
||||
WARN_ON(in_irq());
|
||||
skb->destructor(skb);
|
||||
}
|
||||
@ -1790,7 +1790,7 @@
|
||||
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
|
||||
nf_conntrack_put(skb_nfct(skb));
|
||||
#endif
|
||||
@@ -817,6 +920,10 @@
|
||||
@@ -804,6 +907,10 @@ static void __copy_skb_header(struct sk_
|
||||
new->sp = secpath_get(old->sp);
|
||||
#endif
|
||||
__nf_copy(new, old, false);
|
||||
@ -1801,7 +1801,7 @@
|
||||
|
||||
/* Note : this field could be in headers_start/headers_end section
|
||||
* It is not yet because we do not want to have a 16 bit hole
|
||||
@@ -3915,6 +4022,13 @@
|
||||
@@ -3943,6 +4050,13 @@ void __init skb_init(void)
|
||||
0,
|
||||
SLAB_HWCACHE_ALIGN|SLAB_PANIC,
|
||||
NULL);
|
||||
@ -1815,9 +1815,9 @@
|
||||
}
|
||||
|
||||
static int
|
||||
--- a/net/netfilter/core.c 2018-04-22 23:18:26.019727507 -0400
|
||||
+++ b/net/netfilter/core.c 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -457,6 +457,11 @@
|
||||
--- a/net/netfilter/core.c
|
||||
+++ b/net/netfilter/core.c
|
||||
@@ -490,6 +490,11 @@ int nf_hook_slow(struct sk_buff *skb, st
|
||||
if (ret == 0)
|
||||
ret = -EPERM;
|
||||
return ret;
|
||||
@ -1829,9 +1829,9 @@
|
||||
case NF_QUEUE:
|
||||
ret = nf_queue(skb, state, e, s, verdict);
|
||||
if (ret == 1)
|
||||
--- a/net/netfilter/Kconfig 2018-04-22 23:18:25.751727424 -0400
|
||||
+++ b/net/netfilter/Kconfig 2018-04-22 23:20:39.419768987 -0400
|
||||
@@ -902,6 +902,18 @@
|
||||
--- a/net/netfilter/Kconfig
|
||||
+++ b/net/netfilter/Kconfig
|
||||
@@ -910,6 +910,18 @@ config NETFILTER_XT_TARGET_LOG
|
||||
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
|
||||
@ -1850,18 +1850,18 @@
|
||||
config NETFILTER_XT_TARGET_MARK
|
||||
tristate '"MARK" target support'
|
||||
depends on NETFILTER_ADVANCED
|
||||
--- a/net/netfilter/Makefile 2018-04-22 23:18:25.711727410 -0400
|
||||
+++ b/net/netfilter/Makefile 2018-04-22 23:20:39.423768990 -0400
|
||||
@@ -136,6 +136,7 @@
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_FLOWOFFLOAD) += xt_FLOWOFFLOAD.o
|
||||
--- a/net/netfilter/Makefile
|
||||
+++ b/net/netfilter/Makefile
|
||||
@@ -135,6 +135,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CT) +=
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_DSCP) += xt_DSCP.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_HL) += xt_HL.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_HMARK) += xt_HMARK.o
|
||||
+obj-$(CONFIG_NETFILTER_XT_TARGET_IMQ) += xt_IMQ.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LED) += xt_LED.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
|
||||
obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
|
||||
--- a/net/netfilter/nf_queue.c 2018-04-22 23:18:25.699727407 -0400
|
||||
+++ b/net/netfilter/nf_queue.c 2018-04-22 23:22:59.395812579 -0400
|
||||
--- a/net/netfilter/nf_queue.c
|
||||
+++ b/net/netfilter/nf_queue.c
|
||||
@@ -1,4 +1,4 @@
|
||||
-/*
|
||||
+ /*
|
||||
@ -1892,7 +1892,7 @@
|
||||
/* return EBUSY when somebody else is registered, return EEXIST if the
|
||||
* same handler is registered, return 0 in case of success. */
|
||||
void nf_register_queue_handler(struct net *net, const struct nf_queue_handler *qh)
|
||||
@@ -144,16 +161,29 @@
|
||||
@@ -141,16 +158,29 @@ static void nf_ip6_saveroute(const struc
|
||||
|
||||
static int __nf_queue(struct sk_buff *skb, const struct nf_hook_state *state,
|
||||
const struct nf_hook_entries *entries,
|
||||
@ -1924,7 +1924,7 @@
|
||||
if (!qh) {
|
||||
status = -ESRCH;
|
||||
goto err;
|
||||
@@ -217,8 +248,16 @@
|
||||
@@ -218,8 +248,16 @@ int nf_queue(struct sk_buff *skb, struct
|
||||
{
|
||||
int ret;
|
||||
|
||||
@ -1942,7 +1942,7 @@
|
||||
if (ret == -ESRCH &&
|
||||
(verdict & NF_VERDICT_FLAG_QUEUE_BYPASS))
|
||||
return 1;
|
||||
@@ -302,6 +341,7 @@
|
||||
@@ -323,6 +361,7 @@ next_hook:
|
||||
local_bh_enable();
|
||||
break;
|
||||
case NF_QUEUE:
|
||||
@ -1950,8 +1950,8 @@
|
||||
err = nf_queue(skb, &entry->state, hooks, i, verdict);
|
||||
if (err == 1)
|
||||
goto next_hook;
|
||||
--- /dev/null 2018-03-30 15:39:24.291451107 -0400
|
||||
+++ b/net/netfilter/xt_IMQ.c 2018-04-22 23:20:39.423768990 -0400
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_IMQ.c
|
||||
@@ -0,0 +1,72 @@
|
||||
+/*
|
||||
+ * This target marks packets to be enqueued to an imq device
|
||||
@ -2025,9 +2025,9 @@
|
||||
+MODULE_ALIAS("ipt_IMQ");
|
||||
+MODULE_ALIAS("ip6t_IMQ");
|
||||
+
|
||||
--- a/net/sched/sch_generic.c 2018-04-22 23:18:26.623727693 -0400
|
||||
+++ b/net/sched/sch_generic.c 2018-04-22 23:20:39.423768990 -0400
|
||||
@@ -158,6 +158,14 @@
|
||||
--- a/net/sched/sch_generic.c
|
||||
+++ b/net/sched/sch_generic.c
|
||||
@@ -158,6 +158,14 @@ trace:
|
||||
return skb;
|
||||
}
|
||||
|
||||
|
||||
@ -15,21 +15,24 @@ Signed-off-by: Neal Cardwell <ncardwell@google.com>
|
||||
Signed-off-by: Yuchung Cheng <ycheng@google.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
|
||||
--- a/include/net/inet_connection_sock.h
|
||||
+++ b/include/net/inet_connection_sock.h
|
||||
@@ -138,4 +138,4 @@
|
||||
@@ -136,8 +136,8 @@ struct inet_connection_sock {
|
||||
} icsk_mtup;
|
||||
u32 icsk_user_timeout;
|
||||
|
||||
- u64 icsk_ca_priv[88 / sizeof(u64)];
|
||||
-#define ICSK_CA_PRIV_SIZE (11 * sizeof(u64))
|
||||
+ u64 icsk_ca_priv[104 / sizeof(u64)];
|
||||
+#define ICSK_CA_PRIV_SIZE (13 * sizeof(u64))
|
||||
};
|
||||
|
||||
diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
|
||||
#define ICSK_TIME_RETRANS 1 /* Retransmit timer */
|
||||
--- a/net/ipv4/tcp_bbr.c
|
||||
+++ b/net/ipv4/tcp_bbr.c
|
||||
@@ -97,8 +97,6 @@
|
||||
@@ -95,12 +95,10 @@ struct bbr {
|
||||
u32 mode:3, /* current bbr_mode in state machine */
|
||||
prev_ca_state:3, /* CA state on previous ACK */
|
||||
packet_conservation:1, /* use packet conservation? */
|
||||
- restore_cwnd:1, /* decided to revert cwnd to old value */
|
||||
round_start:1, /* start of packet-timed tx->ack round? */
|
||||
@ -39,7 +42,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- unused:5,
|
||||
+ unused:13,
|
||||
lt_is_sampling:1, /* taking long-term ("LT") samples now? */
|
||||
@@ -119,2 +117,10 @@
|
||||
lt_rtt_cnt:7, /* round trips in long-term interval */
|
||||
lt_use_bw:1; /* use lt_bw as our bw estimate? */
|
||||
@@ -117,6 +115,14 @@ struct bbr {
|
||||
unused_b:5;
|
||||
u32 prior_cwnd; /* prior cwnd upon entering loss recovery */
|
||||
u32 full_bw; /* recent bw, to estimate if pipe is full */
|
||||
+
|
||||
+ /* For tracking ACK aggregation: */
|
||||
@ -50,7 +57,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+ extra_acked_win_idx:1, /* current index in extra_acked array */
|
||||
+ unused_c:6;
|
||||
};
|
||||
@@ -178,2 +184,13 @@
|
||||
|
||||
#define CYCLE_LEN 8 /* number of phases in a pacing gain cycle */
|
||||
@@ -176,6 +182,17 @@ static const u32 bbr_lt_bw_diff = 4000 /
|
||||
/* If we estimate we're policed, use lt_bw for this many round trips: */
|
||||
static const u32 bbr_lt_bw_max_rtts = 48;
|
||||
|
||||
+/* Gain factor for adding extra_acked to target cwnd: */
|
||||
+static const int bbr_extra_acked_gain = BBR_UNIT;
|
||||
@ -64,7 +75,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+static void bbr_check_probe_rtt_done(struct sock *sk);
|
||||
+
|
||||
/* Do we estimate that STARTUP filled the pipe? */
|
||||
@@ -202,2 +219,12 @@
|
||||
static bool bbr_full_bw_reached(const struct sock *sk)
|
||||
{
|
||||
@@ -200,13 +217,31 @@ static u32 bbr_bw(const struct sock *sk)
|
||||
return bbr->lt_use_bw ? bbr->lt_bw : bbr_max_bw(sk);
|
||||
}
|
||||
|
||||
+/* Return maximum extra acked in past k-2k round trips,
|
||||
+ * where k = bbr_extra_acked_win_rtts.
|
||||
@ -77,7 +92,8 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+}
|
||||
+
|
||||
/* Return rate in bytes per second, optionally with a gain.
|
||||
@@ -206,5 +233,13 @@
|
||||
* The order here is chosen carefully to avoid overflow of u64. This should
|
||||
* work for input rates of up to 2.9Tbit/sec and gain of 2.89x.
|
||||
*/
|
||||
+static bool tcp_needs_internal_pacing(const struct sock *sk)
|
||||
+{
|
||||
@ -92,7 +108,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+ mss = tcp_mss_to_mtu(sk, mss);
|
||||
+ rate *= mss;
|
||||
rate *= gain;
|
||||
@@ -263,19 +298,21 @@
|
||||
rate >>= BBR_SCALE;
|
||||
rate *= USEC_PER_SEC;
|
||||
@@ -261,23 +296,25 @@ static void bbr_set_pacing_rate(struct s
|
||||
sk->sk_pacing_rate = rate;
|
||||
}
|
||||
|
||||
-/* Return count of segments we want in the skbs we send, or 0 for default. */
|
||||
-static u32 bbr_tso_segs_goal(struct sock *sk)
|
||||
@ -112,30 +132,36 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- struct bbr *bbr = inet_csk_ca(sk);
|
||||
- u32 min_segs;
|
||||
+ u32 segs, bytes;
|
||||
|
||||
- min_segs = sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2;
|
||||
- bbr->tso_segs_goal = min(tcp_tso_autosize(sk, tp->mss_cache, min_segs),
|
||||
- 0x7FU);
|
||||
+
|
||||
+ /* Sort of tcp_tso_autosize() but ignoring
|
||||
+ * driver provided sk_gso_max_size.
|
||||
+ */
|
||||
+ bytes = min_t(u32, sk->sk_pacing_rate >> sk->sk_pacing_shift,
|
||||
+ GSO_MAX_SIZE - 1 - MAX_TCP_HEADER);
|
||||
+ segs = max_t(u32, bytes / tp->mss_cache, bbr_min_tso_segs(sk));
|
||||
+
|
||||
|
||||
- min_segs = sk->sk_pacing_rate < (bbr_min_tso_rate >> 3) ? 1 : 2;
|
||||
- bbr->tso_segs_goal = min(tcp_tso_autosize(sk, tp->mss_cache, min_segs),
|
||||
- 0x7FU);
|
||||
+ return min(segs, 0x7FU);
|
||||
}
|
||||
@@ -301,2 +338,4 @@
|
||||
|
||||
/* Save "last known good" cwnd so we can restore it after losses or PROBE_RTT */
|
||||
@@ -299,38 +336,31 @@ static void bbr_cwnd_event(struct sock *
|
||||
|
||||
if (event == CA_EVENT_TX_START && tp->app_limited) {
|
||||
bbr->idle_restart = 1;
|
||||
+ bbr->ack_epoch_mstamp = tp->tcp_mstamp;
|
||||
+ bbr->ack_epoch_acked = 0;
|
||||
/* Avoid pointless buffer overflows: pace at est. bw if we don't
|
||||
@@ -306,2 +345,4 @@
|
||||
* need more speed (we're restarting from idle and app-limited).
|
||||
*/
|
||||
if (bbr->mode == BBR_PROBE_BW)
|
||||
bbr_set_pacing_rate(sk, bbr_bw(sk), BBR_UNIT);
|
||||
+ else if (bbr->mode == BBR_PROBE_RTT)
|
||||
+ bbr_check_probe_rtt_done(sk);
|
||||
}
|
||||
@@ -309,6 +350,5 @@
|
||||
}
|
||||
|
||||
-/* Find target cwnd. Right-size the cwnd based on min RTT and the
|
||||
- * estimated bottleneck bandwidth:
|
||||
@ -144,7 +170,9 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- * cwnd = bw * min_rtt * gain = BDP * gain
|
||||
+ * bdp = bw * min_rtt * gain
|
||||
*
|
||||
@@ -318,17 +358,7 @@
|
||||
* The key factor, gain, controls the amount of queue. While a small gain
|
||||
* builds a smaller queue, it becomes more vulnerable to noise in RTT
|
||||
* measurements (e.g., delayed ACKs or other ACK compression effects). This
|
||||
* noise may cause BBR to under-estimate the rate.
|
||||
- *
|
||||
- * To achieve full performance in high-speed paths, we budget enough cwnd to
|
||||
@ -164,7 +192,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- u32 cwnd;
|
||||
+ u32 bdp;
|
||||
u64 w;
|
||||
@@ -347,6 +377,23 @@
|
||||
|
||||
/* If we've never had a valid RTT sample, cap cwnd at the initial
|
||||
@@ -345,21 +375,65 @@ static u32 bbr_target_cwnd(struct sock *
|
||||
w = (u64)bw * bbr->min_rtt_us;
|
||||
|
||||
/* Apply a gain to the given value, then remove the BW_SCALE shift. */
|
||||
- cwnd = (((w * gain) >> BBR_SCALE) + BW_UNIT - 1) / BW_UNIT;
|
||||
+ bdp = (((w * gain) >> BBR_SCALE) + BW_UNIT - 1) / BW_UNIT;
|
||||
@ -190,12 +222,16 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- cwnd += 3 * bbr->tso_segs_goal;
|
||||
+ cwnd += 3 * bbr_tso_segs_goal(sk);
|
||||
|
||||
@@ -356,3 +403,3 @@
|
||||
/* Reduce delayed ACKs by rounding up cwnd to the next even number. */
|
||||
cwnd = (cwnd + 1) & ~1U;
|
||||
|
||||
/* Ensure gain cycling gets inflight above BDP even for small BDPs. */
|
||||
- if (bbr->mode == BBR_PROBE_BW && gain > BBR_UNIT)
|
||||
+ if (bbr->mode == BBR_PROBE_BW && bbr->cycle_idx == 0)
|
||||
cwnd += 2;
|
||||
@@ -362,2 +409,29 @@
|
||||
|
||||
return cwnd;
|
||||
}
|
||||
|
||||
+/* Find inflight based on min RTT and the estimated bottleneck bandwidth. */
|
||||
+static u32 bbr_inflight(struct sock *sk, u32 bw, int gain)
|
||||
@ -225,12 +261,17 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+}
|
||||
+
|
||||
/* An optimization in BBR to reduce losses: On the first round of recovery, we
|
||||
@@ -393,3 +467,3 @@
|
||||
* follow the packet conservation principle: send P packets per P packets acked.
|
||||
* After that, we slow-start and send at most 2*P packets per P packets acked.
|
||||
@@ -391,17 +465,11 @@ static bool bbr_set_cwnd_to_recover_or_r
|
||||
cwnd = tcp_packets_in_flight(tp) + acked;
|
||||
} else if (prev_state >= TCP_CA_Recovery && state < TCP_CA_Recovery) {
|
||||
/* Exiting loss recovery; restore cwnd saved before recovery. */
|
||||
- bbr->restore_cwnd = 1;
|
||||
+ cwnd = max(cwnd, bbr->prior_cwnd);
|
||||
bbr->packet_conservation = 0;
|
||||
@@ -398,8 +472,2 @@
|
||||
}
|
||||
bbr->prev_ca_state = state;
|
||||
|
||||
- if (bbr->restore_cwnd) {
|
||||
- /* Restore cwnd after exiting loss recovery or PROBE_RTT. */
|
||||
@ -239,7 +280,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- }
|
||||
-
|
||||
if (bbr->packet_conservation) {
|
||||
@@ -420,6 +488,6 @@
|
||||
*new_cwnd = max(cwnd, tcp_packets_in_flight(tp) + acked);
|
||||
return true; /* yes, using packet conservation */
|
||||
@@ -418,16 +486,23 @@ static void bbr_set_cwnd(struct sock *sk
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
- u32 cwnd = 0, target_cwnd = 0;
|
||||
+ u32 cwnd = tp->snd_cwnd, target_cwnd = 0;
|
||||
@ -248,7 +293,8 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
- return;
|
||||
+ goto done; /* no packet fully ACKed; just apply caps */
|
||||
|
||||
@@ -428,4 +496,11 @@
|
||||
if (bbr_set_cwnd_to_recover_or_restore(sk, rs, acked, &cwnd))
|
||||
goto done;
|
||||
|
||||
+ target_cwnd = bbr_bdp(sk, bw, gain);
|
||||
+
|
||||
@ -261,32 +307,55 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
/* If we're below target cwnd, slow start cwnd toward target cwnd. */
|
||||
- target_cwnd = bbr_target_cwnd(sk, bw, gain);
|
||||
if (bbr_full_bw_reached(sk)) /* only cut cwnd if we filled the pipe */
|
||||
@@ -470,3 +545,3 @@
|
||||
cwnd = min(cwnd + acked, target_cwnd);
|
||||
else if (cwnd < target_cwnd || tp->delivered < TCP_INIT_CWND)
|
||||
@@ -468,14 +543,14 @@ static bool bbr_is_next_cycle_phase(stru
|
||||
if (bbr->pacing_gain > BBR_UNIT)
|
||||
return is_full_length &&
|
||||
(rs->losses || /* perhaps pacing_gain*BDP won't fit */
|
||||
- inflight >= bbr_target_cwnd(sk, bw, bbr->pacing_gain));
|
||||
+ inflight >= bbr_inflight(sk, bw, bbr->pacing_gain));
|
||||
|
||||
@@ -477,3 +552,3 @@
|
||||
/* A pacing_gain < 1.0 tries to drain extra queue we added if bw
|
||||
* probing didn't find more bw. If inflight falls to match BDP then we
|
||||
* estimate queue is drained; persisting would underutilize the pipe.
|
||||
*/
|
||||
return is_full_length ||
|
||||
- inflight <= bbr_target_cwnd(sk, bw, BBR_UNIT);
|
||||
+ inflight <= bbr_inflight(sk, bw, BBR_UNIT);
|
||||
}
|
||||
@@ -487,4 +562,2 @@
|
||||
|
||||
static void bbr_advance_cycle_phase(struct sock *sk)
|
||||
@@ -485,8 +560,6 @@ static void bbr_advance_cycle_phase(stru
|
||||
|
||||
bbr->cycle_idx = (bbr->cycle_idx + 1) & (CYCLE_LEN - 1);
|
||||
bbr->cycle_mstamp = tp->delivered_mstamp;
|
||||
- bbr->pacing_gain = bbr->lt_use_bw ? BBR_UNIT :
|
||||
- bbr_pacing_gain[bbr->cycle_idx];
|
||||
}
|
||||
@@ -506,4 +579,2 @@
|
||||
|
||||
/* Gain cycling: cycle pacing gain to converge to fair share of available bw. */
|
||||
@@ -504,8 +577,6 @@ static void bbr_reset_startup_mode(struc
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
|
||||
bbr->mode = BBR_STARTUP;
|
||||
- bbr->pacing_gain = bbr_high_gain;
|
||||
- bbr->cwnd_gain = bbr_high_gain;
|
||||
}
|
||||
@@ -515,4 +586,2 @@
|
||||
|
||||
static void bbr_reset_probe_bw_mode(struct sock *sk)
|
||||
@@ -513,8 +584,6 @@ static void bbr_reset_probe_bw_mode(stru
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
|
||||
bbr->mode = BBR_PROBE_BW;
|
||||
- bbr->pacing_gain = BBR_UNIT;
|
||||
- bbr->cwnd_gain = bbr_cwnd_gain;
|
||||
bbr->cycle_idx = CYCLE_LEN - 1 - prandom_u32_max(bbr_cycle_rand);
|
||||
@@ -700,2 +768,63 @@
|
||||
bbr_advance_cycle_phase(sk); /* flip to next phase of gain cycle */
|
||||
}
|
||||
@@ -697,6 +766,67 @@ static void bbr_update_bw(struct sock *s
|
||||
}
|
||||
}
|
||||
|
||||
+/* Estimates the windowed max degree of ack aggregation.
|
||||
+ * This is used to provision extra in-flight data to keep sending during
|
||||
@ -350,19 +419,23 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+}
|
||||
+
|
||||
/* Estimate when the pipe is full, using the change in delivery rate: BBR
|
||||
@@ -734,4 +863,4 @@
|
||||
* estimates that STARTUP filled the pipe if the estimated bw hasn't changed by
|
||||
* at least bbr_full_bw_thresh (25%) after bbr_full_bw_cnt (3) non-app-limited
|
||||
@@ -731,15 +861,29 @@ static void bbr_check_drain(struct sock
|
||||
|
||||
if (bbr->mode == BBR_STARTUP && bbr_full_bw_reached(sk)) {
|
||||
bbr->mode = BBR_DRAIN; /* drain queue we created */
|
||||
- bbr->pacing_gain = bbr_drain_gain; /* pace slow to drain */
|
||||
- bbr->cwnd_gain = bbr_high_gain; /* maintain cwnd */
|
||||
+ tcp_sk(sk)->snd_ssthresh =
|
||||
+ bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT);
|
||||
} /* fall through to check if in-flight is already small: */
|
||||
@@ -739,3 +868,3 @@
|
||||
if (bbr->mode == BBR_DRAIN &&
|
||||
tcp_packets_in_flight(tcp_sk(sk)) <=
|
||||
- bbr_target_cwnd(sk, bbr_max_bw(sk), BBR_UNIT))
|
||||
+ bbr_inflight(sk, bbr_max_bw(sk), BBR_UNIT))
|
||||
bbr_reset_probe_bw_mode(sk); /* we estimate queue is drained */
|
||||
@@ -743,2 +872,16 @@
|
||||
}
|
||||
|
||||
+static void bbr_check_probe_rtt_done(struct sock *sk)
|
||||
+{
|
||||
@ -379,18 +452,30 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+}
|
||||
+
|
||||
/* The goal of PROBE_RTT mode is to have BBR flows cooperatively and
|
||||
@@ -772,3 +915,4 @@
|
||||
* periodically drain the bottleneck queue, to converge to measure the true
|
||||
* min_rtt (unloaded propagation delay). This allows the flows to keep queues
|
||||
@@ -769,7 +913,8 @@ static void bbr_update_min_rtt(struct so
|
||||
filter_expired = after(tcp_jiffies32,
|
||||
bbr->min_rtt_stamp + bbr_min_rtt_win_sec * HZ);
|
||||
if (rs->rtt_us >= 0 &&
|
||||
- (rs->rtt_us <= bbr->min_rtt_us || filter_expired)) {
|
||||
+ (rs->rtt_us <= bbr->min_rtt_us ||
|
||||
+ (filter_expired && !rs->is_ack_delayed))) {
|
||||
bbr->min_rtt_us = rs->rtt_us;
|
||||
@@ -780,4 +924,2 @@
|
||||
bbr->min_rtt_stamp = tcp_jiffies32;
|
||||
}
|
||||
@@ -777,8 +922,6 @@ static void bbr_update_min_rtt(struct so
|
||||
if (bbr_probe_rtt_mode_ms > 0 && filter_expired &&
|
||||
!bbr->idle_restart && bbr->mode != BBR_PROBE_RTT) {
|
||||
bbr->mode = BBR_PROBE_RTT; /* dip, drain queue */
|
||||
- bbr->pacing_gain = BBR_UNIT;
|
||||
- bbr->cwnd_gain = BBR_UNIT;
|
||||
bbr_save_cwnd(sk); /* note cwnd so we can restore it */
|
||||
@@ -800,8 +942,4 @@
|
||||
bbr->probe_rtt_done_stamp = 0;
|
||||
}
|
||||
@@ -797,12 +940,8 @@ static void bbr_update_min_rtt(struct so
|
||||
} else if (bbr->probe_rtt_done_stamp) {
|
||||
if (bbr->round_start)
|
||||
bbr->probe_rtt_round_done = 1;
|
||||
- if (bbr->probe_rtt_round_done &&
|
||||
- after(tcp_jiffies32, bbr->probe_rtt_done_stamp)) {
|
||||
@ -401,7 +486,11 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+ if (bbr->probe_rtt_round_done)
|
||||
+ bbr_check_probe_rtt_done(sk);
|
||||
}
|
||||
@@ -813,2 +951,31 @@
|
||||
}
|
||||
/* Restart after idle ends only once we process a new S/ACK for data */
|
||||
@@ -810,13 +949,44 @@ static void bbr_update_min_rtt(struct so
|
||||
bbr->idle_restart = 0;
|
||||
}
|
||||
|
||||
+static void bbr_update_gains(struct sock *sk)
|
||||
+{
|
||||
@ -433,28 +522,45 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+}
|
||||
+
|
||||
static void bbr_update_model(struct sock *sk, const struct rate_sample *rs)
|
||||
@@ -816,2 +983,3 @@
|
||||
{
|
||||
bbr_update_bw(sk, rs);
|
||||
+ bbr_update_ack_aggregation(sk, rs);
|
||||
bbr_update_cycle_phase(sk, rs);
|
||||
@@ -820,2 +988,3 @@
|
||||
bbr_check_full_bw_reached(sk, rs);
|
||||
bbr_check_drain(sk, rs);
|
||||
bbr_update_min_rtt(sk, rs);
|
||||
+ bbr_update_gains(sk);
|
||||
}
|
||||
@@ -831,3 +1000,2 @@
|
||||
|
||||
static void bbr_main(struct sock *sk, const struct rate_sample *rs)
|
||||
@@ -828,7 +998,6 @@ static void bbr_main(struct sock *sk, co
|
||||
|
||||
bw = bbr_bw(sk);
|
||||
bbr_set_pacing_rate(sk, bw, bbr->pacing_gain);
|
||||
- bbr_set_tso_segs_goal(sk);
|
||||
bbr_set_cwnd(sk, rs, rs->acked_sacked, bw, bbr->cwnd_gain);
|
||||
@@ -841,3 +1009,3 @@
|
||||
}
|
||||
|
||||
@@ -838,7 +1007,7 @@ static void bbr_init(struct sock *sk)
|
||||
struct bbr *bbr = inet_csk_ca(sk);
|
||||
|
||||
bbr->prior_cwnd = 0;
|
||||
- bbr->tso_segs_goal = 0; /* default segs per skb until first ACK */
|
||||
+ tp->snd_ssthresh = TCP_INFINITE_SSTHRESH;
|
||||
bbr->rtt_cnt = 0;
|
||||
@@ -857,3 +1025,2 @@
|
||||
bbr->next_rtt_delivered = 0;
|
||||
bbr->prev_ca_state = TCP_CA_Open;
|
||||
@@ -854,7 +1023,6 @@ static void bbr_init(struct sock *sk)
|
||||
bbr->has_seen_rtt = 0;
|
||||
bbr_init_pacing_rate_from_rtt(sk);
|
||||
|
||||
- bbr->restore_cwnd = 0;
|
||||
bbr->round_start = 0;
|
||||
@@ -868,2 +1035,9 @@
|
||||
bbr->idle_restart = 0;
|
||||
bbr->full_bw_reached = 0;
|
||||
@@ -865,6 +1033,13 @@ static void bbr_init(struct sock *sk)
|
||||
bbr_reset_lt_bw_sampling(sk);
|
||||
bbr_reset_startup_mode(sk);
|
||||
|
||||
+ bbr->ack_epoch_mstamp = tp->tcp_mstamp;
|
||||
+ bbr->ack_epoch_acked = 0;
|
||||
@ -464,27 +570,42 @@ diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.c
|
||||
+ bbr->extra_acked[1] = 0;
|
||||
+
|
||||
cmpxchg(&sk->sk_pacing_status, SK_PACING_NONE, SK_PACING_NEEDED);
|
||||
@@ -894,3 +1068,3 @@
|
||||
}
|
||||
|
||||
@@ -891,7 +1066,7 @@ static u32 bbr_undo_cwnd(struct sock *sk
|
||||
static u32 bbr_ssthresh(struct sock *sk)
|
||||
{
|
||||
bbr_save_cwnd(sk);
|
||||
- return TCP_INFINITE_SSTHRESH; /* BBR does not use ssthresh */
|
||||
+ return tcp_sk(sk)->snd_ssthresh;
|
||||
}
|
||||
@@ -943,3 +1117,3 @@
|
||||
|
||||
static size_t bbr_get_info(struct sock *sk, u32 ext, int *attr,
|
||||
@@ -940,7 +1115,7 @@ static struct tcp_congestion_ops tcp_bbr
|
||||
.undo_cwnd = bbr_undo_cwnd,
|
||||
.cwnd_event = bbr_cwnd_event,
|
||||
.ssthresh = bbr_ssthresh,
|
||||
- .tso_segs_goal = bbr_tso_segs_goal,
|
||||
+ .min_tso_segs = bbr_min_tso_segs,
|
||||
.get_info = bbr_get_info,
|
||||
|
||||
diff --git a/include/net/tcp.h b/include/net/tcp.h
|
||||
.set_state = bbr_set_state,
|
||||
};
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1000,2 +1000,3 @@
|
||||
@@ -998,6 +998,7 @@ struct rate_sample {
|
||||
u32 prior_in_flight; /* in flight before this ACK */
|
||||
bool is_app_limited; /* is sample from packet with bubble in pipe? */
|
||||
bool is_retrans; /* is sample from retransmission? */
|
||||
+ bool is_ack_delayed; /* is this (likely) a delayed ACK? */
|
||||
};
|
||||
@@ -1026,2 +1027,4 @@
|
||||
|
||||
struct tcp_congestion_ops {
|
||||
@@ -1024,6 +1025,8 @@ struct tcp_congestion_ops {
|
||||
u32 (*undo_cwnd)(struct sock *sk);
|
||||
/* hook for packet ack accounting (optional) */
|
||||
void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
|
||||
+ /* override sysctl_tcp_min_tso_segs */
|
||||
+ u32 (*min_tso_segs)(struct sock *sk);
|
||||
/* suggest number of segments for each skb to transmit (optional) */
|
||||
|
||||
u32 (*tso_segs_goal)(struct sock *sk);
|
||||
/* returns the multiplier used in tcp_sndbuf_expand (optional) */
|
||||
|
||||
@ -269,7 +269,7 @@
|
||||
+#endif /*_IPT_WEBURL_H*/
|
||||
--- a/net/ipv4/netfilter/Kconfig
|
||||
+++ b/net/ipv4/netfilter/Kconfig
|
||||
@@ -417,5 +417,25 @@ config IP_NF_ARP_MANGLE
|
||||
@@ -430,5 +430,25 @@ config IP_NF_ARP_MANGLE
|
||||
|
||||
endif # IP_NF_ARPTABLES
|
||||
|
||||
@ -297,7 +297,7 @@
|
||||
|
||||
--- a/net/ipv4/netfilter/Makefile
|
||||
+++ b/net/ipv4/netfilter/Makefile
|
||||
@@ -55,6 +55,10 @@ obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o
|
||||
@@ -57,6 +57,10 @@ obj-$(CONFIG_IP_NF_RAW) += iptable_raw.o
|
||||
obj-$(CONFIG_IP_NF_SECURITY) += iptable_security.o
|
||||
|
||||
# matches
|
||||
@ -3908,7 +3908,6 @@
|
||||
+module_init(init);
|
||||
+module_exit(fini);
|
||||
+
|
||||
|
||||
--- /dev/null
|
||||
+++ b/net/ipv4/netfilter/ipt_bandwidth.mod.c
|
||||
@@ -0,0 +1,20 @@
|
||||
@ -4077,7 +4076,6 @@
|
||||
+module_init(init);
|
||||
+module_exit(fini);
|
||||
+
|
||||
|
||||
--- /dev/null
|
||||
+++ b/net/ipv4/netfilter/ipt_timerange.mod.c
|
||||
@@ -0,0 +1,20 @@
|
||||
@ -5423,7 +5421,6 @@
|
||||
+
|
||||
+module_init(init);
|
||||
+module_exit(fini);
|
||||
|
||||
--- /dev/null
|
||||
+++ b/net/ipv4/netfilter/ipt_weburl.c
|
||||
@@ -0,0 +1,537 @@
|
||||
@ -5964,7 +5961,6 @@
|
||||
+
|
||||
+module_init(init);
|
||||
+module_exit(fini);
|
||||
|
||||
--- /dev/null
|
||||
+++ b/net/ipv4/netfilter/ipt_weburl.mod.c
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||
goto drop;
|
||||
|
||||
@@ -3301,6 +3303,7 @@ static int packet_create(struct net *net
|
||||
@@ -3302,6 +3304,7 @@ static int packet_create(struct net *net
|
||||
mutex_init(&po->pg_vec_lock);
|
||||
po->rollover = NULL;
|
||||
po->prot_hook.func = packet_rcv;
|
||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (sock->type == SOCK_PACKET)
|
||||
po->prot_hook.func = packet_rcv_spkt;
|
||||
@@ -3923,6 +3926,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
@@ -3924,6 +3927,16 @@ packet_setsockopt(struct socket *sock, i
|
||||
po->xmit = val ? packet_direct_xmit : dev_queue_xmit;
|
||||
return 0;
|
||||
}
|
||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
default:
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
@@ -3975,6 +3988,13 @@ static int packet_getsockopt(struct sock
|
||||
@@ -3976,6 +3989,13 @@ static int packet_getsockopt(struct sock
|
||||
case PACKET_VNET_HDR:
|
||||
val = po->has_vnet_hdr;
|
||||
break;
|
||||
|
||||
@ -9,7 +9,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -2496,7 +2496,7 @@ static inline int pskb_network_may_pull(
|
||||
@@ -2515,7 +2515,7 @@ static inline int pskb_network_may_pull(
|
||||
* NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
|
||||
*/
|
||||
#ifndef NET_SKB_PAD
|
||||
|
||||
@ -22,7 +22,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
#endif
|
||||
--- a/include/linux/skbuff.h
|
||||
+++ b/include/linux/skbuff.h
|
||||
@@ -782,6 +782,7 @@ struct sk_buff {
|
||||
@@ -795,6 +795,7 @@ struct sk_buff {
|
||||
__u8 tc_redirected:1;
|
||||
__u8 tc_from_ingress:1;
|
||||
#endif
|
||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
__u16 tc_index; /* traffic control index */
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -4805,6 +4805,9 @@ static enum gro_result dev_gro_receive(s
|
||||
@@ -4815,6 +4815,9 @@ static enum gro_result dev_gro_receive(s
|
||||
enum gro_result ret;
|
||||
int grow;
|
||||
|
||||
@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (netif_elide_gro(skb->dev))
|
||||
goto normal;
|
||||
|
||||
@@ -6282,6 +6285,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
@@ -6292,6 +6295,48 @@ static void __netdev_adjacent_dev_unlink
|
||||
&upper_dev->adj_list.lower);
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
static int __netdev_upper_dev_link(struct net_device *dev,
|
||||
struct net_device *upper_dev, bool master,
|
||||
void *upper_priv, void *upper_info)
|
||||
@@ -6320,6 +6365,7 @@ static int __netdev_upper_dev_link(struc
|
||||
@@ -6330,6 +6375,7 @@ static int __netdev_upper_dev_link(struc
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@ -99,7 +99,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
ret = call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
||||
&changeupper_info.info);
|
||||
ret = notifier_to_errno(ret);
|
||||
@@ -6397,6 +6443,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
@@ -6407,6 +6453,7 @@ void netdev_upper_dev_unlink(struct net_
|
||||
|
||||
__netdev_adjacent_dev_unlink_neighbour(dev, upper_dev);
|
||||
|
||||
@ -107,7 +107,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
call_netdevice_notifiers_info(NETDEV_CHANGEUPPER, dev,
|
||||
&changeupper_info.info);
|
||||
}
|
||||
@@ -6961,6 +7008,7 @@ int dev_set_mac_address(struct net_devic
|
||||
@@ -6971,6 +7018,7 @@ int dev_set_mac_address(struct net_devic
|
||||
if (err)
|
||||
return err;
|
||||
dev->addr_assign_type = NET_ADDR_SET;
|
||||
|
||||
@ -171,7 +171,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
/**
|
||||
* Search the device tree for the best MAC address to use. 'mac-address' is
|
||||
* checked first, because that is supposed to contain to "most recent" MAC
|
||||
@@ -64,11 +192,18 @@ static const void *of_get_mac_addr(struc
|
||||
@@ -64,11 +197,18 @@ static const void *of_get_mac_addr(struc
|
||||
* addresses. Some older U-Boots only initialized 'local-mac-address'. In
|
||||
* this case, the real MAC is in 'local-mac-address', and 'mac-address' exists
|
||||
* but is all zeros.
|
||||
|
||||
@ -85,7 +85,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
|
||||
* @phydev: the phy_device struct
|
||||
--- a/include/linux/phy.h
|
||||
+++ b/include/linux/phy.h
|
||||
@@ -909,6 +909,7 @@ void phy_ethtool_ksettings_get(struct ph
|
||||
@@ -911,6 +911,7 @@ void phy_ethtool_ksettings_get(struct ph
|
||||
struct ethtool_link_ksettings *cmd);
|
||||
int phy_ethtool_ksettings_set(struct phy_device *phydev,
|
||||
const struct ethtool_link_ksettings *cmd);
|
||||
|
||||
@ -11,7 +11,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
|
||||
--- a/drivers/net/phy/phy_device.c
|
||||
+++ b/drivers/net/phy/phy_device.c
|
||||
@@ -1106,6 +1106,9 @@ void phy_detach(struct phy_device *phyde
|
||||
@@ -1110,6 +1110,9 @@ void phy_detach(struct phy_device *phyde
|
||||
struct module *ndev_owner = dev->dev.parent->driver->owner;
|
||||
struct mii_bus *bus;
|
||||
|
||||
@ -23,7 +23,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
||||
sysfs_remove_link(&phydev->mdio.dev.kobj, "attached_dev");
|
||||
--- a/include/linux/phy.h
|
||||
+++ b/include/linux/phy.h
|
||||
@@ -559,6 +559,12 @@ struct phy_driver {
|
||||
@@ -561,6 +561,12 @@ struct phy_driver {
|
||||
*/
|
||||
int (*did_interrupt)(struct phy_device *phydev);
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
--- a/drivers/net/usb/Kconfig
|
||||
+++ b/drivers/net/usb/Kconfig
|
||||
@@ -613,4 +613,16 @@ config USB_NET_CH9200
|
||||
@@ -612,4 +612,16 @@ config USB_NET_CH9200
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ch9200.
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user