summaryrefslogtreecommitdiff
path: root/ofproto/tunnel.h
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2012-09-19 18:37:07 -0700
committerEthan Jackson <ethan@nicira.com>2013-01-28 19:09:58 -0800
commit7d1a8e7a7b69b79745c4a8b7de47c2fef5233303 (patch)
tree806c857c956ff53ce82431ecfa23fbdf8f6d43d2 /ofproto/tunnel.h
parentde281153654c7fa9e41f579076941ebb9dfeec4d (diff)
downloadopenvswitch-7d1a8e7a7b69b79745c4a8b7de47c2fef5233303.tar.gz
tunnel: Userspace implementation of tunnel manipulation.
The kernel tunneling code currently needs to handle a large number of operations when tunnel packets are encapsulated and decapsulated. Some examples of this are: finding the correct tunnel port on receive, TTL and ToS inheritance, ECN handling, etc. All of these can be done on a per-flow basis in userspace now that we have both the inner and outer header information, which allows us to both simplify the kernel and take advantage of userspace's information. Once tunnel packets are redirected into this code, the redundant pieces can be removed from other places. Signed-off-by: Jesse Gross <jesse@nicira.com> Signed-off-by: Ethan Jackson <ethan@nicira.com>
Diffstat (limited to 'ofproto/tunnel.h')
-rw-r--r--ofproto/tunnel.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/ofproto/tunnel.h b/ofproto/tunnel.h
new file mode 100644
index 000000000..acb69a8e0
--- /dev/null
+++ b/ofproto/tunnel.h
@@ -0,0 +1,47 @@
+/* Copyright (c) 2013 Nicira, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef TUNNEL_H
+#define TUNNEL_H 1
+
+#include <stdbool.h>
+#include <stdint.h>
+#include "flow.h"
+
+/* Tunnel port emulation layer.
+ *
+ * These functions emulate tunnel virtual ports based on the outer
+ * header information from the kernel. */
+
+struct ofport;
+struct tnl_port;
+
+bool tnl_port_reconfigure(const struct ofport *, uint32_t odp_port,
+ struct tnl_port **);
+
+struct tnl_port *tnl_port_add(const struct ofport *, uint32_t odp_port);
+void tnl_port_del(struct tnl_port *);
+
+const struct ofport *tnl_port_receive(struct flow *);
+uint32_t tnl_port_send(const struct tnl_port *, struct flow *);
+
+/* Returns true if 'flow' should be submitted to tnl_port_receive(). */
+static inline bool
+tnl_port_should_receive(const struct flow *flow)
+{
+ return flow->tunnel.ip_dst != 0;
+}
+
+#endif /* tunnel.h */