Merge commit '259e0b1ad1bfea762a76f0098deb8f8d8db1dfa3'
[sliver-openvswitch.git] / datapath / tunnel.h
index e853146..17de7c4 100644 (file)
 #include "flow.h"
 #include "vport.h"
 
-struct tnl_ops {
-       u8 ipproto;             /* The IP protocol for the tunnel. */
+struct rtable *find_route(struct net *net,
+                         __be32 *saddr, __be32 daddr, u8 ipproto,
+                         u8 tos, u32 skb_mark);
 
-       /*
-        * Returns the length of the tunnel header that will be added in
-        * build_header() (i.e. excludes the IP header).
-        */
-       int (*hdr_len)(const struct ovs_key_ipv4_tunnel *);
-       /*
-       * Builds header for given SKB.  Space will have already been
-       * allocated at the start of the packet equal
-       * to sizeof(struct iphdr) + value returned by hdr_len().
-       */
-       void (*build_header)(const struct vport *, struct sk_buff *,
-                            int tunnel_hlen);
-};
-
-struct tnl_vport {
-       struct rcu_head rcu;
-
-       __be16 dst_port;
-       char name[IFNAMSIZ];
-       const struct tnl_ops *tnl_ops;
-};
-
-struct vport *ovs_tnl_create(const struct vport_parms *, const struct vport_ops *,
-                            const struct tnl_ops *);
-void ovs_tnl_destroy(struct vport *);
-
-const char *ovs_tnl_get_name(const struct vport *vport);
-int ovs_tnl_send(struct vport *vport, struct sk_buff *skb);
-void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb);
 u16 ovs_tnl_get_src_port(struct sk_buff *skb);
 
-static inline struct tnl_vport *tnl_vport_priv(const struct vport *vport)
-{
-       return vport_priv(vport);
-}
+int ovs_tnl_send(struct vport *vport, struct sk_buff *skb,
+                u8 ipproto, int tunnel_hlen,
+                void (*build_header)(const struct vport *,
+                                     struct sk_buff *,
+                                     int tunnel_hlen));
+
+void ovs_tnl_rcv(struct vport *vport, struct sk_buff *skb,
+                struct ovs_key_ipv4_tunnel *tun_key);
 
 static inline void tnl_tun_key_init(struct ovs_key_ipv4_tunnel *tun_key,
-                                   const struct iphdr *iph, __be64 tun_id, u32 tun_flags)
+                                        const struct iphdr *iph, __be64 tun_id,
+                                        __be16 tun_flags)
 {
        tun_key->tun_id = tun_id;
        tun_key->ipv4_src = iph->saddr;
@@ -80,4 +57,4 @@ static inline void tnl_tun_key_init(struct ovs_key_ipv4_tunnel *tun_key,
               sizeof(*tun_key) - OVS_TUNNEL_KEY_SIZE);
 }
 
-#endif /* tunnel.h */
+#endif /* TUNNEL_H */