2014-11-05 00:06:51 +07:00
|
|
|
#ifndef __NET_FOU_H
|
|
|
|
#define __NET_FOU_H
|
|
|
|
|
|
|
|
#include <linux/skbuff.h>
|
|
|
|
|
|
|
|
#include <net/flow.h>
|
|
|
|
#include <net/gue.h>
|
|
|
|
#include <net/ip_tunnels.h>
|
|
|
|
#include <net/udp.h>
|
|
|
|
|
|
|
|
int fou_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|
|
|
u8 *protocol, struct flowi4 *fl4);
|
|
|
|
int gue_build_header(struct sk_buff *skb, struct ip_tunnel_encap *e,
|
|
|
|
u8 *protocol, struct flowi4 *fl4);
|
|
|
|
|
|
|
|
static size_t fou_encap_hlen(struct ip_tunnel_encap *e)
|
|
|
|
{
|
|
|
|
return sizeof(struct udphdr);
|
|
|
|
}
|
|
|
|
|
|
|
|
static size_t gue_encap_hlen(struct ip_tunnel_encap *e)
|
|
|
|
{
|
2014-11-05 00:06:56 +07:00
|
|
|
size_t len;
|
|
|
|
bool need_priv = false;
|
|
|
|
|
|
|
|
len = sizeof(struct udphdr) + sizeof(struct guehdr);
|
|
|
|
|
|
|
|
if (e->flags & TUNNEL_ENCAP_FLAG_REMCSUM) {
|
|
|
|
len += GUE_PLEN_REMCSUM;
|
|
|
|
need_priv = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
len += need_priv ? GUE_LEN_PRIV : 0;
|
|
|
|
|
|
|
|
return len;
|
2014-11-05 00:06:51 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|