From 6c7db8a23ed2de8d804fbdf9e88b62467c2dd207 Mon Sep 17 00:00:00 2001 From: duxbbo Date: Thu, 6 Jan 2022 07:00:21 +0000 Subject: [PATCH] add newip Signed-off-by: duxbbo Change-Id: I50a3b997e55cefd2e13d3a6732960788b0d346f8 --- linux-5.10/hi3516dv300_patch/newip.patch | 388 +++++++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100755 linux-5.10/hi3516dv300_patch/newip.patch diff --git a/linux-5.10/hi3516dv300_patch/newip.patch b/linux-5.10/hi3516dv300_patch/newip.patch new file mode 100755 index 0000000..0bdcf10 --- /dev/null +++ b/linux-5.10/hi3516dv300_patch/newip.patch @@ -0,0 +1,388 @@ +diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h +index 4fdeccf22..5dc5692ae 100644 +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -2016,6 +2016,9 @@ struct net_device { + struct dn_dev __rcu *dn_ptr; + #endif + struct inet6_dev __rcu *ip6_ptr; ++#if IS_ENABLED(CONFIG_NEWIP) ++ struct ninet_dev __rcu *nip_ptr; /* NIP */ ++#endif + #if IS_ENABLED(CONFIG_AX25) + void *ax25_ptr; + #endif +diff --git a/include/linux/socket.h b/include/linux/socket.h +index 9aa530d49..fb098a938 100644 +--- a/include/linux/socket.h ++++ b/include/linux/socket.h +@@ -223,8 +223,8 @@ struct ucred { + * reuses AF_INET address family + */ + #define AF_XDP 44 /* XDP sockets */ +- +-#define AF_MAX 45 /* For now.. */ ++#define AF_NINET 45 /* NIP */ ++#define AF_MAX 46 /* For now.. */ + + /* Protocol families, same as address families. */ + #define PF_UNSPEC AF_UNSPEC +@@ -274,6 +274,7 @@ struct ucred { + #define PF_QIPCRTR AF_QIPCRTR + #define PF_SMC AF_SMC + #define PF_XDP AF_XDP ++#define PF_NINET AF_NINET /* NIP */ + #define PF_MAX AF_MAX + + /* Maximum queue length specifiable by listen. */ +diff --git a/include/linux/tcp.h b/include/linux/tcp.h +index 2f87377e9..4225d4e52 100644 +--- a/include/linux/tcp.h ++++ b/include/linux/tcp.h +@@ -317,6 +317,9 @@ struct tcp_sock { + + /* OOO segments go in this rbtree. Socket lock must be held. */ + struct rb_root out_of_order_queue; ++#ifdef CONFIG_NEWIP ++ struct sk_buff *nip_out_of_order_queue; /* NIP */ ++#endif + struct sk_buff *ooo_last_skb; /* cache rb_last(out_of_order_queue) */ + + /* SACKs data, these 2 need to be together (see tcp_options_write) */ +@@ -423,6 +426,10 @@ enum tsq_enum { + TCP_MTU_REDUCED_DEFERRED, /* tcp_v{4|6}_err() could not call + * tcp_v{4|6}_mtu_reduced() + */ ++#ifdef CONFIG_NEWIP ++ TCP_NIP_WRITE_TIMER_DEFERRED, /* NIP */ ++ TCP_NIP_DELACK_TIMER_DEFERRED, /* NIP */ ++#endif + }; + + enum tsq_flags { +diff --git a/include/net/dst.h b/include/net/dst.h +index acd15c544..4c27d6bf3 100644 +--- a/include/net/dst.h ++++ b/include/net/dst.h +@@ -35,6 +35,8 @@ struct dst_entry { + int (*output)(struct net *net, struct sock *sk, struct sk_buff *skb); + + unsigned short flags; ++ ++#define DST_HOST 0x0001 /* NIP */ + #define DST_NOXFRM 0x0002 + #define DST_NOPOLICY 0x0004 + #define DST_NOCOUNT 0x0008 +diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h +index ca6a3ea90..daae1cdab 100644 +--- a/include/net/inet_hashtables.h ++++ b/include/net/inet_hashtables.h +@@ -402,6 +402,13 @@ u32 inet6_ehashfn(const struct net *net, + const struct in6_addr *laddr, const u16 lport, + const struct in6_addr *faddr, const __be16 fport); + ++#ifdef CONFIG_NEWIP ++/* NIP */ ++u32 ninet_ehashfn(const struct net *net, ++ const struct nip_addr *laddr, const u16 lport, ++ const struct nip_addr *faddr, const __be16 fport); ++#endif ++ + static inline void sk_daddr_set(struct sock *sk, __be32 addr) + { + sk->sk_daddr = addr; /* alias of inet_daddr */ +diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h +index 89163ef8c..688929625 100644 +--- a/include/net/inet_sock.h ++++ b/include/net/inet_sock.h +@@ -73,6 +73,10 @@ struct inet_request_sock { + #define ir_rmt_port req.__req_common.skc_dport + #define ir_v6_rmt_addr req.__req_common.skc_v6_daddr + #define ir_v6_loc_addr req.__req_common.skc_v6_rcv_saddr ++ ++#define ir_nip_rmt_addr req.__req_common.nip_daddr /* NIP */ ++#define ir_nip_loc_addr req.__req_common.nip_rcv_saddr /* NIP */ ++ + #define ir_iif req.__req_common.skc_bound_dev_if + #define ir_cookie req.__req_common.skc_cookie + #define ireq_net req.__req_common.skc_net +@@ -96,6 +100,12 @@ struct inet_request_sock { + struct ipv6_txoptions *ipv6_opt; + struct sk_buff *pktopts; + }; ++#endif ++#if IS_ENABLED(CONFIG_NEWIP) ++ /* NIP */ ++ struct { ++ struct sk_buff *nip_pktopts; ++ }; + #endif + }; + }; +diff --git a/include/net/neighbour.h b/include/net/neighbour.h +index 22ced1381..3c00b0b3d 100644 +--- a/include/net/neighbour.h ++++ b/include/net/neighbour.h +@@ -232,6 +232,9 @@ enum { + NEIGH_ARP_TABLE = 0, + NEIGH_ND_TABLE = 1, + NEIGH_DN_TABLE = 2, ++#ifdef CONFIG_NEWIP ++ NEIGH_NND_TABLE = 3, /* NIP */ ++#endif + NEIGH_NR_TABLES, + NEIGH_LINK_TABLE = NEIGH_NR_TABLES /* Pseudo table for neigh_xmit */ + }; +diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h +index eb0e7731f..ac0f068f4 100644 +--- a/include/net/net_namespace.h ++++ b/include/net/net_namespace.h +@@ -38,6 +38,9 @@ + #include + #include + #include ++#ifdef CONFIG_NEWIP ++#include ++#endif + + struct user_namespace; + struct proc_dir_entry; +@@ -127,6 +130,9 @@ struct net { + #if IS_ENABLED(CONFIG_IPV6) + struct netns_ipv6 ipv6; + #endif ++#if IS_ENABLED(CONFIG_NEWIP) ++ struct netns_newip newip; /* NIP */ ++#endif + #if IS_ENABLED(CONFIG_IEEE802154_6LOWPAN) + struct netns_ieee802154_lowpan ieee802154_lowpan; + #endif +diff --git a/include/net/secure_seq.h b/include/net/secure_seq.h +index d7d2495f8..5686c3d78 100644 +--- a/include/net/secure_seq.h ++++ b/include/net/secure_seq.h +@@ -19,4 +19,11 @@ u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, + u64 secure_dccpv6_sequence_number(__be32 *saddr, __be32 *daddr, + __be16 sport, __be16 dport); + ++#ifdef CONFIG_NEWIP ++/* NIP */ ++u32 secure_newip_port_ephemeral(const __be32 *saddr, const __be32 *daddr, ++ __be16 dport); ++__u32 secure_tcp_nip_sequence_number(const __be32 *saddr, const __be32 *daddr, ++ __be16 sport, __be16 dport); ++#endif + #endif /* _NET_SECURE_SEQ */ +diff --git a/include/net/sock.h b/include/net/sock.h +index cdca984f3..9f1c1ee6e 100644 +--- a/include/net/sock.h ++++ b/include/net/sock.h +@@ -68,6 +68,9 @@ + #include + #include + #include ++#ifdef CONFIG_NEWIP ++#include /* NIP */ ++#endif + + /* + * This structure really needs to be cleaned up. +@@ -202,6 +205,11 @@ struct sock_common { + struct in6_addr skc_v6_rcv_saddr; + #endif + ++#if IS_ENABLED(CONFIG_NEWIP) ++ struct nip_addr nip_daddr; /* NIP */ ++ struct nip_addr nip_rcv_saddr; /* NIP */ ++#endif ++ + atomic64_t skc_cookie; + + /* following fields are padding to force +@@ -379,6 +387,8 @@ struct sock { + #define sk_net __sk_common.skc_net + #define sk_v6_daddr __sk_common.skc_v6_daddr + #define sk_v6_rcv_saddr __sk_common.skc_v6_rcv_saddr ++#define sk_nip_daddr __sk_common.nip_daddr /* NIP */ ++#define sk_nip_rcv_saddr __sk_common.nip_rcv_saddr /* NIP */ + #define sk_cookie __sk_common.skc_cookie + #define sk_incoming_cpu __sk_common.skc_incoming_cpu + #define sk_flags __sk_common.skc_flags +diff --git a/include/net/tcp.h b/include/net/tcp.h +index eff611da5..537a3b2ec 100644 +--- a/include/net/tcp.h ++++ b/include/net/tcp.h +@@ -40,7 +40,9 @@ + #include + #include + #include +- ++#ifdef CONFIG_NEWIP ++#include /* NIP */ ++#endif + #include + #include + #include +@@ -879,6 +881,9 @@ struct tcp_skb_cb { + struct inet_skb_parm h4; + #if IS_ENABLED(CONFIG_IPV6) + struct inet6_skb_parm h6; ++#endif ++#if IS_ENABLED(CONFIG_NEWIP) ++ struct ninet_skb_parm hnip; /* NIP */ + #endif + } header; /* For incoming skbs */ + struct { +diff --git a/include/uapi/linux/if_ether.h b/include/uapi/linux/if_ether.h +index d6de2b167..16d3450ea 100644 +--- a/include/uapi/linux/if_ether.h ++++ b/include/uapi/linux/if_ether.h +@@ -72,6 +72,7 @@ + #define ETH_P_ERSPAN 0x88BE /* ERSPAN type II */ + #define ETH_P_IPX 0x8137 /* IPX over DIX */ + #define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */ ++#define ETH_P_NEWIP 0xEADD /* NIP */ + #define ETH_P_PAUSE 0x8808 /* IEEE Pause frames. See 802.3 31B */ + #define ETH_P_SLOW 0x8809 /* Slow Protocol. See 802.3ad 43B */ + #define ETH_P_WCCP 0x883E /* Web-cache coordination protocol +diff --git a/net/Kconfig b/net/Kconfig +index d6567162c..c731b7171 100644 +--- a/net/Kconfig ++++ b/net/Kconfig +@@ -93,6 +93,7 @@ config INET + if INET + source "net/ipv4/Kconfig" + source "net/ipv6/Kconfig" ++source "net/newip/Kconfig" + source "net/netlabel/Kconfig" + source "net/mptcp/Kconfig" + +diff --git a/net/Makefile b/net/Makefile +index 5744bf199..fc0c04d00 100644 +--- a/net/Makefile ++++ b/net/Makefile +@@ -20,6 +20,7 @@ obj-$(CONFIG_TLS) += tls/ + obj-$(CONFIG_XFRM) += xfrm/ + obj-$(CONFIG_UNIX_SCM) += unix/ + obj-$(CONFIG_NET) += ipv6/ ++obj-$(CONFIG_NET) += newip/ + obj-$(CONFIG_BPFILTER) += bpfilter/ + obj-$(CONFIG_PACKET) += packet/ + obj-$(CONFIG_NET_KEY) += key/ +diff --git a/net/core/neighbour.c b/net/core/neighbour.c +index c452ebf20..2713bf1c5 100644 +--- a/net/core/neighbour.c ++++ b/net/core/neighbour.c +@@ -1773,6 +1773,11 @@ static struct neigh_table *neigh_find_table(int family) + case AF_DECnet: + tbl = neigh_tables[NEIGH_DN_TABLE]; + break; ++#ifdef CONFIG_NEWIP ++ case AF_NINET: /* NIP */ ++ tbl = neigh_tables[NEIGH_NND_TABLE]; ++ break; ++#endif + } + + return tbl; +diff --git a/net/core/secure_seq.c b/net/core/secure_seq.c +index b5bc680d4..0d8c9ca40 100644 +--- a/net/core/secure_seq.c ++++ b/net/core/secure_seq.c +@@ -151,6 +151,51 @@ u32 secure_ipv4_port_ephemeral(__be32 saddr, __be32 daddr, __be16 dport) + EXPORT_SYMBOL_GPL(secure_ipv4_port_ephemeral); + #endif + ++#ifdef CONFIG_NEWIP ++/* NIP */ ++__u32 secure_tcp_nip_sequence_number(const __be32 *saddr, const __be32 *daddr, ++ __be16 sport, __be16 dport) ++{ ++ const struct { ++ struct nip_addr saddr; ++ struct nip_addr daddr; ++ __be16 sport; ++ __be16 dport; ++ } __aligned(SIPHASH_ALIGNMENT) combined = { ++ .saddr = *(struct nip_addr *)saddr, ++ .daddr = *(struct nip_addr *)daddr, ++ .sport = sport, ++ .dport = dport, ++ }; ++ u32 hash; ++ ++ net_secret_init(); ++ hash = siphash(&combined, offsetofend(typeof(combined), dport), ++ &net_secret); ++ return seq_scale(hash); ++} ++EXPORT_SYMBOL_GPL(secure_tcp_nip_sequence_number); ++ ++/* NIP */ ++u32 secure_newip_port_ephemeral(const __be32 * saddr, const __be32 * daddr, ++ __be16 dport) ++{ ++ const struct { ++ struct nip_addr saddr; ++ struct nip_addr daddr; ++ __be16 dport; ++ } __aligned(SIPHASH_ALIGNMENT) combined = { ++ .saddr = *(struct nip_addr *)saddr, ++ .daddr = *(struct nip_addr *)daddr, ++ .dport = dport, ++ }; ++ net_secret_init(); ++ return siphash(&combined, offsetofend(typeof(combined), dport), ++ &net_secret); ++} ++EXPORT_SYMBOL_GPL(secure_newip_port_ephemeral); ++#endif ++ + #if IS_ENABLED(CONFIG_IP_DCCP) + u64 secure_dccp_sequence_number(__be32 saddr, __be32 daddr, + __be16 sport, __be16 dport) +diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c +index f3fd5c911..6ee82fcb1 100644 +--- a/net/ipv4/inet_hashtables.c ++++ b/net/ipv4/inet_hashtables.c +@@ -52,6 +52,15 @@ static u32 sk_ehashfn(const struct sock *sk) + &sk->sk_v6_rcv_saddr, sk->sk_num, + &sk->sk_v6_daddr, sk->sk_dport); + #endif ++ ++#if IS_ENABLED(CONFIG_NEWIP) ++ /* NIP */ ++ if (sk->sk_family == AF_NINET ) ++ return ninet_ehashfn(sock_net(sk), ++ &sk->sk_nip_rcv_saddr, sk->sk_num, ++ &sk->sk_nip_daddr, sk->sk_dport); ++#endif ++ + return inet_ehashfn(sock_net(sk), + sk->sk_rcv_saddr, sk->sk_num, + sk->sk_daddr, sk->sk_dport); +diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c +index 227eb8967..5f1e4e5b1 100644 +--- a/security/selinux/hooks.c ++++ b/security/selinux/hooks.c +@@ -1271,7 +1271,7 @@ static inline u16 socket_type_to_security_class(int family, int type, int protoc + return SECCLASS_SMC_SOCKET; + case PF_XDP: + return SECCLASS_XDP_SOCKET; +-#if PF_MAX > 45 ++#if PF_MAX > 46 + #error New address family defined, please update this function. + #endif + } +diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h +index b9fdba2ff..7271a0e05 100644 +--- a/security/selinux/include/classmap.h ++++ b/security/selinux/include/classmap.h +@@ -253,6 +253,6 @@ struct security_class_mapping secclass_map[] = { + { NULL } + }; + +-#if PF_MAX > 45 ++#if PF_MAX > 46 + #error New address family defined, please update secclass_map. + #endif -- Gitee