diff options
author | Vlad Yasevich <vyasevic@redhat.com> | 2012-11-15 03:49:12 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-11-15 17:36:17 -0500 |
commit | de27d001d187721de775ed9e0c485aa6f517c745 (patch) | |
tree | 08947ffb402922f7384e61563d201761171fdbb1 /include/net/protocol.h | |
parent | 22061d8014455b01eb018bd6c35a1b3040ccc230 (diff) |
net: Add net protocol offload registration infrustructure
Create a new data structure for IPv4 protocols that holds GRO/GSO
callbacks and a new array to track the protocols that register GRO/GSO.
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/protocol.h')
-rw-r--r-- | include/net/protocol.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/net/protocol.h b/include/net/protocol.h index 929528c73fe8..d8ecb17b1231 100644 --- a/include/net/protocol.h +++ b/include/net/protocol.h | |||
@@ -77,6 +77,15 @@ struct inet6_protocol { | |||
77 | #define INET6_PROTO_GSO_EXTHDR 0x4 | 77 | #define INET6_PROTO_GSO_EXTHDR 0x4 |
78 | #endif | 78 | #endif |
79 | 79 | ||
80 | struct net_offload { | ||
81 | int (*gso_send_check)(struct sk_buff *skb); | ||
82 | struct sk_buff *(*gso_segment)(struct sk_buff *skb, | ||
83 | netdev_features_t features); | ||
84 | struct sk_buff **(*gro_receive)(struct sk_buff **head, | ||
85 | struct sk_buff *skb); | ||
86 | int (*gro_complete)(struct sk_buff *skb); | ||
87 | }; | ||
88 | |||
80 | /* This is used to register socket interfaces for IP protocols. */ | 89 | /* This is used to register socket interfaces for IP protocols. */ |
81 | struct inet_protosw { | 90 | struct inet_protosw { |
82 | struct list_head list; | 91 | struct list_head list; |
@@ -96,6 +105,7 @@ struct inet_protosw { | |||
96 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ | 105 | #define INET_PROTOSW_ICSK 0x04 /* Is this an inet_connection_sock? */ |
97 | 106 | ||
98 | extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; | 107 | extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; |
108 | extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS]; | ||
99 | 109 | ||
100 | #if IS_ENABLED(CONFIG_IPV6) | 110 | #if IS_ENABLED(CONFIG_IPV6) |
101 | extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; | 111 | extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; |
@@ -103,6 +113,8 @@ extern const struct inet6_protocol __rcu *inet6_protos[MAX_INET_PROTOS]; | |||
103 | 113 | ||
104 | extern int inet_add_protocol(const struct net_protocol *prot, unsigned char num); | 114 | 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); | 115 | extern int inet_del_protocol(const struct net_protocol *prot, unsigned char num); |
116 | extern int inet_add_offload(const struct net_offload *prot, unsigned char num); | ||
117 | extern int inet_del_offload(const struct net_offload *prot, unsigned char num); | ||
106 | extern void inet_register_protosw(struct inet_protosw *p); | 118 | extern void inet_register_protosw(struct inet_protosw *p); |
107 | extern void inet_unregister_protosw(struct inet_protosw *p); | 119 | extern void inet_unregister_protosw(struct inet_protosw *p); |
108 | 120 | ||