forked from Minki/linux
fou: Split out {fou,gue}_build_header
Create __fou_build_header and __gue_build_header. These implement the protocol generic parts of building the fou and gue header. fou_build_header and gue_build_header implement the IPv4 specific functions and call the __*_build_header functions. Signed-off-by: Tom Herbert <tom@herbertland.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
440924bbc0
commit
dc969b81eb
@ -11,9 +11,9 @@
|
|||||||
size_t fou_encap_hlen(struct ip_tunnel_encap *e);
|
size_t fou_encap_hlen(struct ip_tunnel_encap *e);
|
||||||
static size_t gue_encap_hlen(struct ip_tunnel_encap *e);
|
static size_t gue_encap_hlen(struct ip_tunnel_encap *e);
|
||||||
|
|
||||||
int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
int __fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
u8 *protocol, struct flowi4 *fl4);
|
u8 *protocol, __be16 *sport, int type);
|
||||||
int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
int __gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
u8 *protocol, struct flowi4 *fl4);
|
u8 *protocol, __be16 *sport, int type);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -780,6 +780,22 @@ static void fou_build_udp(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|||||||
*protocol = IPPROTO_UDP;
|
*protocol = IPPROTO_UDP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int __fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
|
u8 *protocol, __be16 *sport, int type)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = iptunnel_handle_offloads(skb, type);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
*sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev),
|
||||||
|
skb, 0, 0, false);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__fou_build_header);
|
||||||
|
|
||||||
int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
u8 *protocol, struct flowi4 *fl4)
|
u8 *protocol, struct flowi4 *fl4)
|
||||||
{
|
{
|
||||||
@ -788,26 +804,21 @@ int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|||||||
__be16 sport;
|
__be16 sport;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
err = iptunnel_handle_offloads(skb, type);
|
err = __fou_build_header(skb, e, protocol, &sport, type);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev),
|
|
||||||
skb, 0, 0, false);
|
|
||||||
fou_build_udp(skb, e, fl4, protocol, sport);
|
fou_build_udp(skb, e, fl4, protocol, sport);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(fou_build_header);
|
EXPORT_SYMBOL(fou_build_header);
|
||||||
|
|
||||||
int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
int __gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
u8 *protocol, struct flowi4 *fl4)
|
u8 *protocol, __be16 *sport, int type)
|
||||||
{
|
{
|
||||||
int type = e->flags & TUNNEL_ENCAP_FLAG_CSUM ? SKB_GSO_UDP_TUNNEL_CSUM :
|
|
||||||
SKB_GSO_UDP_TUNNEL;
|
|
||||||
struct guehdr *guehdr;
|
struct guehdr *guehdr;
|
||||||
size_t hdrlen, optlen = 0;
|
size_t hdrlen, optlen = 0;
|
||||||
__be16 sport;
|
|
||||||
void *data;
|
void *data;
|
||||||
bool need_priv = false;
|
bool need_priv = false;
|
||||||
int err;
|
int err;
|
||||||
@ -826,7 +837,7 @@ int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* Get source port (based on flow hash) before skb_push */
|
/* Get source port (based on flow hash) before skb_push */
|
||||||
sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev),
|
*sport = e->sport ? : udp_flow_src_port(dev_net(skb->dev),
|
||||||
skb, 0, 0, false);
|
skb, 0, 0, false);
|
||||||
|
|
||||||
hdrlen = sizeof(struct guehdr) + optlen;
|
hdrlen = sizeof(struct guehdr) + optlen;
|
||||||
@ -872,6 +883,22 @@ int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(__gue_build_header);
|
||||||
|
|
||||||
|
int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
||||||
|
u8 *protocol, struct flowi4 *fl4)
|
||||||
|
{
|
||||||
|
int type = e->flags & TUNNEL_ENCAP_FLAG_CSUM ? SKB_GSO_UDP_TUNNEL_CSUM :
|
||||||
|
SKB_GSO_UDP_TUNNEL;
|
||||||
|
__be16 sport;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = __gue_build_header(skb, e, protocol, &sport, type);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
fou_build_udp(skb, e, fl4, protocol, sport);
|
fou_build_udp(skb, e, fl4, protocol, sport);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user