Blame view
include/net/protocol.h
4.08 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/* * INET An implementation of the TCP/IP protocol suite for the LINUX * operating system. INET is implemented using the BSD Socket * interface as the means of communication with the user level. * * Definitions for the protocol dispatcher. * * Version: @(#)protocol.h 1.0.2 05/07/93 * * Author: Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. * * Changes: * Alan Cox : Added a name field and a frag handler * field for later. * Alan Cox : Cleaned up, and sorted types. * Pedro Roque : inet6 protocols */ #ifndef _PROTOCOL_H #define _PROTOCOL_H |
1da177e4c Linux-2.6.12-rc2 |
26 |
#include <linux/in6.h> |
c6b641a4c ipv6: Pull IPv6 G... |
27 |
#include <linux/skbuff.h> |
dfd56b8b3 net: use IS_ENABL... |
28 |
#if IS_ENABLED(CONFIG_IPV6) |
1da177e4c Linux-2.6.12-rc2 |
29 30 |
#include <linux/ipv6.h> #endif |
f191a1d17 net: Remove code ... |
31 |
#include <linux/netdevice.h> |
1da177e4c Linux-2.6.12-rc2 |
32 |
|
f9242b6b2 inet: Sanitize in... |
33 34 35 36 37 |
/* This is one larger than the largest protocol value that can be * found in an ipv4 or ipv6 header. Since in both cases the protocol * value is presented in a __u8, this is defined to be 256. */ #define MAX_INET_PROTOS 256 |
1da177e4c Linux-2.6.12-rc2 |
38 39 40 |
/* This is used to register protocols. */ struct net_protocol { |
7487449c8 IPv4: early demux... |
41 42 |
int (*early_demux)(struct sk_buff *skb); int (*early_demux_handler)(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
43 44 |
int (*handler)(struct sk_buff *skb); void (*err_handler)(struct sk_buff *skb, u32 info); |
f145049a0 [NETNS]: Drop pac... |
45 |
unsigned int no_policy:1, |
8ed1dc44d ipv4: introduce h... |
46 47 48 49 50 51 |
netns_ok:1, /* does the protocol do more stringent * icmp tag validation than simple * socket lookup? */ icmp_strict_tag_validation:1; |
1da177e4c Linux-2.6.12-rc2 |
52 |
}; |
dfd56b8b3 net: use IS_ENABL... |
53 |
#if IS_ENABLED(CONFIG_IPV6) |
fd2c3ef76 net: cleanup incl... |
54 |
struct inet6_protocol { |
c7109986d ipv6: Early TCP s... |
55 |
void (*early_demux)(struct sk_buff *skb); |
dddb64bcb net: Add sysctl t... |
56 |
void (*early_demux_handler)(struct sk_buff *skb); |
e5bbef20e [IPV6]: Replace s... |
57 |
int (*handler)(struct sk_buff *skb); |
1da177e4c Linux-2.6.12-rc2 |
58 59 60 |
void (*err_handler)(struct sk_buff *skb, struct inet6_skb_parm *opt, |
d5fdd6bab ipv6: Use correct... |
61 |
u8 type, u8 code, int offset, |
04ce69093 [IPV6]: 'info' ar... |
62 |
__be32 info); |
1da177e4c Linux-2.6.12-rc2 |
63 64 65 66 67 68 |
unsigned int flags; /* INET6_PROTO_xxx */ }; #define INET6_PROTO_NOPOLICY 0x1 #define INET6_PROTO_FINAL 0x2 #endif |
de27d001d net: Add net prot... |
69 |
struct net_offload { |
f191a1d17 net: Remove code ... |
70 71 |
struct offload_callbacks callbacks; unsigned int flags; /* Flags used by IPv6 for now */ |
de27d001d net: Add net prot... |
72 |
}; |
c6b641a4c ipv6: Pull IPv6 G... |
73 74 |
/* This should be set for any extension header which is compatible with GSO. */ #define INET6_PROTO_GSO_EXTHDR 0x1 |
de27d001d net: Add net prot... |
75 |
|
1da177e4c Linux-2.6.12-rc2 |
76 77 78 79 80 81 |
/* This is used to register socket interfaces for IP protocols. */ struct inet_protosw { struct list_head list; /* These two fields form the lookup key. */ unsigned short type; /* This is the 2nd argument to socket(2). */ |
ee41e2dff [INET]: Change pr... |
82 |
unsigned short protocol; /* This is the L4 protocol number. */ |
1da177e4c Linux-2.6.12-rc2 |
83 84 |
struct proto *prot; |
90ddc4f04 [NET]: move struc... |
85 |
const struct proto_ops *ops; |
1da177e4c Linux-2.6.12-rc2 |
86 |
|
1da177e4c Linux-2.6.12-rc2 |
87 88 89 90 |
unsigned char flags; /* See INET_PROTOSW_* below. */ }; #define INET_PROTOSW_REUSE 0x01 /* Are ports automatically reusable? */ #define INET_PROTOSW_PERMANENT 0x02 /* Permanent protocols are unremovable. */ |
d83d8461f [IP_SOCKGLUE]: Re... |
91 |
#define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ |
1da177e4c Linux-2.6.12-rc2 |
92 |
|
dddb64bcb net: Add sysctl t... |
93 |
extern struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; |
de27d001d net: Add net prot... |
94 |
extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS]; |
c6b641a4c ipv6: Pull IPv6 G... |
95 |
extern const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS]; |
1da177e4c Linux-2.6.12-rc2 |
96 |
|
dfd56b8b3 net: use IS_ENABL... |
97 |
#if IS_ENABLED(CONFIG_IPV6) |
dddb64bcb net: Add sysctl t... |
98 |
extern struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; |
1da177e4c Linux-2.6.12-rc2 |
99 |
#endif |
f307c6365 protocol.h: Remov... |
100 101 102 103 104 105 |
int inet_add_protocol(const struct net_protocol *prot, unsigned char num); int inet_del_protocol(const struct net_protocol *prot, unsigned char num); int inet_add_offload(const struct net_offload *prot, unsigned char num); int inet_del_offload(const struct net_offload *prot, unsigned char num); void inet_register_protosw(struct inet_protosw *p); void inet_unregister_protosw(struct inet_protosw *p); |
1da177e4c Linux-2.6.12-rc2 |
106 |
|
dfd56b8b3 net: use IS_ENABL... |
107 |
#if IS_ENABLED(CONFIG_IPV6) |
f307c6365 protocol.h: Remov... |
108 109 110 111 |
int inet6_add_protocol(const struct inet6_protocol *prot, unsigned char num); int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char num); int inet6_register_protosw(struct inet_protosw *p); void inet6_unregister_protosw(struct inet_protosw *p); |
1da177e4c Linux-2.6.12-rc2 |
112 |
#endif |
f307c6365 protocol.h: Remov... |
113 114 |
int inet6_add_offload(const struct net_offload *prot, unsigned char num); int inet6_del_offload(const struct net_offload *prot, unsigned char num); |
1da177e4c Linux-2.6.12-rc2 |
115 116 |
#endif /* _PROTOCOL_H */ |