From 860af3e3e649f99265597641513b6b2270fd423b Mon Sep 17 00:00:00 2001 From: Lucas Asvio Date: Sun, 2 Jun 2024 08:28:57 +0200 Subject: [PATCH] kernel: ipq806x: refresh qca-nss patches to kernel 5.15.150 --- ...entries-in-dts-files-for-NSS-support.patch | 36 +- .../patches-5.15/999-004-fix-socinfo.patch | 4 +- .../999-100-qca-nss-ecm-support-CORE.patch | 74 ++--- ...nss-ecm-add-chain-events-dscp-remark.patch | 2 +- ...99-102-qca-nss-ecm-add-pppoe-offload.patch | 12 +- .../999-103-qca-nss-ecm-add-bridge-mgr.patch | 14 +- .../999-104-qca-nss-ecm-add-bonding.patch | 10 +- .../999-200-qca-nss-drv-qdisc-support.patch | 4 +- ...99-201-qca-nss-clients-qdisc-support.patch | 12 +- ...999-202-qca-nss-clients-l2tp-support.patch | 2 +- ...204-qca-nss-clients-iptunnel-support.patch | 6 +- ...99-205-qca-nss-clients-vxlan-support.patch | 6 +- ...-nss-clients-l2tp-offloading-support.patch | 308 ++++++++---------- ...a-nss-clients-iptunnel-lock-this-cpu.patch | 12 +- .../999-300-qca-mcs-support.patch | 28 +- .../999-500-qca-nss-cfi-support.patch | 8 +- .../999-600-disable-unused-nss-feat.patch | 4 +- ...999-800-qca-nss-ecm-12.1-drop-unused.patch | 12 +- 18 files changed, 260 insertions(+), 294 deletions(-) diff --git a/target/linux/ipq806x/patches-5.15/990-000-Add-required-entries-in-dts-files-for-NSS-support.patch b/target/linux/ipq806x/patches-5.15/990-000-Add-required-entries-in-dts-files-for-NSS-support.patch index d7876a546f..27e0715693 100644 --- a/target/linux/ipq806x/patches-5.15/990-000-Add-required-entries-in-dts-files-for-NSS-support.patch +++ b/target/linux/ipq806x/patches-5.15/990-000-Add-required-entries-in-dts-files-for-NSS-support.patch @@ -145,7 +145,7 @@ sdcc1bam: dma@12402000 { compatible = "qcom,bam-v1.3.0"; reg = <0x12402000 0x8000>; -@@ -1554,6 +1685,20 @@ +@@ -1553,6 +1684,20 @@ dmas = <&sdcc3bam 2>, <&sdcc3bam 1>; dma-names = "tx", "rx"; }; @@ -166,7 +166,7 @@ }; sfpb_mutex: hwlock@1200600 { -@@ -1564,3 +1709,27 @@ +@@ -1563,3 +1708,27 @@ }; }; }; @@ -214,7 +214,7 @@ --- a/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi +++ b/arch/arm/boot/dts/qcom-ipq8064-eax500.dtsi -@@ -170,10 +170,17 @@ +@@ -198,10 +198,17 @@ 0x00094 0x4e /* PORT6_STATUS */ >; }; @@ -232,7 +232,7 @@ phy-mode = "rgmii"; qcom,id = <1>; -@@ -189,6 +196,9 @@ +@@ -217,6 +224,9 @@ &gmac2 { status = "okay"; @@ -265,7 +265,7 @@ -}; --- a/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi +++ b/arch/arm/boot/dts/qcom-ipq8064-ad7200-c2600.dtsi -@@ -330,6 +330,9 @@ +@@ -357,6 +357,9 @@ &gmac1 { status = "okay"; @@ -275,7 +275,7 @@ phy-mode = "rgmii"; qcom,id = <1>; -@@ -348,6 +351,9 @@ +@@ -375,6 +378,9 @@ &gmac2 { status = "okay"; @@ -287,7 +287,7 @@ --- a/arch/arm/boot/dts/qcom-ipq8064-r7500.dts +++ b/arch/arm/boot/dts/qcom-ipq8064-r7500.dts -@@ -258,6 +258,9 @@ +@@ -274,6 +274,9 @@ &gmac1 { status = "okay"; @@ -297,7 +297,7 @@ phy-mode = "rgmii"; qcom,id = <1>; -@@ -275,6 +278,9 @@ +@@ -291,6 +294,9 @@ &gmac2 { status = "okay"; @@ -309,7 +309,7 @@ --- a/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts +++ b/arch/arm/boot/dts/qcom-ipq8064-r7500v2.dts -@@ -341,6 +341,9 @@ +@@ -357,6 +357,9 @@ &gmac1 { status = "okay"; @@ -319,7 +319,7 @@ phy-mode = "rgmii"; qcom,id = <1>; -@@ -358,6 +361,9 @@ +@@ -374,6 +377,9 @@ &gmac2 { status = "okay"; @@ -331,7 +331,7 @@ --- a/arch/arm/boot/dts/qcom-ipq8064-d7800.dts +++ b/arch/arm/boot/dts/qcom-ipq8064-d7800.dts -@@ -344,6 +344,9 @@ +@@ -360,6 +360,9 @@ &gmac1 { status = "okay"; @@ -341,7 +341,7 @@ phy-mode = "rgmii"; qcom,id = <1>; -@@ -361,6 +364,9 @@ +@@ -377,6 +380,9 @@ &gmac2 { status = "okay"; @@ -416,9 +416,9 @@ pinctrl-0 = <&mdio0_pins>; pinctrl-names = "default"; -@@ -224,10 +252,14 @@ - */ - }; +@@ -170,10 +198,14 @@ + 0x00094 0x4e /* PORT6_STATUS */ + >; }; + }; @@ -431,7 +431,7 @@ nand@0 { reg = <0>; -@@ -261,6 +293,7 @@ +@@ -207,6 +239,7 @@ qcom,ath10k-calibration-variant = "ASRock-G10"; }; }; @@ -578,7 +578,7 @@ --- a/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts +++ b/arch/arm/boot/dts/qcom-ipq8065-nbg6817.dts -@@ -268,13 +268,23 @@ +@@ -284,13 +284,23 @@ &gmac1 { status = "okay"; @@ -602,7 +602,7 @@ qcom,irq = <255>; mdiobus = <&mdio0>; -@@ -289,13 +299,23 @@ +@@ -305,13 +315,23 @@ &gmac2 { status = "okay"; diff --git a/target/linux/ipq806x/patches-5.15/999-004-fix-socinfo.patch b/target/linux/ipq806x/patches-5.15/999-004-fix-socinfo.patch index 9ce5de00c7..12b2a078ce 100644 --- a/target/linux/ipq806x/patches-5.15/999-004-fix-socinfo.patch +++ b/target/linux/ipq806x/patches-5.15/999-004-fix-socinfo.patch @@ -1,5 +1,5 @@ ---- a/drivers/soc/qcom/socinfo.c 2022-11-07 08:55:57.097003500 +0900 -+++ b/drivers/soc/qcom/socinfo.c 2022-11-07 09:03:58.447003500 +0900 +--- a/drivers/soc/qcom/socinfo.c ++++ b/drivers/soc/qcom/socinfo.c @@ -230,6 +230,7 @@ static const struct soc_id soc_id[] = { { 198, "MSM8126" }, { 199, "APQ8026" }, diff --git a/target/linux/ipq806x/patches-5.15/999-100-qca-nss-ecm-support-CORE.patch b/target/linux/ipq806x/patches-5.15/999-100-qca-nss-ecm-support-CORE.patch index 8b9ce69de1..f70807c832 100644 --- a/target/linux/ipq806x/patches-5.15/999-100-qca-nss-ecm-support-CORE.patch +++ b/target/linux/ipq806x/patches-5.15/999-100-qca-nss-ecm-support-CORE.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -69,6 +69,7 @@ void brioctl_set(int (*hook)(struct net +@@ -68,6 +68,7 @@ void brioctl_set(int (*hook)(struct net void __user *uarg)); int br_ioctl_call(struct net *net, struct net_bridge *br, unsigned int cmd, struct ifreq *ifr, void __user *uarg); @@ -8,7 +8,7 @@ #if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING) int br_multicast_list_adjacent(struct net_device *dev, -@@ -192,4 +193,42 @@ static inline clock_t br_get_ageing_time +@@ -191,4 +192,42 @@ static inline clock_t br_get_ageing_time } #endif @@ -53,7 +53,7 @@ #endif --- a/include/linux/if_vlan.h +++ b/include/linux/if_vlan.h -@@ -222,7 +222,12 @@ extern void vlan_vids_del_by_dev(struct +@@ -230,7 +230,12 @@ extern void vlan_vids_del_by_dev(struct extern bool vlan_uses_dev(const struct net_device *dev); @@ -68,7 +68,7 @@ __be16 vlan_proto, u16 vlan_id) --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -1713,6 +1713,27 @@ enum netdev_ml_priv_type { +@@ -1724,6 +1724,27 @@ enum netdev_ml_priv_type { ML_PRIV_CAN, }; @@ -96,7 +96,7 @@ /** * struct net_device - The DEVICE structure. * -@@ -2848,6 +2869,10 @@ enum netdev_cmd { +@@ -2855,6 +2876,10 @@ enum netdev_cmd { NETDEV_CVLAN_FILTER_DROP_INFO, NETDEV_SVLAN_FILTER_PUSH_INFO, NETDEV_SVLAN_FILTER_DROP_INFO, @@ -123,7 +123,7 @@ const struct dst_entry *dst = skb_dst(skb); --- a/include/net/neighbour.h +++ b/include/net/neighbour.h -@@ -574,4 +574,15 @@ static inline void neigh_update_is_route +@@ -567,4 +567,15 @@ static inline void neigh_update_is_route *notify = 1; } } @@ -155,7 +155,7 @@ void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *); --- a/net/8021q/vlan_core.c +++ b/net/8021q/vlan_core.c -@@ -556,4 +556,12 @@ static int __init vlan_offload_init(void +@@ -563,4 +563,12 @@ static int __init vlan_offload_init(void return 0; } @@ -170,7 +170,7 @@ fs_initcall(vlan_offload_init); --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c -@@ -38,6 +38,35 @@ static int fdb_insert(struct net_bridge +@@ -37,6 +37,35 @@ static int fdb_insert(struct net_bridge static void fdb_notify(struct net_bridge *br, const struct net_bridge_fdb_entry *, int, bool); @@ -206,7 +206,7 @@ int __init br_fdb_init(void) { br_fdb_cache = kmem_cache_create("bridge_fdb_cache", -@@ -343,6 +372,7 @@ void br_fdb_cleanup(struct work_struct * +@@ -342,6 +371,7 @@ void br_fdb_cleanup(struct work_struct * unsigned long delay = hold_time(br); unsigned long work_delay = delay; unsigned long now = jiffies; @@ -214,7 +214,7 @@ /* this part is tricky, in order to avoid blocking learning and * consequently forwarding, we rely on rcu to delete objects with -@@ -369,8 +399,15 @@ void br_fdb_cleanup(struct work_struct * +@@ -368,8 +398,15 @@ void br_fdb_cleanup(struct work_struct * work_delay = min(work_delay, this_timer - now); } else { spin_lock_bh(&br->hash_lock); @@ -231,7 +231,7 @@ spin_unlock_bh(&br->hash_lock); } } -@@ -618,6 +655,12 @@ void br_fdb_update(struct net_bridge *br +@@ -615,6 +652,12 @@ void br_fdb_update(struct net_bridge *br &fdb->flags))) clear_bit(BR_FDB_ADDED_BY_EXT_LEARN, &fdb->flags); @@ -244,9 +244,9 @@ } if (unlikely(test_bit(BR_FDB_ADDED_BY_USER, &flags))) -@@ -799,6 +842,25 @@ static void fdb_notify(struct net_bridge - - br_offload_fdb_update(fdb); +@@ -794,6 +837,25 @@ static void fdb_notify(struct net_bridge + struct sk_buff *skb; + int err = -ENOBUFS; + /* QCA NSS ECM support - Start */ + if (fdb->dst) { @@ -270,7 +270,7 @@ if (swdev_notify) br_switchdev_fdb_notify(br, fdb, type); -@@ -1382,3 +1444,62 @@ void br_fdb_clear_offload(const struct n +@@ -1377,3 +1439,62 @@ void br_fdb_clear_offload(const struct n spin_unlock_bh(&p->br->hash_lock); } EXPORT_SYMBOL_GPL(br_fdb_clear_offload); @@ -343,9 +343,9 @@ #include #include #include -@@ -27,6 +28,12 @@ +@@ -26,6 +27,12 @@ + #include "br_private.h" - #include "br_private_offload.h" +/* QCA NSS ECM support - Start */ +/* Hook for external forwarding logic */ @@ -374,7 +374,7 @@ /* Since more than one interface can be attached to a bridge, * there still maybe an alternate path for netconsole to use; * therefore there is no reason for a NETDEV_RELEASE event. -@@ -788,3 +799,75 @@ bool br_port_flag_is_set(const struct ne +@@ -785,3 +796,75 @@ bool br_port_flag_is_set(const struct ne return p->flags & flag; } EXPORT_SYMBOL_GPL(br_port_flag_is_set); @@ -452,7 +452,7 @@ +/* QCA NSS ECM support - End */ --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -2120,4 +2120,9 @@ void br_do_proxy_suppress_arp(struct sk_ +@@ -2100,4 +2100,9 @@ void br_do_proxy_suppress_arp(struct sk_ void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br, u16 vid, struct net_bridge_port *p, struct nd_msg *msg); struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m); @@ -464,7 +464,7 @@ #endif --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -1685,7 +1685,7 @@ const char *netdev_cmd_to_name(enum netd +@@ -1690,7 +1690,7 @@ const char *netdev_cmd_to_name(enum netd N(UDP_TUNNEL_DROP_INFO) N(CHANGE_TX_QUEUE_LEN) N(CVLAN_FILTER_PUSH_INFO) N(CVLAN_FILTER_DROP_INFO) N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO) @@ -475,7 +475,7 @@ return "UNKNOWN_NETDEV_EVENT"; --- a/net/core/neighbour.c +++ b/net/core/neighbour.c -@@ -1219,7 +1219,21 @@ static void neigh_update_hhs(struct neig +@@ -1211,7 +1211,21 @@ static void neigh_update_hhs(struct neig } } @@ -497,7 +497,7 @@ /* Generic update routine. -- lladdr is new lladdr or NULL, if it is not supplied. -@@ -1250,6 +1264,7 @@ static int __neigh_update(struct neighbo +@@ -1242,6 +1256,7 @@ static int __neigh_update(struct neighbo int notify = 0; struct net_device *dev; int update_isrouter = 0; @@ -505,7 +505,7 @@ trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid); -@@ -1264,6 +1279,8 @@ static int __neigh_update(struct neighbo +@@ -1256,6 +1271,8 @@ static int __neigh_update(struct neighbo new = old; goto out; } @@ -514,7 +514,7 @@ if (!(flags & NEIGH_UPDATE_F_ADMIN) && (old & (NUD_NOARP | NUD_PERMANENT))) goto out; -@@ -1301,6 +1318,11 @@ static int __neigh_update(struct neighbo +@@ -1293,6 +1310,11 @@ static int __neigh_update(struct neighbo - compare new & old - if they are different, check override flag */ @@ -526,7 +526,7 @@ if ((old & NUD_VALID) && !memcmp(lladdr, neigh->ha, dev->addr_len)) lladdr = neigh->ha; -@@ -1423,8 +1445,11 @@ out: +@@ -1415,8 +1437,11 @@ out: if (((new ^ old) & NUD_PERMANENT) || ext_learn_change) neigh_update_gc_list(neigh); @@ -551,7 +551,7 @@ /* Caller must hold RTNL. */ int fib_table_insert(struct net *net, struct fib_table *tb, struct fib_config *cfg, struct netlink_ext_ack *extack) -@@ -1396,6 +1399,9 @@ int fib_table_insert(struct net *net, st +@@ -1398,6 +1401,9 @@ int fib_table_insert(struct net *net, st rtmsg_fib(RTM_NEWROUTE, htonl(key), new_fa, plen, new_fa->tb_id, &cfg->fc_nlinfo, nlflags); succeeded: @@ -561,7 +561,7 @@ return 0; out_remove_new_fa: -@@ -1766,6 +1772,9 @@ int fib_table_delete(struct net *net, st +@@ -1769,6 +1775,9 @@ int fib_table_delete(struct net *net, st if (fa_to_delete->fa_state & FA_S_ACCESSED) rt_cache_flush(cfg->fc_nlinfo.nl_net); @@ -571,7 +571,7 @@ fib_release_info(fa_to_delete->fa_info); alias_free_mem_rcu(fa_to_delete); return 0; -@@ -2394,6 +2403,20 @@ void __init fib_trie_init(void) +@@ -2401,6 +2410,20 @@ void __init fib_trie_init(void) 0, SLAB_PANIC | SLAB_ACCOUNT, NULL); } @@ -594,7 +594,7 @@ struct fib_table *tb; --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c -@@ -987,6 +987,7 @@ void inet6_ifa_finish_destroy(struct ine +@@ -1003,6 +1003,7 @@ void inet6_ifa_finish_destroy(struct ine kfree_rcu(ifp, rcu); } @@ -602,7 +602,7 @@ static void ipv6_link_dev_addr(struct inet6_dev *idev, struct inet6_ifaddr *ifp) -@@ -2048,6 +2049,7 @@ struct inet6_ifaddr *ipv6_get_ifaddr(str +@@ -2064,6 +2065,7 @@ struct inet6_ifaddr *ipv6_get_ifaddr(str return result; } @@ -612,7 +612,7 @@ --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c -@@ -649,6 +649,7 @@ void ndisc_send_ns(struct net_device *de +@@ -650,6 +650,7 @@ void ndisc_send_ns(struct net_device *de ndisc_send_skb(skb, daddr, saddr); } @@ -622,7 +622,7 @@ const struct in6_addr *daddr) --- a/net/ipv6/route.c +++ b/net/ipv6/route.c -@@ -3878,6 +3878,9 @@ out_free: +@@ -3875,6 +3875,9 @@ out_free: return ERR_PTR(err); } @@ -632,7 +632,7 @@ int ip6_route_add(struct fib6_config *cfg, gfp_t gfp_flags, struct netlink_ext_ack *extack) { -@@ -3889,6 +3892,10 @@ int ip6_route_add(struct fib6_config *cf +@@ -3886,6 +3889,10 @@ int ip6_route_add(struct fib6_config *cf return PTR_ERR(rt); err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, extack); @@ -643,7 +643,7 @@ fib6_info_release(rt); return err; -@@ -3910,6 +3917,9 @@ static int __ip6_del_rt(struct fib6_info +@@ -3907,6 +3914,9 @@ static int __ip6_del_rt(struct fib6_info err = fib6_del(rt, info); spin_unlock_bh(&table->tb6_lock); @@ -653,7 +653,7 @@ out: fib6_info_release(rt); return err; -@@ -6352,6 +6362,20 @@ static int ip6_route_dev_notify(struct n +@@ -6350,6 +6360,20 @@ static int ip6_route_dev_notify(struct n return NOTIFY_OK; } @@ -676,7 +676,7 @@ */ --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c -@@ -1934,6 +1934,7 @@ static void ip6gre_tap_setup(struct net_ +@@ -1940,6 +1940,7 @@ static void ip6gre_tap_setup(struct net_ dev->priv_flags &= ~IFF_TX_SKB_SHARING; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; @@ -686,7 +686,7 @@ --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c -@@ -1333,6 +1333,7 @@ static void ipgre_tap_setup(struct net_d +@@ -1336,6 +1336,7 @@ static void ipgre_tap_setup(struct net_d dev->netdev_ops = &gre_tap_netdev_ops; dev->priv_flags &= ~IFF_TX_SKB_SHARING; dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; diff --git a/target/linux/ipq806x/patches-5.15/999-101-qca-nss-ecm-add-chain-events-dscp-remark.patch b/target/linux/ipq806x/patches-5.15/999-101-qca-nss-ecm-add-chain-events-dscp-remark.patch index b0326a9b85..0a11cd1ab1 100644 --- a/target/linux/ipq806x/patches-5.15/999-101-qca-nss-ecm-add-chain-events-dscp-remark.patch +++ b/target/linux/ipq806x/patches-5.15/999-101-qca-nss-ecm-add-chain-events-dscp-remark.patch @@ -91,7 +91,7 @@ depends on NETFILTER_ADVANCED --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c -@@ -2877,6 +2877,9 @@ int nf_conntrack_init_net(struct net *ne +@@ -2888,6 +2888,9 @@ int nf_conntrack_init_net(struct net *ne nf_conntrack_ecache_pernet_init(net); nf_conntrack_helper_pernet_init(net); nf_conntrack_proto_pernet_init(net); diff --git a/target/linux/ipq806x/patches-5.15/999-102-qca-nss-ecm-add-pppoe-offload.patch b/target/linux/ipq806x/patches-5.15/999-102-qca-nss-ecm-add-pppoe-offload.patch index b658912144..273fc5a0ac 100644 --- a/target/linux/ipq806x/patches-5.15/999-102-qca-nss-ecm-add-pppoe-offload.patch +++ b/target/linux/ipq806x/patches-5.15/999-102-qca-nss-ecm-add-pppoe-offload.patch @@ -48,7 +48,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel /* Prototypes. */ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf, struct file *file, unsigned int cmd, unsigned long arg); -@@ -3450,7 +3470,10 @@ ppp_connect_channel(struct channel *pch, +@@ -3452,7 +3472,10 @@ ppp_connect_channel(struct channel *pch, struct ppp_net *pn; int ret = -ENXIO; int hdrlen; @@ -59,7 +59,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel pn = ppp_pernet(pch->chan_net); mutex_lock(&pn->all_ppp_mutex); -@@ -3482,13 +3505,40 @@ ppp_connect_channel(struct channel *pch, +@@ -3484,13 +3507,40 @@ ppp_connect_channel(struct channel *pch, ++ppp->n_channels; pch->ppp = ppp; refcount_inc(&ppp->file.refcnt); @@ -101,7 +101,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel return ret; } -@@ -3506,6 +3556,13 @@ ppp_disconnect_channel(struct channel *p +@@ -3508,6 +3558,13 @@ ppp_disconnect_channel(struct channel *p pch->ppp = NULL; write_unlock_bh(&pch->upl); if (ppp) { @@ -115,7 +115,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel /* remove it from the ppp unit's list */ ppp_lock(ppp); list_del(&pch->clist); -@@ -3585,6 +3642,222 @@ static void *unit_find(struct idr *p, in +@@ -3587,6 +3644,222 @@ static void *unit_find(struct idr *p, in return idr_find(p, n); } @@ -338,7 +338,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel /* Module/initialization stuff */ module_init(ppp_init); -@@ -3601,6 +3874,7 @@ EXPORT_SYMBOL(ppp_input_error); +@@ -3603,6 +3876,7 @@ EXPORT_SYMBOL(ppp_input_error); EXPORT_SYMBOL(ppp_output_wakeup); EXPORT_SYMBOL(ppp_register_compressor); EXPORT_SYMBOL(ppp_unregister_compressor); @@ -480,7 +480,7 @@ Subject: [PATCH] Update 602-qca-add-pppoe-offload-support.patch for kernel #endif /* !(__LINUX_IF_PPPOX_H) */ --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -2029,6 +2029,7 @@ struct net_device { +@@ -2039,6 +2039,7 @@ struct net_device { unsigned int flags; unsigned int priv_flags; unsigned int extra_priv_flags; diff --git a/target/linux/ipq806x/patches-5.15/999-103-qca-nss-ecm-add-bridge-mgr.patch b/target/linux/ipq806x/patches-5.15/999-103-qca-nss-ecm-add-bridge-mgr.patch index e3299480ca..1c163b5f9a 100644 --- a/target/linux/ipq806x/patches-5.15/999-103-qca-nss-ecm-add-bridge-mgr.patch +++ b/target/linux/ipq806x/patches-5.15/999-103-qca-nss-ecm-add-bridge-mgr.patch @@ -11,7 +11,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -231,4 +231,8 @@ typedef struct net_bridge_port *br_get_d +@@ -230,4 +230,8 @@ typedef struct net_bridge_port *br_get_d extern br_get_dst_hook_t __rcu *br_get_dst_hook; /* QCA NSS ECM support - End */ @@ -22,7 +22,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for #endif --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c -@@ -67,6 +67,15 @@ void br_fdb_update_unregister_notify(str +@@ -66,6 +66,15 @@ void br_fdb_update_unregister_notify(str EXPORT_SYMBOL_GPL(br_fdb_update_unregister_notify); /* QCA NSS ECM support - End */ @@ -38,7 +38,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for int __init br_fdb_init(void) { br_fdb_cache = kmem_cache_create("bridge_fdb_cache", -@@ -372,7 +381,7 @@ void br_fdb_cleanup(struct work_struct * +@@ -371,7 +380,7 @@ void br_fdb_cleanup(struct work_struct * unsigned long delay = hold_time(br); unsigned long work_delay = delay; unsigned long now = jiffies; @@ -47,7 +47,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for /* this part is tricky, in order to avoid blocking learning and * consequently forwarding, we rely on rcu to delete objects with -@@ -400,12 +409,13 @@ void br_fdb_cleanup(struct work_struct * +@@ -399,12 +408,13 @@ void br_fdb_cleanup(struct work_struct * } else { spin_lock_bh(&br->hash_lock); if (!hlist_unhashed(&f->fdb_node)) { @@ -63,7 +63,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for /* QCA NSS ECM support - End */ } spin_unlock_bh(&br->hash_lock); -@@ -623,6 +633,7 @@ void br_fdb_update(struct net_bridge *br +@@ -620,6 +630,7 @@ void br_fdb_update(struct net_bridge *br const unsigned char *addr, u16 vid, unsigned long flags) { struct net_bridge_fdb_entry *fdb; @@ -71,7 +71,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for /* some users want to always flood. */ if (hold_time(br) == 0) -@@ -648,6 +659,12 @@ void br_fdb_update(struct net_bridge *br +@@ -645,6 +656,12 @@ void br_fdb_update(struct net_bridge *br if (unlikely(source != READ_ONCE(fdb->dst) && !test_bit(BR_FDB_STICKY, &fdb->flags))) { br_switchdev_fdb_notify(br, fdb, RTM_DELNEIGH); @@ -84,7 +84,7 @@ Subject: [PATCH] Update 605-qca-add-add-nss-bridge-mgr-support.patch for WRITE_ONCE(fdb->dst, source); fdb_modified = true; /* Take over HW learned entry */ -@@ -659,7 +676,7 @@ void br_fdb_update(struct net_bridge *br +@@ -656,7 +673,7 @@ void br_fdb_update(struct net_bridge *br /* QCA NSS ECM support - Start */ atomic_notifier_call_chain( &br_fdb_update_notifier_list, diff --git a/target/linux/ipq806x/patches-5.15/999-104-qca-nss-ecm-add-bonding.patch b/target/linux/ipq806x/patches-5.15/999-104-qca-nss-ecm-add-bonding.patch index a1e13b52b6..5480ae6316 100644 --- a/target/linux/ipq806x/patches-5.15/999-104-qca-nss-ecm-add-bonding.patch +++ b/target/linux/ipq806x/patches-5.15/999-104-qca-nss-ecm-add-bonding.patch @@ -10,7 +10,7 @@ static struct flow_dissector flow_keys_bonding __read_mostly; /*-------------------------- Forward declarations ---------------------------*/ -@@ -4060,6 +4063,23 @@ static int bond_get_lowest_level_rcu(str +@@ -4115,6 +4118,23 @@ static int bond_get_lowest_level_rcu(str } #endif @@ -34,7 +34,7 @@ static void bond_get_stats(struct net_device *bond_dev, struct rtnl_link_stats64 *stats) { -@@ -5392,6 +5412,10 @@ static void bond_destructor(struct net_d +@@ -5447,6 +5467,10 @@ static void bond_destructor(struct net_d if (bond->rr_tx_counter) free_percpu(bond->rr_tx_counter); @@ -45,7 +45,7 @@ } void bond_setup(struct net_device *bond_dev) -@@ -5969,7 +5993,14 @@ int bond_create(struct net *net, const c +@@ -6020,7 +6044,14 @@ int bond_create(struct net *net, const c bond_work_init_all(bond); @@ -63,7 +63,7 @@ --- a/include/net/bonding.h +++ b/include/net/bonding.h -@@ -255,6 +255,7 @@ struct bonding { +@@ -257,6 +257,7 @@ struct bonding { spinlock_t ipsec_lock; #endif /* CONFIG_XFRM_OFFLOAD */ struct bpf_prog *xdp_prog; @@ -71,7 +71,7 @@ }; #define bond_slave_get_rcu(dev) \ -@@ -629,6 +630,7 @@ struct bond_net { +@@ -631,6 +632,7 @@ struct bond_net { int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave); netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev); diff --git a/target/linux/ipq806x/patches-5.15/999-200-qca-nss-drv-qdisc-support.patch b/target/linux/ipq806x/patches-5.15/999-200-qca-nss-drv-qdisc-support.patch index 61c71d9f59..32de66d465 100644 --- a/target/linux/ipq806x/patches-5.15/999-200-qca-nss-drv-qdisc-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-200-qca-nss-drv-qdisc-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h -@@ -687,6 +687,7 @@ typedef unsigned char *sk_buff_data_t; +@@ -689,6 +689,7 @@ typedef unsigned char *sk_buff_data_t; * @offload_fwd_mark: Packet was L2-forwarded in hardware * @offload_l3_fwd_mark: Packet was L3-forwarded in hardware * @tc_skip_classify: do not classify packet. set by IFB device @@ -8,7 +8,7 @@ * @tc_at_ingress: used within tc_classify to distinguish in/egress * @redirected: packet was redirected by packet classifier * @from_ingress: packet was redirected from the ingress path -@@ -902,6 +903,8 @@ struct sk_buff { +@@ -905,6 +906,8 @@ struct sk_buff { #ifdef CONFIG_NET_CLS_ACT __u8 tc_skip_classify:1; __u8 tc_at_ingress:1; diff --git a/target/linux/ipq806x/patches-5.15/999-201-qca-nss-clients-qdisc-support.patch b/target/linux/ipq806x/patches-5.15/999-201-qca-nss-clients-qdisc-support.patch index e0911132f0..b2f3f4b15c 100644 --- a/target/linux/ipq806x/patches-5.15/999-201-qca-nss-clients-qdisc-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-201-qca-nss-clients-qdisc-support.patch @@ -52,7 +52,7 @@ dev->needs_free_netdev = true; --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -4749,6 +4749,15 @@ void dev_uc_flush(struct net_device *dev +@@ -4758,6 +4758,15 @@ void dev_uc_flush(struct net_device *dev void dev_uc_init(struct net_device *dev); /** @@ -68,7 +68,7 @@ * __dev_uc_sync - Synchonize device's unicast list * @dev: device to sync * @sync: function to call if address should be added -@@ -5298,6 +5307,11 @@ static inline bool netif_is_failover_sla +@@ -5316,6 +5325,11 @@ static inline bool netif_is_failover_sla return dev->priv_flags & IFF_FAILOVER_SLAVE; } @@ -333,7 +333,7 @@ #endif --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c -@@ -2304,4 +2304,26 @@ static int __init pktsched_init(void) +@@ -2351,4 +2351,26 @@ static int __init pktsched_init(void) return 0; } @@ -430,9 +430,9 @@ /* Reset all TX qdiscs greater than index of a device. */ static inline void qdisc_reset_all_tx_gt(struct net_device *dev, unsigned int i) { -@@ -1336,4 +1371,9 @@ void mini_qdisc_pair_block_init(struct m - - int sch_frag_xmit_hook(struct sk_buff *skb, int (*xmit)(struct sk_buff *skb)); +@@ -1342,4 +1377,9 @@ static inline void qdisc_synchronize(con + msleep(1); + } +/* QCA NSS Qdisc Support - Start */ +void qdisc_destroy(struct Qdisc *qdisc); diff --git a/target/linux/ipq806x/patches-5.15/999-202-qca-nss-clients-l2tp-support.patch b/target/linux/ipq806x/patches-5.15/999-202-qca-nss-clients-l2tp-support.patch index 6fd6c14e34..7fa9184df2 100644 --- a/target/linux/ipq806x/patches-5.15/999-202-qca-nss-clients-l2tp-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-202-qca-nss-clients-l2tp-support.patch @@ -1,6 +1,6 @@ --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c -@@ -400,6 +400,31 @@ err_tlock: +@@ -398,6 +398,31 @@ err_tlock: } EXPORT_SYMBOL_GPL(l2tp_session_register); diff --git a/target/linux/ipq806x/patches-5.15/999-204-qca-nss-clients-iptunnel-support.patch b/target/linux/ipq806x/patches-5.15/999-204-qca-nss-clients-iptunnel-support.patch index d95eb8b28c..5869f84e4c 100644 --- a/target/linux/ipq806x/patches-5.15/999-204-qca-nss-clients-iptunnel-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-204-qca-nss-clients-iptunnel-support.patch @@ -10,7 +10,7 @@ __u32 flags; /* tunnel flags */ --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h -@@ -531,4 +531,9 @@ static inline void ip_tunnel_info_opts_s +@@ -534,4 +534,9 @@ static inline void ip_tunnel_info_opts_s #endif /* CONFIG_INET */ @@ -22,7 +22,7 @@ #endif /* __NET_IP_TUNNELS_H */ --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c -@@ -2429,6 +2429,26 @@ nla_put_failure: +@@ -2440,6 +2440,26 @@ nla_put_failure: return -EMSGSIZE; } @@ -51,7 +51,7 @@ struct ip6_tnl *tunnel = netdev_priv(dev); --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c -@@ -1794,6 +1794,23 @@ nla_put_failure: +@@ -1798,6 +1798,23 @@ nla_put_failure: return -EMSGSIZE; } diff --git a/target/linux/ipq806x/patches-5.15/999-205-qca-nss-clients-vxlan-support.patch b/target/linux/ipq806x/patches-5.15/999-205-qca-nss-clients-vxlan-support.patch index e09fae2ec4..b8a85108cf 100644 --- a/target/linux/ipq806x/patches-5.15/999-205-qca-nss-clients-vxlan-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-205-qca-nss-clients-vxlan-support.patch @@ -59,7 +59,7 @@ /* caller should hold vxlan->hash_lock */ static struct vxlan_rdst *vxlan_fdb_find_rdst(struct vxlan_fdb *f, union vxlan_addr *ip, __be16 port, -@@ -2744,6 +2775,9 @@ static void vxlan_xmit_one(struct sk_buf +@@ -2746,6 +2777,9 @@ static void vxlan_xmit_one(struct sk_buf goto out_unlock; } @@ -69,7 +69,7 @@ tos = ip_tunnel_ecn_encap(tos, old_iph, skb); ttl = ttl ? : ip4_dst_hoplimit(&rt->dst); err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr), -@@ -2814,6 +2848,9 @@ static void vxlan_xmit_one(struct sk_buf +@@ -2817,6 +2851,9 @@ static void vxlan_xmit_one(struct sk_buf if (err < 0) goto tx_error; @@ -101,7 +101,7 @@ struct net_device *vxlan_dev_create(struct net *net, const char *name, u8 name_assign_type, struct vxlan_config *conf); -@@ -376,6 +389,15 @@ static inline __be32 vxlan_compute_rco(u +@@ -381,6 +394,15 @@ static inline __be32 vxlan_compute_rco(u return vni_field; } diff --git a/target/linux/ipq806x/patches-5.15/999-206-qca-nss-clients-l2tp-offloading-support.patch b/target/linux/ipq806x/patches-5.15/999-206-qca-nss-clients-l2tp-offloading-support.patch index e254066fcc..61e268cc23 100644 --- a/target/linux/ipq806x/patches-5.15/999-206-qca-nss-clients-l2tp-offloading-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-206-qca-nss-clients-l2tp-offloading-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h -@@ -45,6 +56,47 @@ struct ppp_channel { +@@ -59,6 +59,51 @@ struct ppp_channel { }; #ifdef __KERNEL__ @@ -32,9 +32,13 @@ +extern int ppp_hold_channels(struct net_device *dev, + struct ppp_channel *channels[], + unsigned int chan_sz); ++extern int __ppp_hold_channels(struct net_device *dev, ++ struct ppp_channel *channels[], ++ unsigned int chan_sz); + +/* Test if the ppp device is a multi-link ppp device */ +extern int ppp_is_multilink(struct net_device *dev); ++extern int __ppp_is_multilink(struct net_device *dev); + +/* Update statistics of the PPP net_device by incrementing related + * statistics field value with corresponding parameter @@ -48,7 +52,7 @@ /* Called by the channel when it can send some more data. */ extern void ppp_output_wakeup(struct ppp_channel *); -@@ -83,5 +135,17 @@ extern char *ppp_dev_name(struct ppp_cha +@@ -146,5 +191,17 @@ extern void ppp_update_stats(struct net_ * that ppp_unregister_channel returns. */ @@ -101,7 +105,28 @@ #endif --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c -@@ -380,6 +392,13 @@ static int pppol2tp_xmit(struct ppp_chan +@@ -123,9 +123,17 @@ struct pppol2tp_session { + }; + + static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb); +- +-static const struct ppp_channel_ops pppol2tp_chan_ops = { +- .start_xmit = pppol2tp_xmit, ++static int pppol2tp_get_channel_protocol(struct ppp_channel *); ++static int pppol2tp_get_channel_protocol_ver(struct ppp_channel *); ++static void pppol2tp_hold_chan(struct ppp_channel *); ++static void pppol2tp_release_chan(struct ppp_channel *); ++ ++static const struct pppol2tp_channel_ops pppol2tp_chan_ops = { ++ .ops.start_xmit = pppol2tp_xmit, ++ .ops.get_channel_protocol = pppol2tp_get_channel_protocol, ++ .ops.get_channel_protocol_ver = pppol2tp_get_channel_protocol_ver, ++ .ops.hold = pppol2tp_hold_chan, ++ .ops.release = pppol2tp_release_chan, + }; + + static const struct proto_ops pppol2tp_ops; +@@ -374,6 +382,13 @@ static int pppol2tp_xmit(struct ppp_chan skb->data[0] = PPP_ALLSTATIONS; skb->data[1] = PPP_UI; @@ -113,9 +138,18 @@ + /* QCA NSS ECM support - End */ + local_bh_disable(); - l2tp_xmit_skb(session, skb, session->hdr_len); + l2tp_xmit_skb(session, skb); local_bh_enable(); -@@ -1749,6 +1768,109 @@ static void __exit pppol2tp_exit(void) +@@ -819,7 +834,7 @@ static int pppol2tp_connect(struct socke + po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ; + + po->chan.private = sk; +- po->chan.ops = &pppol2tp_chan_ops; ++ po->chan.ops = (struct ppp_channel_ops *)&pppol2tp_chan_ops.ops; + po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); + + error = ppp_register_net_channel(sock_net(sk), &po->chan); +@@ -1733,6 +1748,109 @@ static void __exit pppol2tp_exit(void) unregister_pernet_device(&pppol2tp_net_ops); } @@ -225,110 +259,106 @@ module_init(pppol2tp_init); module_exit(pppol2tp_exit); -*** a/drivers/net/ppp/ppp_generic.c 2022-04-06 17:25:52.144576100 +0900 ---- b/drivers/net/ppp/ppp_generic.c 2022-04-06 17:32:55.164576100 +0900 -*************** int ppp_is_multilink(struct net_device * -*** 3502,3507 **** ---- 3502,3533 ---- - } - EXPORT_SYMBOL(ppp_is_multilink); - -+ /* __ppp_is_multilink() -+ * Returns >0 if the device is a multilink PPP netdevice, 0 if not or < 0 -+ * if the device is not PPP. Caller should acquire ppp_lock before calling -+ * this function -+ */ -+ int __ppp_is_multilink(struct net_device *dev) -+ { -+ struct ppp *ppp; -+ unsigned int flags; -+ -+ if (!dev) -+ return -1; -+ -+ if (dev->type != ARPHRD_PPP) -+ return -1; -+ -+ ppp = netdev_priv(dev); -+ flags = ppp->flags; -+ -+ if (flags & SC_MULTILINK) -+ return 1; -+ -+ return 0; -+ } -+ EXPORT_SYMBOL(__ppp_is_multilink); -+ - /* ppp_channel_get_protocol() - * Call this to obtain the underlying protocol of the PPP channel, - * e.g. PX_PROTO_OE -*************** int ppp_hold_channels(struct net_device -*** 3606,3611 **** ---- 3632,3690 ---- - } - EXPORT_SYMBOL(ppp_hold_channels); - -+ /* __ppp_hold_channels() -+ * Returns the PPP channels of the PPP device, storing each one into -+ * channels[]. -+ * -+ * channels[] has chan_sz elements. -+ * This function returns the number of channels stored, up to chan_sz. -+ * It will return < 0 if the device is not PPP. -+ * -+ * You MUST release the channels using ppp_release_channels(). -+ */ -+ int __ppp_hold_channels(struct net_device *dev, struct ppp_channel *channels[], -+ unsigned int chan_sz) -+ { -+ struct ppp *ppp; -+ int c; -+ struct channel *pch; -+ -+ if (!dev) -+ return -1; -+ -+ if (dev->type != ARPHRD_PPP) -+ return -1; -+ -+ ppp = netdev_priv(dev); -+ -+ c = 0; -+ list_for_each_entry(pch, &ppp->channels, clist) { -+ struct ppp_channel *chan; -+ -+ if (!pch->chan) { -+ /* Channel is going / gone away */ -+ continue; -+ } -+ -+ if (c == chan_sz) { -+ /* No space to record channel */ -+ return c; -+ } -+ -+ /* Hold the channel, if supported */ -+ chan = pch->chan; -+ if (!chan->ops->hold) -+ continue; -+ -+ chan->ops->hold(chan); -+ -+ /* Record the channel */ -+ channels[c++] = chan; -+ } -+ return c; -+ } -+ EXPORT_SYMBOL(__ppp_hold_channels); -+ - /* ppp_release_channels() - * Releases channels - */ +--- a/drivers/net/ppp/ppp_generic.c ++++ b/drivers/net/ppp/ppp_generic.c +@@ -3742,6 +3742,32 @@ int ppp_is_multilink(struct net_device * + } + EXPORT_SYMBOL(ppp_is_multilink); + ++/* __ppp_is_multilink() ++ * Returns >0 if the device is a multilink PPP netdevice, 0 if not or < 0 ++ * if the device is not PPP. Caller should acquire ppp_lock before calling ++ * this function ++ */ ++int __ppp_is_multilink(struct net_device *dev) ++{ ++ struct ppp *ppp; ++ unsigned int flags; ++ ++ if (!dev) ++ return -1; ++ ++ if (dev->type != ARPHRD_PPP) ++ return -1; ++ ++ ppp = netdev_priv(dev); ++ flags = ppp->flags; ++ ++ if (flags & SC_MULTILINK) ++ return 1; ++ ++ return 0; ++} ++EXPORT_SYMBOL(__ppp_is_multilink); ++ + /* ppp_channel_get_protocol() + * Call this to obtain the underlying protocol of the PPP channel, + * e.g. PX_PROTO_OE +@@ -3880,6 +3906,59 @@ int ppp_hold_channels(struct net_device + } + EXPORT_SYMBOL(ppp_hold_channels); + ++/* __ppp_hold_channels() ++ * Returns the PPP channels of the PPP device, storing each one into ++ * channels[]. ++ * ++ * channels[] has chan_sz elements. ++ * This function returns the number of channels stored, up to chan_sz. ++ * It will return < 0 if the device is not PPP. ++ * ++ * You MUST release the channels using ppp_release_channels(). ++ */ ++int __ppp_hold_channels(struct net_device *dev, struct ppp_channel *channels[], ++ unsigned int chan_sz) ++{ ++ struct ppp *ppp; ++ int c; ++ struct channel *pch; ++ ++ if (!dev) ++ return -1; ++ ++ if (dev->type != ARPHRD_PPP) ++ return -1; ++ ++ ppp = netdev_priv(dev); ++ ++ c = 0; ++ list_for_each_entry(pch, &ppp->channels, clist) { ++ struct ppp_channel *chan; ++ ++ if (!pch->chan) { ++ /* Channel is going / gone away */ ++ continue; ++ } ++ ++ if (c == chan_sz) { ++ /* No space to record channel */ ++ return c; ++ } ++ ++ /* Hold the channel, if supported */ ++ chan = pch->chan; ++ if (!chan->ops->hold) ++ continue; ++ ++ chan->ops->hold(chan); ++ ++ /* Record the channel */ ++ channels[c++] = chan; ++ } ++ return c; ++} ++EXPORT_SYMBOL(__ppp_hold_channels); ++ + /* ppp_release_channels() + * Releases channels + */ --- a/net/l2tp/l2tp_core.h +++ b/net/l2tp/l2tp_core.h -@@ -232,6 +232,9 @@ struct l2tp_session *l2tp_session_get_nt - struct l2tp_session *l2tp_session_get_by_ifname(const struct net *net, - const char *ifname); +@@ -235,6 +235,9 @@ struct l2tp_session *l2tp_session_get_by + void l2tp_stats_update(struct l2tp_tunnel *tunnel, struct l2tp_session *session, + struct l2tp_stats *stats); +void l2tp_stats_update(struct l2tp_tunnel *tunnel, struct l2tp_session *session, + struct l2tp_stats *stats); @@ -336,67 +366,3 @@ /* Tunnel and session lifetime management. * Creation of a new instance is a two-step process: create, then register. * Destruction is triggered using the *_delete functions, and completes asynchronously. -*** a/net/l2tp/l2tp_ppp.c 2022-08-20 11:19:37.748454800 +0900 ---- b/net/l2tp/l2tp_ppp.c 2022-08-20 11:24:40.138454800 +0900 -*************** struct pppol2tp_session { -*** 123,131 **** - }; - - static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb); -! -! static const struct ppp_channel_ops pppol2tp_chan_ops = { -! .start_xmit = pppol2tp_xmit, - }; - - static const struct proto_ops pppol2tp_ops; ---- 123,139 ---- - }; - - static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb); -! static int pppol2tp_get_channel_protocol(struct ppp_channel *); -! static int pppol2tp_get_channel_protocol_ver(struct ppp_channel *); -! static void pppol2tp_hold_chan(struct ppp_channel *); -! static void pppol2tp_release_chan(struct ppp_channel *); -! -! static const struct pppol2tp_channel_ops pppol2tp_chan_ops = { -! .ops.start_xmit = pppol2tp_xmit, -! .ops.get_channel_protocol = pppol2tp_get_channel_protocol, -! .ops.get_channel_protocol_ver = pppol2tp_get_channel_protocol_ver, -! .ops.hold = pppol2tp_hold_chan, -! .ops.release = pppol2tp_release_chan, - }; - - static const struct proto_ops pppol2tp_ops; -*************** static int pppol2tp_connect(struct socke -*** 809,815 **** - po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ; - - po->chan.private = sk; -! po->chan.ops = &pppol2tp_chan_ops; - po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); - - error = ppp_register_net_channel(sock_net(sk), &po->chan); ---- 875,881 ---- - po->chan.hdrlen = PPPOL2TP_L2TP_HDR_SIZE_NOSEQ; - - po->chan.private = sk; -! po->chan.ops = (struct ppp_channel_ops *)&pppol2tp_chan_ops.ops; - po->chan.mtu = pppol2tp_tunnel_mtu(tunnel); - - error = ppp_register_net_channel(sock_net(sk), &po->chan); ---- a/include/linux/ppp_channel.h 2022-11-08 21:01:55.607003500 +0900 -+++ b/include/linux/ppp_channel.h 2022-11-08 21:03:40.027003500 +0900 -@@ -87,9 +87,13 @@ extern int ppp_dev_index(struct ppp_chan - extern int ppp_hold_channels(struct net_device *dev, - struct ppp_channel *channels[], - unsigned int chan_sz); -+extern int __ppp_hold_channels(struct net_device *dev, -+ struct ppp_channel *channels[], -+ unsigned int chan_sz); - - /* Test if the ppp device is a multi-link ppp device */ - extern int ppp_is_multilink(struct net_device *dev); -+extern int __ppp_is_multilink(struct net_device *dev); - - /* Update statistics of the PPP net_device by incrementing related - * statistics field value with corresponding parameter diff --git a/target/linux/ipq806x/patches-5.15/999-207-qca-nss-clients-iptunnel-lock-this-cpu.patch b/target/linux/ipq806x/patches-5.15/999-207-qca-nss-clients-iptunnel-lock-this-cpu.patch index 25df2e3bbf..a7b2573dcb 100644 --- a/target/linux/ipq806x/patches-5.15/999-207-qca-nss-clients-iptunnel-lock-this-cpu.patch +++ b/target/linux/ipq806x/patches-5.15/999-207-qca-nss-clients-iptunnel-lock-this-cpu.patch @@ -1,6 +1,6 @@ ---- a/net/ipv6/ip6_tunnel.c 2022-11-08 20:48:53.057003500 +0900 -+++ b/net/ipv6/ip6_tunnel.c 2022-11-08 20:49:15.247003500 +0900 -@@ -2435,7 +2435,7 @@ nla_put_failure: +--- a/net/ipv6/ip6_tunnel.c ++++ b/net/ipv6/ip6_tunnel.c +@@ -2446,7 +2446,7 @@ nla_put_failure: */ void ip6_update_offload_stats(struct net_device *dev, void *ptr) { @@ -9,9 +9,9 @@ const struct pcpu_sw_netstats *offload_stats = (struct pcpu_sw_netstats *)ptr; ---- a/net/ipv6/sit.c 2022-11-08 20:49:54.917003500 +0900 -+++ b/net/ipv6/sit.c 2022-11-08 20:50:05.637003500 +0900 -@@ -1797,7 +1797,7 @@ nla_put_failure: +--- a/net/ipv6/sit.c ++++ b/net/ipv6/sit.c +@@ -1801,7 +1801,7 @@ nla_put_failure: /* QCA NSS Clients Support - Start */ void ipip6_update_offload_stats(struct net_device *dev, void *ptr) { diff --git a/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch b/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch index 2353929c97..51c9282297 100644 --- a/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -235,4 +235,17 @@ extern br_get_dst_hook_t __rcu *br_get_d +@@ -234,4 +234,17 @@ extern br_get_dst_hook_t __rcu *br_get_d extern struct net_device *br_fdb_bridge_dev_get_and_hold(struct net_bridge *br); /* QCA NSS bridge-mgr support - End */ @@ -20,7 +20,7 @@ #endif --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c -@@ -186,6 +186,7 @@ struct net_bridge_fdb_entry *br_fdb_find +@@ -185,6 +185,7 @@ struct net_bridge_fdb_entry *br_fdb_find { return fdb_find_rcu(&br->fdb_hash_tbl, addr, vid); } @@ -28,7 +28,7 @@ /* When a static FDB entry is added, the mac address from the entry is * added to the bridge private HW address list and all required ports -@@ -892,6 +893,7 @@ static void fdb_notify(struct net_bridge +@@ -887,6 +888,7 @@ static void fdb_notify(struct net_bridge kfree_skb(skb); goto errout; } @@ -38,7 +38,7 @@ errout: --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h -@@ -853,6 +853,7 @@ void br_manage_promisc(struct net_bridge +@@ -833,6 +833,7 @@ void br_manage_promisc(struct net_bridge int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev); /* br_input.c */ @@ -46,7 +46,7 @@ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb); rx_handler_func_t *br_get_rx_handler(const struct net_device *dev); -@@ -2125,4 +2126,14 @@ struct nd_msg *br_is_nd_neigh_msg(struct +@@ -2105,4 +2106,14 @@ struct nd_msg *br_is_nd_neigh_msg(struct #define __br_get(__hook, __default, __args ...) \ (__hook ? (__hook(__args)) : (__default)) /* QCA NSS ECM support - End */ @@ -73,7 +73,7 @@ errout: --- a/net/bridge/br.c +++ b/net/bridge/br.c -@@ -463,6 +463,12 @@ static void __exit br_deinit(void) +@@ -455,6 +455,12 @@ static void __exit br_deinit(void) br_fdb_fini(); } @@ -103,9 +103,9 @@ goto out; --- a/net/bridge/br_input.c +++ b/net/bridge/br_input.c -@@ -24,6 +24,16 @@ +@@ -23,6 +23,16 @@ + #include "br_private.h" #include "br_private_tunnel.h" - #include "br_private_offload.h" +/* QCA qca-mcs support - Start */ +/* Hook for external Multicast handler */ @@ -120,7 +120,7 @@ static int br_netif_receive_skb(struct net *net, struct sock *sk, struct sk_buff *skb) { -@@ -31,7 +41,7 @@ br_netif_receive_skb(struct net *net, st +@@ -30,7 +40,7 @@ br_netif_receive_skb(struct net *net, st return netif_receive_skb(skb); } @@ -129,7 +129,7 @@ { struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev; struct net_bridge *br = netdev_priv(brdev); -@@ -70,6 +80,7 @@ static int br_pass_frame_up(struct sk_bu +@@ -69,6 +79,7 @@ static int br_pass_frame_up(struct sk_bu dev_net(indev), NULL, skb, indev, NULL, br_netif_receive_skb); } @@ -137,7 +137,7 @@ /* note: already called with rcu_read_lock */ int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb) -@@ -85,6 +96,11 @@ int br_handle_frame_finish(struct net *n +@@ -84,6 +95,11 @@ int br_handle_frame_finish(struct net *n struct net_bridge *br; u16 vid = 0; u8 state; @@ -149,7 +149,7 @@ if (!p || p->state == BR_STATE_DISABLED) goto drop; -@@ -141,6 +157,11 @@ int br_handle_frame_finish(struct net *n +@@ -140,6 +156,11 @@ int br_handle_frame_finish(struct net *n switch (pkt_type) { case BR_PKT_MULTICAST: @@ -161,7 +161,7 @@ mdst = br_mdb_get(brmctx, skb, vid); if ((mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) && br_multicast_querier_exists(brmctx, eth_hdr(skb), mdst)) { -@@ -156,8 +177,15 @@ int br_handle_frame_finish(struct net *n +@@ -155,8 +176,15 @@ int br_handle_frame_finish(struct net *n } break; case BR_PKT_UNICAST: @@ -179,7 +179,7 @@ default: break; } -@@ -172,12 +200,19 @@ int br_handle_frame_finish(struct net *n +@@ -171,12 +199,19 @@ int br_handle_frame_finish(struct net *n dst->used = now; br_forward(dst->dst, skb, local_rcv, false); } else { diff --git a/target/linux/ipq806x/patches-5.15/999-500-qca-nss-cfi-support.patch b/target/linux/ipq806x/patches-5.15/999-500-qca-nss-cfi-support.patch index d265624a29..95a820b61f 100644 --- a/target/linux/ipq806x/patches-5.15/999-500-qca-nss-cfi-support.patch +++ b/target/linux/ipq806x/patches-5.15/999-500-qca-nss-cfi-support.patch @@ -45,7 +45,7 @@ esp.tfclen = 0; if (x->tfcpad) { struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); -@@ -895,6 +901,7 @@ static int esp_input(struct xfrm_state * +@@ -897,6 +903,7 @@ static int esp_input(struct xfrm_state * u8 *iv; struct scatterlist *sg; int err = -EINVAL; @@ -53,7 +53,7 @@ if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen)) goto out; -@@ -902,6 +909,12 @@ static int esp_input(struct xfrm_state * +@@ -904,6 +911,12 @@ static int esp_input(struct xfrm_state * if (elen <= 0) goto out; @@ -88,7 +88,7 @@ esp.tfclen = 0; if (x->tfcpad) { struct xfrm_dst *dst = (struct xfrm_dst *)skb_dst(skb); -@@ -938,6 +944,7 @@ static int esp6_input(struct xfrm_state +@@ -940,6 +946,7 @@ static int esp6_input(struct xfrm_state __be32 *seqhi; u8 *iv; struct scatterlist *sg; @@ -96,7 +96,7 @@ if (!pskb_may_pull(skb, sizeof(struct ip_esp_hdr) + ivlen)) { ret = -EINVAL; -@@ -949,6 +956,12 @@ static int esp6_input(struct xfrm_state +@@ -951,6 +958,12 @@ static int esp6_input(struct xfrm_state goto out; } diff --git a/target/linux/ipq806x/patches-5.15/999-600-disable-unused-nss-feat.patch b/target/linux/ipq806x/patches-5.15/999-600-disable-unused-nss-feat.patch index afa41db439..05fc7978fe 100644 --- a/target/linux/ipq806x/patches-5.15/999-600-disable-unused-nss-feat.patch +++ b/target/linux/ipq806x/patches-5.15/999-600-disable-unused-nss-feat.patch @@ -1,6 +1,6 @@ --- a/arch/arm/boot/dts/qcom-ipq8064.dtsi +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi -@@ -1513,7 +1513,6 @@ +@@ -1523,7 +1523,6 @@ qcom,load-addr = <0x40000000>; qcom,turbo-frequency; @@ -8,7 +8,7 @@ qcom,gre-enabled; qcom,gre-redir-enabled; qcom,gre_tunnel_enabled; -@@ -1532,12 +1531,10 @@ +@@ -1542,12 +1541,10 @@ qcom,vlan-enabled; qcom,wlan-dataplane-offload-enabled; qcom,wlanredirect-enabled; diff --git a/target/linux/ipq806x/patches-5.15/999-800-qca-nss-ecm-12.1-drop-unused.patch b/target/linux/ipq806x/patches-5.15/999-800-qca-nss-ecm-12.1-drop-unused.patch index ada346591f..ff604badee 100644 --- a/target/linux/ipq806x/patches-5.15/999-800-qca-nss-ecm-12.1-drop-unused.patch +++ b/target/linux/ipq806x/patches-5.15/999-800-qca-nss-ecm-12.1-drop-unused.patch @@ -1,6 +1,6 @@ --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h -@@ -198,7 +198,6 @@ extern struct net_device *br_port_dev_ge +@@ -197,7 +197,6 @@ extern struct net_device *br_port_dev_ge unsigned char *addr, struct sk_buff *skb, unsigned int cookie); @@ -10,7 +10,7 @@ const char *addr, --- a/net/bridge/br_fdb.c +++ b/net/bridge/br_fdb.c -@@ -1465,26 +1465,6 @@ void br_fdb_clear_offload(const struct n +@@ -1460,26 +1460,6 @@ void br_fdb_clear_offload(const struct n EXPORT_SYMBOL_GPL(br_fdb_clear_offload); /* QCA NSS ECM support - Start */ @@ -39,7 +39,7 @@ { --- a/drivers/net/ppp/ppp_generic.c +++ b/drivers/net/ppp/ppp_generic.c -@@ -3772,34 +3772,6 @@ int ppp_channel_get_proto_version(struct +@@ -3800,34 +3800,6 @@ int ppp_channel_get_proto_version(struct } EXPORT_SYMBOL(ppp_channel_get_proto_version); @@ -76,7 +76,7 @@ { --- a/include/linux/ppp_channel.h +++ b/include/linux/ppp_channel.h -@@ -99,12 +99,6 @@ extern int ppp_channel_get_protocol(stru +@@ -144,12 +144,6 @@ extern int ppp_channel_get_protocol(stru /* Call this get protocol version */ extern int ppp_channel_get_proto_version(struct ppp_channel *); @@ -91,7 +91,7 @@ unsigned int chan_sz); --- a/drivers/net/ppp/pptp.c +++ b/drivers/net/ppp/pptp.c -@@ -92,32 +92,6 @@ static int lookup_chan_dst(u16 call_id, +@@ -93,32 +93,6 @@ static int lookup_chan_dst(u16 call_id, return i < MAX_CALLID; } @@ -124,7 +124,7 @@ /* Search a pptp session based on peer call id and peer ip address */ static int lookup_session_dst(struct pptp_opt *opt, u16 call_id, __be32 d_addr) { -@@ -748,20 +722,6 @@ int pptp_session_find(struct pptp_opt *o +@@ -758,20 +732,6 @@ int pptp_session_find(struct pptp_opt *o } EXPORT_SYMBOL(pptp_session_find);