From 9198d5c3d66f08de57e11b167704258dc317868b Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Nov 2020 19:26:24 +0800 Subject: [PATCH 1/5] Revert "rules.mk: remove redundant target flags" This reverts commit 96752b58076e5f020d0a229a3a3c6bb9482b6d3b. --- rules.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rules.mk b/rules.mk index dd720d0131..1dd9d03de2 100644 --- a/rules.mk +++ b/rules.mk @@ -174,6 +174,8 @@ TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$( TARGET_CXXFLAGS = $(TARGET_CFLAGS) TARGET_ASFLAGS_DEFAULT = $(TARGET_CFLAGS) TARGET_ASFLAGS = $(TARGET_ASFLAGS_DEFAULT) +TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include +TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),) LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC)))) LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s) From 6386e304edbe3bc480edc3635044f10199c9fb8f Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Nov 2020 20:19:26 +0800 Subject: [PATCH 2/5] luci-app-vssr: sync with upstream source --- package/ctcgfw/luci-app-vssr/Makefile | 9 --------- .../luci-app-vssr/luasrc/controller/vssr.lua | 14 +++++++------- .../luasrc/model/cbi/vssr/advanced.lua | 12 ++++++------ .../luci-app-vssr/luasrc/model/cbi/vssr/client.lua | 2 +- .../luasrc/model/cbi/vssr/control.lua | 4 ++-- package/ctcgfw/luci-app-vssr/root/etc/config/vssr | 2 +- package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr | 2 +- .../root/etc/{dnsmasq.ssr => vssr}/ad.conf | 0 .../root/etc/{config => vssr}/black.list | 5 ++++- .../root/etc/{ => vssr}/china_ssr.txt | 0 .../root/etc/{config => vssr}/gfw.list | 0 .../root/etc/{dnsmasq.ssr => vssr}/gfw_base.conf | 0 .../root/etc/{dnsmasq.ssr => vssr}/gfw_list.conf | 0 .../{dnsmasq.oversea => vssr}/oversea_list.conf | 0 .../root/etc/{config => vssr}/white.list | 0 .../luci-app-vssr/root/usr/share/vssr/gfw2ipset.sh | 10 +++++----- .../luci-app-vssr/root/usr/share/vssr/update.lua | 14 +++++++------- 17 files changed, 34 insertions(+), 40 deletions(-) rename package/ctcgfw/luci-app-vssr/root/etc/{dnsmasq.ssr => vssr}/ad.conf (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{config => vssr}/black.list (83%) rename package/ctcgfw/luci-app-vssr/root/etc/{ => vssr}/china_ssr.txt (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{config => vssr}/gfw.list (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{dnsmasq.ssr => vssr}/gfw_base.conf (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{dnsmasq.ssr => vssr}/gfw_list.conf (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{dnsmasq.oversea => vssr}/oversea_list.conf (100%) rename package/ctcgfw/luci-app-vssr/root/etc/{config => vssr}/white.list (100%) diff --git a/package/ctcgfw/luci-app-vssr/Makefile b/package/ctcgfw/luci-app-vssr/Makefile index 2841c9bb9d..ab958a031c 100644 --- a/package/ctcgfw/luci-app-vssr/Makefile +++ b/package/ctcgfw/luci-app-vssr/Makefile @@ -57,15 +57,6 @@ endef define Build/Compile endef -define Package/luci-app-vssr/conffiles - /etc/ssr_ip - /etc/dnsmasq.ssr/gfw_list.conf - /etc/china_ssr.txt - /etc/dnsmasq.ssr/gfw_list.conf - /etc/dnsmasq.ssr/gfw_base.conf - /etc/dnsmasq.oversea/oversea_list.conf -endef - define Package/luci-app-vssr/install $(INSTALL_DIR) $(1)/usr/lib/lua/luci cp -pR ./luasrc/* $(1)/usr/lib/lua/luci diff --git a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua index 72f42dfe40..96bc48a53a 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/controller/vssr.lua @@ -228,9 +228,9 @@ function refresh_data() luci.sys.call('/usr/bin/vssr-gfw') icount = luci.sys.exec('cat /tmp/gfwnew.txt | wc -l') if tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l') + oldcount = luci.sys.exec('cat /etc/vssr/gfw_list.conf | wc -l') if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf') + luci.sys.exec('cp -f /tmp/gfwnew.txt /etc/vssr/gfw_list.conf') retstring = tostring(math.ceil(tonumber(icount) / 2)) else retstring = '0' @@ -248,9 +248,9 @@ function refresh_data() sret = luci.sys.call(refresh_cmd) icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') if sret == 0 and tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/china_ssr.txt | wc -l') + oldcount = luci.sys.exec('cat /etc/vssr/china_ssr.txt | wc -l') if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/china_ssr.txt /etc/china_ssr.txt') + luci.sys.exec('cp -f /tmp/china_ssr.txt /etc/vssr/china_ssr.txt') retstring = tostring(tonumber(icount)) else retstring = '0' @@ -274,13 +274,13 @@ function refresh_data() end icount = luci.sys.exec('cat /tmp/ad.conf | wc -l') if tonumber(icount) > 1000 then - if nixio.fs.access('/etc/dnsmasq.ssr/ad.conf') then - oldcount = luci.sys.exec('cat /etc/dnsmasq.ssr/ad.conf | wc -l') + if nixio.fs.access('/etc/vssr/ad.conf') then + oldcount = luci.sys.exec('cat /etc/vssr/ad.conf | wc -l') else oldcount = 0 end if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf') + luci.sys.exec('cp -f /tmp/ad.conf /etc/vssr/ad.conf') retstring = tostring(math.ceil(tonumber(icount))) if oldcount == 0 then luci.sys.call('/etc/init.d/dnsmasq restart') diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua index ceaafe3e8c..b818f61f1f 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/advanced.lua @@ -8,21 +8,21 @@ local ip_count = 0 local ad_count = 0 local server_count = 0 -if nixio.fs.access('/etc/dnsmasq.ssr/gfw_list.conf') then +if nixio.fs.access('/etc/vssr/gfw_list.conf') then gfwmode = 1 end local sys = require 'luci.sys' if gfwmode == 1 then - gfw_count = tonumber(sys.exec('cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l')) / 2 - if nixio.fs.access('/etc/dnsmasq.ssr/ad.conf') then - ad_count = tonumber(sys.exec('cat /etc/dnsmasq.ssr/ad.conf | wc -l')) + gfw_count = tonumber(sys.exec('cat /etc/vssr/gfw_list.conf | wc -l')) / 2 + if nixio.fs.access('/etc/vssr/ad.conf') then + ad_count = tonumber(sys.exec('cat /etc/vssr/ad.conf | wc -l')) end end -if nixio.fs.access('/etc/china_ssr.txt') then - ip_count = sys.exec('cat /etc/china_ssr.txt | wc -l') +if nixio.fs.access('/etc/vssr/china_ssr.txt') then + ip_count = sys.exec('cat /etc/vssr/china_ssr.txt | wc -l') end uci:foreach( diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua index 6d941e3cc3..3986eb1352 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/client.lua @@ -5,7 +5,7 @@ local m, s, sec, o, kcp_enable local vssr = 'vssr' local gfwmode = 0 -if nixio.fs.access('/etc/dnsmasq.ssr/gfw_list.conf') then +if nixio.fs.access('/etc/vssr/gfw_list.conf') then gfwmode = 1 end diff --git a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua index a3c6ecef81..e537fd5596 100644 --- a/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua +++ b/package/ctcgfw/luci-app-vssr/luasrc/model/cbi/vssr/control.lua @@ -61,7 +61,7 @@ luci.ip.neighbors( s:tab('esc', translate('Bypass Domain List')) -local escconf = '/etc/config/white.list' +local escconf = '/etc/vssr/white.list' o = s:taboption('esc', TextValue, 'escconf') o.rows = 13 o.wrap = 'off' @@ -78,7 +78,7 @@ end s:tab('block', translate('Black Domain List')) -local blockconf = '/etc/config/black.list' +local blockconf = '/etc/vssr/black.list' o = s:taboption('block', TextValue, 'blockconf') o.rows = 13 o.wrap = 'off' diff --git a/package/ctcgfw/luci-app-vssr/root/etc/config/vssr b/package/ctcgfw/luci-app-vssr/root/etc/config/vssr index c4ef824a4b..f5ef56adb0 100644 --- a/package/ctcgfw/luci-app-vssr/root/etc/config/vssr +++ b/package/ctcgfw/luci-app-vssr/root/etc/config/vssr @@ -21,7 +21,7 @@ config socks5_proxy option Socks_pass 'password' config access_control - option wan_bp_list '/etc/china_ssr.txt' + option wan_bp_list '/etc/vssr/china_ssr.txt' option lan_ac_mode 'b' option router_proxy '1' list wan_fw_ips '149.154.160.0/20' diff --git a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr index f53de9e3b3..3e37e318ff 100755 --- a/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr +++ b/package/ctcgfw/luci-app-vssr/root/etc/init.d/vssr @@ -544,7 +544,7 @@ start() { if rules; then start_redir - mkdir -p /tmp/dnsmasq.d && cp -a /etc/dnsmasq.ssr /tmp/ && cp -a /etc/dnsmasq.oversea /tmp/ + mkdir -p /tmp/dnsmasq.d && cp -a /etc/vssr/ad.conf gfw_base.conf gfw_list.conf /tmp/ && cp -a /etc/vssr/oversea_list.conf /tmp/ if ! [ "$run_mode" = "oversea" ]; then cat >/tmp/dnsmasq.d/dnsmasq-ssr.conf </tmp/dnsmasq.ssr/custom_forward.conf -awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/config/gfw.list >>/tmp/dnsmasq.ssr/custom_forward.conf +awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"gfwlist"'\n",$0)}' /etc/vssr/gfw.list >/tmp/dnsmasq.ssr/custom_forward.conf +awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/gfw.list >>/tmp/dnsmasq.ssr/custom_forward.conf -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/config/black.list >/tmp/dnsmasq.ssr/blacklist_forward.conf -awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/config/black.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf +awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/vssr/black.list >/tmp/dnsmasq.ssr/blacklist_forward.conf +awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/vssr/black.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/config/white.list >/tmp/dnsmasq.ssr/whitelist_forward.conf +awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/vssr/white.list >/tmp/dnsmasq.ssr/whitelist_forward.conf function valid_ip() { ip=$1 diff --git a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua index 097d5c24c0..a231dd358f 100644 --- a/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua +++ b/package/ctcgfw/luci-app-vssr/root/usr/share/vssr/update.lua @@ -26,9 +26,9 @@ if sret == 0 then luci.sys.call('/usr/bin/vssr-gfw') icount = luci.sys.exec('cat /tmp/gfwnew.txt | wc -l') if tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l') + oldcount = luci.sys.exec('cat /etc/vssr/gfw_list.conf | wc -l') if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf') + luci.sys.exec('cp -f /tmp/gfwnew.txt /etc/vssr/gfw_list.conf') -- retstring=tostring(math.ceil(tonumber(icount)/2)) log('更新成功! 新的总纪录数:' .. icount) else @@ -49,9 +49,9 @@ icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') if sret == 0 then icount = luci.sys.exec('cat /tmp/china_ssr.txt | wc -l') if tonumber(icount) > 1000 then - oldcount = luci.sys.exec('cat /etc/china_ssr.txt | wc -l') + oldcount = luci.sys.exec('cat /etc/vssr/china_ssr.txt | wc -l') if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/china_ssr.txt /etc/china_ssr.txt') + luci.sys.exec('cp -f /tmp/china_ssr.txt /etc/vssr/china_ssr.txt') -- retstring=tostring(math.ceil(tonumber(icount)/2)) log('更新成功! 新的总纪录数:' .. icount) else @@ -82,13 +82,13 @@ if ucic:get_first('vssr', 'global', 'adblock', '') == '1' then end icount = luci.sys.exec('cat /tmp/ad.conf | wc -l') if tonumber(icount) > 1000 then - if nixio.fs.access('/etc/dnsmasq.ssr/ad.conf') then - oldcount = luci.sys.exec('cat /etc/dnsmasq.ssr/ad.conf | wc -l') + if nixio.fs.access('/etc/vssr/ad.conf') then + oldcount = luci.sys.exec('cat /etc/vssr/ad.conf | wc -l') else oldcount = 0 end if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec('cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf') + luci.sys.exec('cp -f /tmp/ad.conf /etc/vssr/ad.conf') -- retstring=tostring(math.ceil(tonumber(icount))) if oldcount == 0 then luci.sys.call('/etc/init.d/dnsmasq restart') From dadef1694ddd0361eef3bf7365c53aacc3ee29cd Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Nov 2020 20:59:28 +0800 Subject: [PATCH 3/5] linux: rework shortcut-fe on kernel 4.9 Signed-off-by: CN_SZTL --- ...k-events-support-multiple-registrant.patch | 155 ++++-------------- 1 file changed, 34 insertions(+), 121 deletions(-) diff --git a/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch b/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch index 8d584c63d9..028d331ef1 100644 --- a/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch +++ b/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch @@ -22,25 +22,18 @@ Signed-off-by: Zhi Chen --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -70,6 +70,10 @@ struct nf_ct_event { +@@ -70,6 +70,11 @@ struct nf_ct_event { int report; }; +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+extern int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb); -+extern int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb); -+#else ++extern int nf_conntrack_register_chain_notifier(struct net *net, struct notifier_block *nb); ++extern int nf_conntrack_unregister_chain_notifier(struct net *net, struct notifier_block *nb); ++#endif ++ struct nf_ct_event_notifier { int (*fcn)(unsigned int events, struct nf_ct_event *item); }; -@@ -78,6 +82,7 @@ int nf_conntrack_register_notifier(struc - struct nf_ct_event_notifier *nb); - void nf_conntrack_unregister_notifier(struct net *net, - struct nf_ct_event_notifier *nb); -+#endif - - void nf_ct_deliver_cached_events(struct nf_conn *ct); - int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, @@ -86,11 +91,13 @@ int nf_conntrack_eventmask_report(unsign static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) @@ -84,18 +77,16 @@ Signed-off-by: Zhi Chen } --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h -@@ -86,7 +86,11 @@ struct netns_ct { +@@ -86,6 +86,9 @@ struct netns_ct { struct ct_pcpu __percpu *pcpu_lists; struct ip_conntrack_stat __percpu *stat; +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS + struct atomic_notifier_head nf_conntrack_chain; -+#else - struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; +#endif + struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; struct nf_exp_event_notifier __rcu *nf_expect_event_cb; struct nf_ip_net nf_ct_proto; - #if defined(CONFIG_NF_CONNTRACK_LABELS) --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig @@ -136,6 +136,14 @@ config NF_CONNTRACK_TIMEOUT @@ -138,143 +129,65 @@ Signed-off-by: Zhi Chen #include #include #include -@@ -117,6 +120,38 @@ static void ecache_work(struct work_stru - schedule_delayed_work(&ctnet->ecache_dwork, delay); - } +@@ -186,7 +189,11 @@ void nf_ct_deliver_cached_events(struct + rcu_read_lock(); + notify = rcu_dereference(net->ct.nf_conntrack_event_cb); +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+int -+nf_conntrack_eventmask_report(unsigned int eventmask, -+ struct nf_conn *ct, -+ u32 portid, -+ int report) -+{ -+ struct nf_conntrack_ecache *e; -+ struct net *net = nf_ct_net(ct); -+ -+ e = nf_ct_ecache_find(ct); -+ if (e == NULL) -+ return 0; -+ -+ if (nf_ct_is_confirmed(ct)) { -+ struct nf_ct_event item = { -+ .ct = ct, -+ .portid = e->portid ? e->portid : portid, -+ .report = report -+ }; -+ /* This is a resent of a destroy event? If so, skip missed */ -+ unsigned long missed = e->portid ? 0 : e->missed; -+ -+ if (!((eventmask | missed) & e->ctmask)) -+ return 0; -+ -+ atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, eventmask | missed, &item); -+ } -+ -+ return 0; -+} ++ if ((notify == NULL) && !rcu_dereference_raw(net->ct.nf_conntrack_chain.head)) +#else - int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, - u32 portid, int report) - { -@@ -171,10 +206,52 @@ out_unlock: - rcu_read_unlock(); - return ret; - } + if (notify == NULL) +#endif - EXPORT_SYMBOL_GPL(nf_conntrack_eventmask_report); + goto out_unlock; + + e = nf_ct_ecache_find(ct); +@@ -210,7 +217,16 @@ void nf_ct_deliver_cached_events(struct + item.portid = 0; + item.report = 0; - /* deliver cached events and clear cache entry - must be called with locally - * disabled softirqs */ +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+void nf_ct_deliver_cached_events(struct nf_conn *ct) -+{ -+ unsigned long events, missed; -+ struct nf_conntrack_ecache *e; -+ struct nf_ct_event item; -+ struct net *net = nf_ct_net(ct); -+ -+ e = nf_ct_ecache_find(ct); -+ if (e == NULL) -+ return; -+ -+ events = xchg(&e->cache, 0); -+ -+ if (!nf_ct_is_confirmed(ct) || nf_ct_is_dying(ct) || !events) -+ return; -+ -+ /* We make a copy of the missed event cache without taking -+ * the lock, thus we may send missed events twice. However, -+ * this does not harm and it happens very rarely. */ -+ missed = e->missed; -+ -+ if (!((events | missed) & e->ctmask)) -+ return; -+ -+ item.ct = ct; -+ item.portid = 0; -+ item.report = 0; -+ -+ atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, ++ ret = atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, + events | missed, + &item); + -+ if (likely(!missed)) -+ return; -+ -+ spin_lock_bh(&ct->lock); -+ e->missed &= ~missed; -+ spin_unlock_bh(&ct->lock); -+} ++ if (notify != NULL) ++ ret = notify->fcn(events | missed, &item); +#else - void nf_ct_deliver_cached_events(struct nf_conn *ct) - { - struct net *net = nf_ct_net(ct); -@@ -225,6 +302,7 @@ void nf_ct_deliver_cached_events(struct - out_unlock: - rcu_read_unlock(); - } + ret = notify->fcn(events | missed, &item); +#endif - EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); - void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, -@@ -257,6 +335,12 @@ out_unlock: + if (likely(ret >= 0 && !missed)) + goto out_unlock; +@@ -257,6 +273,14 @@ out_unlock: rcu_read_unlock(); } +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb) ++int nf_conntrack_register_chain_notifier(struct net *net, struct notifier_block *nb) +{ + return atomic_notifier_chain_register(&net->ct.nf_conntrack_chain, nb); +} -+#else ++EXPORT_SYMBOL_GPL(nf_conntrack_register_chain_notifier); ++#endif ++ int nf_conntrack_register_notifier(struct net *net, struct nf_ct_event_notifier *new) { -@@ -277,8 +361,15 @@ out_unlock: - mutex_unlock(&nf_ct_ecache_mutex); - return ret; +@@ -279,6 +303,14 @@ out_unlock: } -+#endif EXPORT_SYMBOL_GPL(nf_conntrack_register_notifier); +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb) ++int nf_conntrack_unregister_chain_notifier(struct net *net, struct notifier_block *nb) +{ + return atomic_notifier_chain_unregister(&net->ct.nf_conntrack_chain, nb); +} -+#else ++EXPORT_SYMBOL_GPL(nf_conntrack_unregister_chain_notifier); ++#endif ++ void nf_conntrack_unregister_notifier(struct net *net, struct nf_ct_event_notifier *new) { -@@ -292,6 +383,7 @@ void nf_conntrack_unregister_notifier(st - mutex_unlock(&nf_ct_ecache_mutex); - /* synchronize_rcu() is called from ctnetlink_exit. */ - } -+#endif - EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier); - - int nf_ct_expect_register_notifier(struct net *net, --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -28,6 +28,11 @@ From ec08c462cf6926b210487c4ceb27dc852bed2e08 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Nov 2020 21:06:36 +0800 Subject: [PATCH 4/5] Revert "linux: rework shortcut-fe on kernel 4.9" This reverts commit dadef1694ddd0361eef3bf7365c53aacc3ee29cd. --- ...k-events-support-multiple-registrant.patch | 155 ++++++++++++++---- 1 file changed, 121 insertions(+), 34 deletions(-) diff --git a/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch b/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch index 028d331ef1..8d584c63d9 100644 --- a/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch +++ b/target/linux/generic/hack-4.9/952-net-conntrack-events-support-multiple-registrant.patch @@ -22,18 +22,25 @@ Signed-off-by: Zhi Chen --- a/include/net/netfilter/nf_conntrack_ecache.h +++ b/include/net/netfilter/nf_conntrack_ecache.h -@@ -70,6 +70,11 @@ struct nf_ct_event { +@@ -70,6 +70,10 @@ struct nf_ct_event { int report; }; +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+extern int nf_conntrack_register_chain_notifier(struct net *net, struct notifier_block *nb); -+extern int nf_conntrack_unregister_chain_notifier(struct net *net, struct notifier_block *nb); -+#endif -+ ++extern int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb); ++extern int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb); ++#else struct nf_ct_event_notifier { int (*fcn)(unsigned int events, struct nf_ct_event *item); }; +@@ -78,6 +82,7 @@ int nf_conntrack_register_notifier(struc + struct nf_ct_event_notifier *nb); + void nf_conntrack_unregister_notifier(struct net *net, + struct nf_ct_event_notifier *nb); ++#endif + + void nf_ct_deliver_cached_events(struct nf_conn *ct); + int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, @@ -86,11 +91,13 @@ int nf_conntrack_eventmask_report(unsign static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, struct nf_conn *ct) @@ -77,16 +84,18 @@ Signed-off-by: Zhi Chen } --- a/include/net/netns/conntrack.h +++ b/include/net/netns/conntrack.h -@@ -86,6 +86,9 @@ struct netns_ct { +@@ -86,7 +86,11 @@ struct netns_ct { struct ct_pcpu __percpu *pcpu_lists; struct ip_conntrack_stat __percpu *stat; +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS + struct atomic_notifier_head nf_conntrack_chain; -+#endif ++#else struct nf_ct_event_notifier __rcu *nf_conntrack_event_cb; ++#endif struct nf_exp_event_notifier __rcu *nf_expect_event_cb; struct nf_ip_net nf_ct_proto; + #if defined(CONFIG_NF_CONNTRACK_LABELS) --- a/net/netfilter/Kconfig +++ b/net/netfilter/Kconfig @@ -136,6 +136,14 @@ config NF_CONNTRACK_TIMEOUT @@ -129,65 +138,143 @@ Signed-off-by: Zhi Chen #include #include #include -@@ -186,7 +189,11 @@ void nf_ct_deliver_cached_events(struct +@@ -117,6 +120,38 @@ static void ecache_work(struct work_stru + schedule_delayed_work(&ctnet->ecache_dwork, delay); + } - rcu_read_lock(); - notify = rcu_dereference(net->ct.nf_conntrack_event_cb); +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+ if ((notify == NULL) && !rcu_dereference_raw(net->ct.nf_conntrack_chain.head)) ++int ++nf_conntrack_eventmask_report(unsigned int eventmask, ++ struct nf_conn *ct, ++ u32 portid, ++ int report) ++{ ++ struct nf_conntrack_ecache *e; ++ struct net *net = nf_ct_net(ct); ++ ++ e = nf_ct_ecache_find(ct); ++ if (e == NULL) ++ return 0; ++ ++ if (nf_ct_is_confirmed(ct)) { ++ struct nf_ct_event item = { ++ .ct = ct, ++ .portid = e->portid ? e->portid : portid, ++ .report = report ++ }; ++ /* This is a resent of a destroy event? If so, skip missed */ ++ unsigned long missed = e->portid ? 0 : e->missed; ++ ++ if (!((eventmask | missed) & e->ctmask)) ++ return 0; ++ ++ atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, eventmask | missed, &item); ++ } ++ ++ return 0; ++} +#else - if (notify == NULL) + int nf_conntrack_eventmask_report(unsigned int eventmask, struct nf_conn *ct, + u32 portid, int report) + { +@@ -171,10 +206,52 @@ out_unlock: + rcu_read_unlock(); + return ret; + } +#endif - goto out_unlock; - - e = nf_ct_ecache_find(ct); -@@ -210,7 +217,16 @@ void nf_ct_deliver_cached_events(struct - item.portid = 0; - item.report = 0; + EXPORT_SYMBOL_GPL(nf_conntrack_eventmask_report); + /* deliver cached events and clear cache entry - must be called with locally + * disabled softirqs */ +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+ ret = atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, ++void nf_ct_deliver_cached_events(struct nf_conn *ct) ++{ ++ unsigned long events, missed; ++ struct nf_conntrack_ecache *e; ++ struct nf_ct_event item; ++ struct net *net = nf_ct_net(ct); ++ ++ e = nf_ct_ecache_find(ct); ++ if (e == NULL) ++ return; ++ ++ events = xchg(&e->cache, 0); ++ ++ if (!nf_ct_is_confirmed(ct) || nf_ct_is_dying(ct) || !events) ++ return; ++ ++ /* We make a copy of the missed event cache without taking ++ * the lock, thus we may send missed events twice. However, ++ * this does not harm and it happens very rarely. */ ++ missed = e->missed; ++ ++ if (!((events | missed) & e->ctmask)) ++ return; ++ ++ item.ct = ct; ++ item.portid = 0; ++ item.report = 0; ++ ++ atomic_notifier_call_chain(&net->ct.nf_conntrack_chain, + events | missed, + &item); + -+ if (notify != NULL) -+ ret = notify->fcn(events | missed, &item); ++ if (likely(!missed)) ++ return; ++ ++ spin_lock_bh(&ct->lock); ++ e->missed &= ~missed; ++ spin_unlock_bh(&ct->lock); ++} +#else - ret = notify->fcn(events | missed, &item); + void nf_ct_deliver_cached_events(struct nf_conn *ct) + { + struct net *net = nf_ct_net(ct); +@@ -225,6 +302,7 @@ void nf_ct_deliver_cached_events(struct + out_unlock: + rcu_read_unlock(); + } +#endif + EXPORT_SYMBOL_GPL(nf_ct_deliver_cached_events); - if (likely(ret >= 0 && !missed)) - goto out_unlock; -@@ -257,6 +273,14 @@ out_unlock: + void nf_ct_expect_event_report(enum ip_conntrack_expect_events event, +@@ -257,6 +335,12 @@ out_unlock: rcu_read_unlock(); } +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+int nf_conntrack_register_chain_notifier(struct net *net, struct notifier_block *nb) ++int nf_conntrack_register_notifier(struct net *net, struct notifier_block *nb) +{ + return atomic_notifier_chain_register(&net->ct.nf_conntrack_chain, nb); +} -+EXPORT_SYMBOL_GPL(nf_conntrack_register_chain_notifier); -+#endif -+ ++#else int nf_conntrack_register_notifier(struct net *net, struct nf_ct_event_notifier *new) { -@@ -279,6 +303,14 @@ out_unlock: +@@ -277,8 +361,15 @@ out_unlock: + mutex_unlock(&nf_ct_ecache_mutex); + return ret; } ++#endif EXPORT_SYMBOL_GPL(nf_conntrack_register_notifier); +#ifdef CONFIG_NF_CONNTRACK_CHAIN_EVENTS -+int nf_conntrack_unregister_chain_notifier(struct net *net, struct notifier_block *nb) ++int nf_conntrack_unregister_notifier(struct net *net, struct notifier_block *nb) +{ + return atomic_notifier_chain_unregister(&net->ct.nf_conntrack_chain, nb); +} -+EXPORT_SYMBOL_GPL(nf_conntrack_unregister_chain_notifier); -+#endif -+ ++#else void nf_conntrack_unregister_notifier(struct net *net, struct nf_ct_event_notifier *new) { +@@ -292,6 +383,7 @@ void nf_conntrack_unregister_notifier(st + mutex_unlock(&nf_ct_ecache_mutex); + /* synchronize_rcu() is called from ctnetlink_exit. */ + } ++#endif + EXPORT_SYMBOL_GPL(nf_conntrack_unregister_notifier); + + int nf_ct_expect_register_notifier(struct net *net, --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c @@ -28,6 +28,11 @@ From 53abfa009a500bd5765bf81ac43fb82cb51c6ec9 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Sat, 28 Nov 2020 21:09:07 +0800 Subject: [PATCH 5/5] Revert "cmake.mk: set C/CXX compiler for host builds as well" This reverts commit 929a4e94d02cc51f5acaceaad242bc663beff59d. --- include/cmake.mk | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/cmake.mk b/include/cmake.mk index 3646c3d939..77d85af1fa 100644 --- a/include/cmake.mk +++ b/include/cmake.mk @@ -86,8 +86,6 @@ define Host/Configure/Default LDFLAGS="$(HOST_LDFLAGS)" \ cmake \ -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_C_COMPILER="$(HOSTCC)" \ - -DCMAKE_CXX_COMPILER="$(HOSTCXX)" \ -DCMAKE_C_FLAGS_RELEASE="-DNDEBUG" \ -DCMAKE_CXX_FLAGS_RELEASE="-DNDEBUG" \ -DCMAKE_EXE_LINKER_FLAGS:STRING="$(HOST_LDFLAGS)" \