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 @@  #define _PROTOCOL_H  #include <linux/in6.h> +#include <linux/skbuff.h>  #if IS_ENABLED(CONFIG_IPV6)  #include <linux/ipv6.h>  #endif +#include <linux/netdevice.h>  /* 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 @@ -40,12 +42,6 @@ struct net_protocol {  	void			(*early_demux)(struct sk_buff *skb);  	int			(*handler)(struct sk_buff *skb);  	void			(*err_handler)(struct sk_buff *skb, u32 info); -	int			(*gso_send_check)(struct sk_buff *skb); -	struct sk_buff	       *(*gso_segment)(struct sk_buff *skb, -					       netdev_features_t features); -	struct sk_buff	      **(*gro_receive)(struct sk_buff **head, -					       struct sk_buff *skb); -	int			(*gro_complete)(struct sk_buff *skb);  	unsigned int		no_policy:1,  				netns_ok:1;  }; @@ -60,23 +56,20 @@ struct inet6_protocol {  			       struct inet6_skb_parm *opt,  			       u8 type, u8 code, int offset,  			       __be32 info); - -	int	(*gso_send_check)(struct sk_buff *skb); -	struct sk_buff *(*gso_segment)(struct sk_buff *skb, -				       netdev_features_t features); -	struct sk_buff **(*gro_receive)(struct sk_buff **head, -					struct sk_buff *skb); -	int	(*gro_complete)(struct sk_buff *skb); -  	unsigned int	flags;	/* INET6_PROTO_xxx */  };  #define INET6_PROTO_NOPOLICY	0x1  #define INET6_PROTO_FINAL	0x2 -/* This should be set for any extension header which is compatible with GSO. */ -#define INET6_PROTO_GSO_EXTHDR	0x4  #endif +struct net_offload { +	struct offload_callbacks callbacks; +	unsigned int		 flags;	/* Flags used by IPv6 for now */ +}; +/* This should be set for any extension header which is compatible with GSO. */ +#define INET6_PROTO_GSO_EXTHDR	0x1 +  /* This is used to register socket interfaces for IP protocols.  */  struct inet_protosw {  	struct list_head list; @@ -96,6 +89,8 @@ struct inet_protosw {  #define INET_PROTOSW_ICSK      0x04  /* Is this an inet_connection_sock? */  extern const struct net_protocol __rcu *inet_protos[MAX_INET_PROTOS]; +extern const struct net_offload __rcu *inet_offloads[MAX_INET_PROTOS]; +extern const struct net_offload __rcu *inet6_offloads[MAX_INET_PROTOS];  #if IS_ENABLED(CONFIG_IPV6)  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];  extern int	inet_add_protocol(const struct net_protocol *prot, unsigned char num);  extern int	inet_del_protocol(const struct net_protocol *prot, unsigned char num); +extern int	inet_add_offload(const struct net_offload *prot, unsigned char num); +extern int	inet_del_offload(const struct net_offload *prot, unsigned char num);  extern void	inet_register_protosw(struct inet_protosw *p);  extern void	inet_unregister_protosw(struct inet_protosw *p); @@ -112,5 +109,7 @@ extern int	inet6_del_protocol(const struct inet6_protocol *prot, unsigned char n  extern int	inet6_register_protosw(struct inet_protosw *p);  extern void	inet6_unregister_protosw(struct inet_protosw *p);  #endif +extern int	inet6_add_offload(const struct net_offload *prot, unsigned char num); +extern int	inet6_del_offload(const struct net_offload *prot, unsigned char num);  #endif	/* _PROTOCOL_H */ |