aboutsummaryrefslogtreecommitdiff
path: root/lib/classifier.h
diff options
context:
space:
mode:
authorJesse Gross <jesse@nicira.com>2010-04-12 11:49:16 -0400
committerJesse Gross <jesse@nicira.com>2010-04-19 09:11:51 -0400
commit659586efcf6f9539282da9447007897907c41112 (patch)
treebaffec5ba051a06cfb2a6fa84d0837068aca54f3 /lib/classifier.h
parentdb0e2ad101f10288c002bd537047f3d9e1979c9f (diff)
tunneling: Add support for tunnel ID.
Add a tun_id field which contains the ID of the encapsulating tunnel on which a packet was received (0 if not received on a tunnel). Also add an action which allows the tunnel ID to be set for outgoing packets. At this point there aren't any tunnel implementations so these fields don't have any effect. The matching is exposed to OpenFlow by overloading the high 32 bits of the cookie as the tunnel ID. ovs-ofctl is capable of turning on this special behavior using a new "tun-cookie" command but this command is intentially undocumented to avoid it being used without a full understanding of the consequences.
Diffstat (limited to 'lib/classifier.h')
-rw-r--r--lib/classifier.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/classifier.h b/lib/classifier.h
index 126d1498..35516022 100644
--- a/lib/classifier.h
+++ b/lib/classifier.h
@@ -44,10 +44,11 @@
#include "flow.h"
#include "hmap.h"
#include "list.h"
+#include "openflow/nicira-ext.h"
#include "openflow/openflow.h"
/* Number of bytes of fields in a rule. */
-#define CLS_N_BYTES 31
+#define CLS_N_BYTES 37
/* Fields in a rule.
*
@@ -59,6 +60,7 @@
/* wildcard bit(s) member name name */ \
/* ----------------- ----------- -------- */ \
CLS_FIELD(OFPFW_IN_PORT, in_port, IN_PORT) \
+ CLS_FIELD(NXFW_TUN_ID, tun_id, TUN_ID) \
CLS_FIELD(OFPFW_DL_VLAN, dl_vlan, DL_VLAN) \
CLS_FIELD(OFPFW_DL_VLAN_PCP, dl_vlan_pcp, DL_VLAN_PCP) \
CLS_FIELD(OFPFW_DL_SRC, dl_src, DL_SRC) \
@@ -121,10 +123,11 @@ struct cls_rule {
unsigned int table_idx; /* Index into struct classifier 'tables'. */
};
-void cls_rule_from_flow(struct cls_rule *, const flow_t *, uint32_t wildcards,
- unsigned int priority);
-void cls_rule_from_match(struct cls_rule *, const struct ofp_match *,
- unsigned int priority);
+void cls_rule_from_flow(const flow_t *, uint32_t wildcards,
+ unsigned int priority, struct cls_rule *);
+void cls_rule_from_match(const struct ofp_match *, unsigned int priority,
+ bool tun_id_from_cookie, uint64_t cookie,
+ struct cls_rule *);
char *cls_rule_to_string(const struct cls_rule *);
void cls_rule_print(const struct cls_rule *);
void cls_rule_moved(struct classifier *,