Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0-or-later */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * INET		An implementation of the TCP/IP protocol suite for the LINUX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *		operating system.  INET is implemented using the  BSD Socket
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  *		interface as the means of communication with the user level.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  *		Definitions for the protocol dispatcher.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  * Version:	@(#)protocol.h	1.0.2	05/07/93
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * Author:	Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  *	Changes:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  *		Alan Cox	:	Added a name field and a frag handler
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  *					field for later.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  *		Alan Cox	:	Cleaned up, and sorted types.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  *		Pedro Roque	:	inet6 protocols
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #ifndef _PROTOCOL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define _PROTOCOL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #include <linux/in6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #include <linux/skbuff.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #include <linux/ipv6.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #include <linux/netdevice.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) /* This is one larger than the largest protocol value that can be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  * found in an ipv4 or ipv6 header.  Since in both cases the protocol
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * value is presented in a __u8, this is defined to be 256.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define MAX_INET_PROTOS		256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) /* This is used to register protocols. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) struct net_protocol {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	int			(*early_demux)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	int			(*early_demux_handler)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	int			(*handler)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	/* This returns an error if we weren't able to handle the error. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	int			(*err_handler)(struct sk_buff *skb, u32 info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 	unsigned int		no_policy:1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 				netns_ok:1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 				/* does the protocol do more stringent
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 				 * icmp tag validation than simple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 				 * socket lookup?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 				 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 				icmp_strict_tag_validation:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) struct inet6_protocol {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	void	(*early_demux)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	void    (*early_demux_handler)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	int	(*handler)(struct sk_buff *skb);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	/* This returns an error if we weren't able to handle the error. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	int	(*err_handler)(struct sk_buff *skb,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 			       struct inet6_skb_parm *opt,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 			       u8 type, u8 code, int offset,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 			       __be32 info);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	unsigned int	flags;	/* INET6_PROTO_xxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define INET6_PROTO_NOPOLICY	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define INET6_PROTO_FINAL	0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) struct net_offload {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	struct offload_callbacks callbacks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	unsigned int		 flags;	/* Flags used by IPv6 for now */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) /* This should be set for any extension header which is compatible with GSO. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define INET6_PROTO_GSO_EXTHDR	0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) /* This is used to register socket interfaces for IP protocols.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) struct inet_protosw {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	struct list_head list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)         /* These two fields form the lookup key.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	unsigned short	 type;	   /* This is the 2nd argument to socket(2). */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 	unsigned short	 protocol; /* This is the L4 protocol number.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	struct proto	 *prot;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	const struct proto_ops *ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)   
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	unsigned char	 flags;      /* See INET_PROTOSW_* below.  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define INET_PROTOSW_REUSE 0x01	     /* Are ports automatically reusable? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) #define INET_PROTOSW_PERMANENT 0x02  /* Permanent protocols are unremovable. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) #define INET_PROTOSW_ICSK      0x04  /* Is this an inet_connection_sock? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) extern struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) extern const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) extern struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) int inet_add_protocol(const struct net_protocol *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) int inet_del_protocol(const struct net_protocol *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) int inet_add_offload(const struct net_offload *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) int inet_del_offload(const struct net_offload *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) void inet_register_protosw(struct inet_protosw *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) void inet_unregister_protosw(struct inet_protosw *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #if IS_ENABLED(CONFIG_IPV6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) int inet6_register_protosw(struct inet_protosw *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) void inet6_unregister_protosw(struct inet_protosw *p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) int inet6_add_offload(const struct net_offload *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) int inet6_del_offload(const struct net_offload *prot, unsigned char num);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #endif	/* _PROTOCOL_H */