aboutsummaryrefslogtreecommitdiff
path: root/datapath/tunnel.h
diff options
context:
space:
mode:
Diffstat (limited to 'datapath/tunnel.h')
-rw-r--r--datapath/tunnel.h27
1 files changed, 23 insertions, 4 deletions
diff --git a/datapath/tunnel.h b/datapath/tunnel.h
index 89e73bac..92963d76 100644
--- a/datapath/tunnel.h
+++ b/datapath/tunnel.h
@@ -13,8 +13,10 @@
#include "table.h"
#include "vport.h"
-/* The absolute minimum fragment size. Note that there are many other
- * definitions of the minimum MTU. */
+/*
+ * The absolute minimum fragment size. Note that there are many other
+ * definitions of the minimum MTU.
+ */
#define IP_MIN_MTU 68
/*
@@ -47,9 +49,24 @@ struct tnl_ops {
u32 tunnel_type;
u8 ipproto;
+ /*
+ * Returns the length of the tunnel header you will add in
+ * build_header() (i.e. excludes the IP header). Returns a negative
+ * error code if the configuration is invalid.
+ */
int (*hdr_len)(const struct tnl_port_config *);
- void (*build_header)(struct sk_buff *, const struct vport *,
- const struct tnl_mutable_config *);
+
+ /*
+ * Returns a linked list of SKBs with tunnel headers (multiple
+ * packets may be generated in the event of fragmentation). Space
+ * will have already been allocated at the start of the packet equal
+ * to sizeof(struct iphdr) + value returned by hdr_len(). The IP
+ * header will have already been constructed.
+ */
+ struct sk_buff *(*build_header)(struct sk_buff *,
+ const struct vport *,
+ const struct tnl_mutable_config *,
+ struct dst_entry *);
};
struct tnl_vport {
@@ -61,6 +78,8 @@ struct tnl_vport {
/* Protected by RCU. */
struct tnl_mutable_config *mutable;
+
+ atomic_t frag_id;
};
int tnl_init(void);