Merge branch 'dsa-suspend'
[cascardo/linux.git] / include / net / ip_tunnels.h
index 8dd8cab..7f538ba 100644 (file)
@@ -10,6 +10,7 @@
 #include <net/gro_cells.h>
 #include <net/inet_ecn.h>
 #include <net/ip.h>
+#include <net/netns/generic.h>
 #include <net/rtnetlink.h>
 
 #if IS_ENABLED(CONFIG_IPV6)
@@ -31,6 +32,13 @@ struct ip_tunnel_6rd_parm {
 };
 #endif
 
+struct ip_tunnel_encap {
+       __u16                   type;
+       __u16                   flags;
+       __be16                  sport;
+       __be16                  dport;
+};
+
 struct ip_tunnel_prl_entry {
        struct ip_tunnel_prl_entry __rcu *next;
        __be32                          addr;
@@ -56,13 +64,18 @@ struct ip_tunnel {
        /* These four fields used only by GRE */
        __u32           i_seqno;        /* The last seen seqno  */
        __u32           o_seqno;        /* The last output seqno */
-       int             hlen;           /* Precalculated header length */
+       int             tun_hlen;       /* Precalculated header length */
        int             mlink;
 
        struct ip_tunnel_dst __percpu *dst_cache;
 
        struct ip_tunnel_parm parms;
 
+       int             encap_hlen;     /* Encap header length (FOU,GUE) */
+       struct ip_tunnel_encap encap;
+
+       int             hlen;           /* tun_hlen + encap_hlen */
+
        /* for SIT */
 #ifdef CONFIG_IPV6_SIT_6RD
        struct ip_tunnel_6rd_parm ip6rd;
@@ -114,6 +127,8 @@ void ip_tunnel_delete_net(struct ip_tunnel_net *itn, struct rtnl_link_ops *ops);
 void ip_tunnel_xmit(struct sk_buff *skb, struct net_device *dev,
                    const struct iphdr *tnl_params, const u8 protocol);
 int ip_tunnel_ioctl(struct net_device *dev, struct ip_tunnel_parm *p, int cmd);
+int ip_tunnel_encap(struct sk_buff *skb, struct ip_tunnel *t,
+                   u8 *protocol, struct flowi4 *fl4);
 int ip_tunnel_change_mtu(struct net_device *dev, int new_mtu);
 
 struct rtnl_link_stats64 *ip_tunnel_get_stats64(struct net_device *dev,
@@ -131,6 +146,8 @@ int ip_tunnel_newlink(struct net_device *dev, struct nlattr *tb[],
                      struct ip_tunnel_parm *p);
 void ip_tunnel_setup(struct net_device *dev, int net_id);
 void ip_tunnel_dst_reset_all(struct ip_tunnel *t);
+int ip_tunnel_encap_setup(struct ip_tunnel *t,
+                         struct ip_tunnel_encap *ipencap);
 
 /* Extract dsfield from inner protocol */
 static inline u8 ip_tunnel_get_dsfield(const struct iphdr *iph,