diff options
Diffstat (limited to 'include/net/protocol.h')
-rw-r--r-- | include/net/protocol.h | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/include/net/protocol.h b/include/net/protocol.h index 929528c73fe8..047c0476c0a0 100644 --- a/include/net/protocol.h +++ b/include/net/protocol.h | |||
@@ -25,9 +25,11 @@ | |||
25 | #define _PROTOCOL_H | 25 | #define _PROTOCOL_H |
26 | 26 | ||
27 | #include <linux/in6.h> | 27 | #include <linux/in6.h> |
28 | #include <linux/skbuff.h> | ||
28 | #if IS_ENABLED(CONFIG_IPV6) | 29 | #if IS_ENABLED(CONFIG_IPV6) |
29 | #include <linux/ipv6.h> | 30 | #include <linux/ipv6.h> |
30 | #endif | 31 | #endif |
32 | #include <linux/netdevice.h> | ||
31 | 33 | ||
32 | /* This is one larger than the largest protocol value that can be | 34 | /* This is one larger than the largest protocol value that can be |
33 | * found in an ipv4 or ipv6 header. Since in both cases the protocol | 35 | * found in an ipv4 or ipv6 header. Since in both cases the protocol |
@@ -40,12 +42,6 @@ struct net_protocol { | |||
40 | void (*early_demux)(struct sk_buff *skb); | 42 | void (*early_demux)(struct sk_buff *skb); |
41 | int (*handler)(struct sk_buff *skb); | 43 | int (*handler)(struct sk_buff *skb); |
42 | void (*err_handler)(struct sk_buff *skb, u32 info); | 44 | void (*err_handler)(struct sk_buff *skb, u32 info); |
43 | int (*gso_send_check)(struct sk_buff *skb); | ||
44 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | ||
45 | netdev_features_t features); | ||
46 | struct sk_buff **(*gro_receive)(struct sk_buff **head, | ||
47 | struct sk_buff *skb); | ||
48 | int (*gro_complete)(struct sk_buff *skb); | ||
49 | unsigned int no_policy:1, | 45 | unsigned int no_policy:1, |
50 | netns_ok:1; | 46 | netns_ok:1; |
51 | }; | 47 | }; |
@@ -60,23 +56,20 @@ struct inet6_protocol { | |||
60 | struct inet6_skb_parm *opt, | 56 | struct inet6_skb_parm *opt, |
61 | u8 type, u8 code, int offset, | 57 | u8 type, u8 code, int offset, |
62 | __be32 info); | 58 | __be32 info); |
63 | |||
64 | int (*gso_send_check)(struct sk_buff *skb); | ||
65 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | ||
66 | netdev_features_t features); | ||
67 | struct sk_buff **(*gro_receive)(struct sk_buff **head, | ||
68 | struct sk_buff *skb); | ||
69 | int (*gro_complete)(struct sk_buff *skb); | ||
70 | |||
71 | unsigned int flags; /* INET6_PROTO_xxx */ | 59 | unsigned int flags; /* INET6_PROTO_xxx */ |
72 | }; | 60 | }; |
73 | 61 | ||
74 | #define INET6_PROTO_NOPOLICY 0x1 | 62 | #define INET6_PROTO_NOPOLICY 0x1 |
75 | #define INET6_PROTO_FINAL 0x2 | 63 | #define INET6_PROTO_FINAL 0x2 |
76 | /* This should be set for any extension header which is compatible with GSO. */ | ||
77 | #define INET6_PROTO_GSO_EXTHDR 0x4 | ||
78 | #endif | 64 | #endif |
79 | 65 | ||
66 | struct net_offload { | ||
67 | struct offload_callbacks callbacks; | ||
68 | unsigned int flags; /* Flags used by IPv6 for now */ | ||
69 | }; | ||
70 | /* This should be set for any extension header which is compatible with GSO. */ | ||
71 | #define INET6_PROTO_GSO_EXTHDR 0x1 | ||
72 | |||
80 | /* This is used to register socket interfaces for IP protocols. */ | 73 | /* This is used to register socket interfaces for IP protocols. */ |
81 | struct inet_protosw { | 74 | struct inet_protosw { |
82 | struct list_head list; | 75 | struct list_head list; |
@@ -96,6 +89,8 @@ struct inet_protosw { | |||
96 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ | 89 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ |
97 | 90 | ||
98 | extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; | 91 | extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; |
92 | extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS]; | ||
93 | extern const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS]; | ||
99 | 94 | ||
100 | #if IS_ENABLED(CONFIG_IPV6) | 95 | #if IS_ENABLED(CONFIG_IPV6) |
101 | extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; | 96 | extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; |
@@ -103,6 +98,8 @@ extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; | |||
103 | 98 | ||
104 | extern int inet_add_protocol(const struct net_protocol *prot, unsigned char num); | 99 | extern int inet_add_protocol(const struct net_protocol *prot, unsigned char num); |
105 | extern int inet_del_protocol(const struct net_protocol *prot, unsigned char num); | 100 | extern int inet_del_protocol(const struct net_protocol *prot, unsigned char num); |
101 | extern int inet_add_offload(const struct net_offload *prot, unsigned char num); | ||
102 | extern int inet_del_offload(const struct net_offload *prot, unsigned char num); | ||
106 | extern void inet_register_protosw(struct inet_protosw *p); | 103 | extern void inet_register_protosw(struct inet_protosw *p); |
107 | extern void inet_unregister_protosw(struct inet_protosw *p); | 104 | extern void inet_unregister_protosw(struct inet_protosw *p); |
108 | 105 | ||
@@ -112,5 +109,7 @@ extern int inet6_del_protocol(const struct inet6_protocol *prot, unsigned char n | |||
112 | extern int inet6_register_protosw(struct inet_protosw *p); | 109 | extern int inet6_register_protosw(struct inet_protosw *p); |
113 | extern void inet6_unregister_protosw(struct inet_protosw *p); | 110 | extern void inet6_unregister_protosw(struct inet_protosw *p); |
114 | #endif | 111 | #endif |
112 | extern int inet6_add_offload(const struct net_offload *prot, unsigned char num); | ||
113 | extern int inet6_del_offload(const struct net_offload *prot, unsigned char num); | ||
115 | 114 | ||
116 | #endif /* _PROTOCOL_H */ | 115 | #endif /* _PROTOCOL_H */ |