1 #ifndef __LINUX_GSO_WRAPPER_H
2 #define __LINUX_GSO_WRAPPER_H
4 #include <linux/skbuff.h>
5 #include <net/protocol.h>
10 struct ovs_skb_cb dp_cb;
11 sk_buff_data_t inner_network_header;
12 sk_buff_data_t inner_mac_header;
13 void (*fix_segment)(struct sk_buff *);
15 #define OVS_GSO_CB(skb) ((struct ovs_gso_cb *)(skb)->cb)
17 #define skb_inner_network_header rpl_skb_inner_network_header
19 #ifdef NET_SKBUFF_DATA_USES_OFFSET
20 #define skb_inner_network_header rpl_skb_inner_network_header
21 static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb)
23 return skb->head + OVS_GSO_CB(skb)->inner_network_header;
26 #define skb_inner_mac_header rpl_skb_inner_mac_header
27 static inline unsigned char *skb_inner_mac_header(const struct sk_buff *skb)
29 return skb->head + OVS_GSO_CB(skb)->inner_mac_header;
34 #define skb_inner_network_header rpl_skb_inner_network_header
35 static inline unsigned char *skb_inner_network_header(const struct sk_buff *skb)
37 return OVS_GSO_CB(skb)->inner_network_header;
40 #define skb_inner_mac_header rpl_skb_inner_mac_header
41 static inline unsigned char *skb_inner_mac_header(const struct sk_buff *skb)
43 return OVS_GSO_CB(skb)->inner_mac_header;
48 #define skb_inner_network_offset rpl_skb_inner_network_offset
49 static inline int skb_inner_network_offset(const struct sk_buff *skb)
51 return skb_inner_network_header(skb) - skb->data;
54 #define skb_inner_mac_offset rpl_skb_inner_mac_offset
55 static inline int skb_inner_mac_offset(const struct sk_buff *skb)
57 return skb_inner_mac_header(skb) - skb->data;
60 #define skb_reset_inner_headers rpl_skb_reset_inner_headers
61 static inline void skb_reset_inner_headers(struct sk_buff *skb)
63 BUILD_BUG_ON(sizeof(struct ovs_gso_cb) > FIELD_SIZEOF(struct sk_buff, cb));
64 OVS_GSO_CB(skb)->inner_network_header = skb->network_header;
65 OVS_GSO_CB(skb)->inner_mac_header = skb->mac_header;
67 OVS_GSO_CB(skb)->fix_segment = NULL;
70 #define ip_local_out rpl_ip_local_out
71 int ip_local_out(struct sk_buff *skb);