~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/net/protocol.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php