From 42edbe39dd2dcb94ef2f43dacb3e43a01bcf1f86 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 15 Aug 2012 10:16:49 -0700 Subject: [PATCH] Do not include zeroed metadata fields in NXM/OXM packet-in messages. NXM and OpenFlow 1.2+ allow including the values of arbitrary flow metadata in "packet-in" messages. Open vSwitch has until now always included all the values of the metadata fields that it implements in NXT_PACKET_IN messages. However, this has at least two disadvantages: - Most of the metadata fields tend to be zero most of the time, which wastes space in the message. - It means that controllers must be very liberal about accepting fields that they know nothing about in packet-in messages, since any switch upgrade could cause new fields to appear even if the controller does nothing to give them nonzero values. (Controllers have to be prepared to tolerate unknown fields in any case, but this property makes unknown fields more likely to appear than otherwise.) This commit changes Open vSwitch so that metadata fields whose values are zero are not reported in packet-ins, fixing both problems. (This is explicitly allowed by OpenFlow 1.2+.) This commit mainly fixes a sort of internal conceptual dissonance centering around struct flow_metadata. This structure is supposed to report the metadata for a given flow. If you look at a flow, it has particular metadata values; it doesn't have masks, and the idea of a mask for a particular flow doesn't really make sense. However, struct flow_metadata did have masks. This led to internal confusion; one can see this in, for example, the following code removed by this commit in ofproto-dpif.c to handle misses in the OpenFlow flow table: /* Registers aren't meaningful on a miss. */ memset(pin.fmd.reg_masks, 0, sizeof pin.fmd.reg_masks); What this code was really trying to say is that on a flow miss, the registers are zero, so they shouldn't be included in the packet-in message. It did manage to omit the registers, by marking them as "wild", but it is conceptually more correct to simply omit them because they are zero (and that's one effect of this commit). Bug #12968. Reported-by: Igor Ganichev Signed-off-by: Ben Pfaff --- include/openflow/nicira-ext.h | 37 +++++++++++++++++++++------------- lib/flow.c | 6 ------ lib/flow.h | 12 ++--------- lib/ofp-print.c | 15 +++----------- lib/ofp-util.c | 21 +++++++++---------- ofproto/ofproto-dpif.c | 3 --- tests/ofp-print.at | 4 ++-- tests/ofproto-dpif.at | 38 +++++++++++++++++------------------ tests/ofproto.at | 2 +- 9 files changed, 59 insertions(+), 79 deletions(-) diff --git a/include/openflow/nicira-ext.h b/include/openflow/nicira-ext.h index d1d3654e..2b852b6c 100644 --- a/include/openflow/nicira-ext.h +++ b/include/openflow/nicira-ext.h @@ -170,25 +170,34 @@ OFP_ASSERT(sizeof(struct nx_set_packet_in_format) == 4); /* NXT_PACKET_IN (analogous to OFPT_PACKET_IN). * - * The NXT_PACKET_IN format is intended to model the OpenFlow-1.2 PACKET_IN - * with some minor tweaks. Most notably NXT_PACKET_IN includes the cookie of - * the rule which triggered the NXT_PACKET_IN message, and the match fields are - * in NXM format. - * - * The match fields in the NXT_PACKET_IN are intended to contain flow - * processing metadata collected at the time the NXT_PACKET_IN message was - * triggered. It is minimally required to contain the NXM_OF_IN_PORT of the - * packet, but may include other NXM headers such as flow registers. The match - * fields are allowed to contain non-metadata (e.g. NXM_OF_ETH_SRC etc). - * However, this information can typically be found in the packet directly, so - * it may be redundant. + * NXT_PACKET_IN is similar to the OpenFlow 1.2 OFPT_PACKET_IN. The + * differences are: + * + * - NXT_PACKET_IN includes the cookie of the rule that triggered the + * message. (OpenFlow 1.3 OFPT_PACKET_IN also includes the cookie.) + * + * - The metadata fields use NXM (instead of OXM) field numbers. + * + * Open vSwitch 1.9.0 and later omits metadata fields that are zero (as allowed + * by OpenFlow 1.2). Earlier versions included all implemented metadata + * fields. + * + * Open vSwitch does not include non-metadata in the nx_match, because by + * definition that information can be found in the packet itself. The format + * and the standards allow this, however, so controllers should be prepared to + * tolerate future changes. + * + * The NXM format is convenient for reporting metadata values, but it is + * important not to interpret the format as matching against a flow, because it + * does not. Nothing is being matched; arbitrary metadata masks would not be + * meaningful. * * Whereas in most cases a controller can expect to only get back NXM fields * that it set up itself (e.g. flow dumps will ordinarily report only NXM * fields from flows that the controller added), NXT_PACKET_IN messages might * contain fields that the controller does not understand, because the switch * might support fields (new registers, new protocols, etc.) that the - * controller does not.  The controller must prepared to tolerate these. + * controller does not. The controller must prepared to tolerate these. * * The 'cookie' and 'table_id' fields have no meaning when 'reason' is * OFPR_NO_MATCH. In this case they should be set to 0. */ @@ -210,7 +219,7 @@ struct nx_packet_in { * The padding bytes preceding the Ethernet frame ensure that the IP * header (if any) following the Ethernet header is 32-bit aligned. */ - /* uint8_t nxm_fields[...]; */ /* Match. */ + /* uint8_t nxm_fields[...]; */ /* NXM headers. */ /* uint8_t pad[2]; */ /* Align to 64 bit + 16 bit. */ /* uint8_t data[0]; */ /* Ethernet frame. */ }; diff --git a/lib/flow.c b/lib/flow.c index 5d2f33ca..f4446c93 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -497,14 +497,8 @@ flow_get_metadata(const struct flow *flow, struct flow_metadata *fmd) BUILD_ASSERT_DECL(FLOW_WC_SEQ == 14); fmd->tun_id = flow->tun_id; - fmd->tun_id_mask = htonll(UINT64_MAX); - fmd->metadata = flow->metadata; - fmd->metadata_mask = htonll(UINT64_MAX); - memcpy(fmd->regs, flow->regs, sizeof fmd->regs); - memset(fmd->reg_masks, 0xff, sizeof fmd->reg_masks); - fmd->in_port = flow->in_port; } diff --git a/lib/flow.h b/lib/flow.h index 5e78f796..568e2919 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -78,19 +78,11 @@ struct flow { uint8_t reserved[2]; /* Reserved for 64-bit packing. */ }; -/* Represents the metadata fields of struct flow. The masks are used to - * indicate which metadata fields are relevant in a given context. Typically - * they will be all 1 or all 0. */ +/* Represents the metadata fields of struct flow. */ struct flow_metadata { ovs_be64 tun_id; /* Encapsulating tunnel ID. */ - ovs_be64 tun_id_mask; /* 1-bit in each significant tun_id bit.*/ - - ovs_be64 metadata; - ovs_be64 metadata_mask; - + ovs_be64 metadata; /* OpenFlow 1.1+ metadata field. */ uint32_t regs[FLOW_N_REGS]; /* Registers. */ - uint32_t reg_masks[FLOW_N_REGS]; /* 1-bit in each significant regs bit. */ - uint16_t in_port; /* OpenFlow port or zero. */ }; diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 013561f3..3f5b6be3 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -108,26 +108,17 @@ ofp_print_packet_in(struct ds *string, const struct ofp_header *oh, ds_put_format(string, " total_len=%"PRIu16" in_port=", pin.total_len); ofputil_format_port(pin.fmd.in_port, string); - if (pin.fmd.tun_id_mask) { + if (pin.fmd.tun_id != htonll(0)) { ds_put_format(string, " tun_id=0x%"PRIx64, ntohll(pin.fmd.tun_id)); - if (pin.fmd.tun_id_mask != htonll(UINT64_MAX)) { - ds_put_format(string, "/0x%"PRIx64, ntohll(pin.fmd.tun_id_mask)); - } } - if (pin.fmd.metadata_mask) { + if (pin.fmd.metadata != htonll(0)) { ds_put_format(string, " metadata=0x%"PRIx64, ntohll(pin.fmd.metadata)); - if (pin.fmd.metadata_mask != htonll(UINT64_MAX)) { - ds_put_format(string, "/0x%"PRIx64, ntohll(pin.fmd.metadata_mask)); - } } for (i = 0; i < FLOW_N_REGS; i++) { - if (pin.fmd.reg_masks[i]) { + if (pin.fmd.regs[i]) { ds_put_format(string, " reg%d=0x%"PRIx32, i, pin.fmd.regs[i]); - if (pin.fmd.reg_masks[i] != UINT32_MAX) { - ds_put_format(string, "/0x%"PRIx32, pin.fmd.reg_masks[i]); - } } } diff --git a/lib/ofp-util.c b/lib/ofp-util.c index ad291742..492a2b24 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -2041,15 +2041,9 @@ ofputil_decode_packet_in_finish(struct ofputil_packet_in *pin, pin->packet_len = b->size; pin->fmd.in_port = rule->flow.in_port; - pin->fmd.tun_id = rule->flow.tun_id; - pin->fmd.tun_id_mask = rule->wc.tun_id_mask; - pin->fmd.metadata = rule->flow.metadata; - pin->fmd.metadata_mask = rule->wc.metadata_mask; - memcpy(pin->fmd.regs, rule->flow.regs, sizeof pin->fmd.regs); - memcpy(pin->fmd.reg_masks, rule->wc.reg_masks, sizeof pin->fmd.reg_masks); } enum ofperr @@ -2135,14 +2129,17 @@ ofputil_packet_in_to_rule(const struct ofputil_packet_in *pin, int i; cls_rule_init_catchall(rule, 0); - cls_rule_set_tun_id_masked(rule, pin->fmd.tun_id, - pin->fmd.tun_id_mask); - cls_rule_set_metadata_masked(rule, pin->fmd.metadata, - pin->fmd.metadata_mask); + if (pin->fmd.tun_id != htonll(0)) { + cls_rule_set_tun_id(rule, pin->fmd.tun_id); + } + if (pin->fmd.metadata != htonll(0)) { + cls_rule_set_metadata(rule, pin->fmd.metadata); + } for (i = 0; i < FLOW_N_REGS; i++) { - cls_rule_set_reg_masked(rule, i, pin->fmd.regs[i], - pin->fmd.reg_masks[i]); + if (pin->fmd.regs[i]) { + cls_rule_set_reg(rule, i, pin->fmd.regs[i]); + } } cls_rule_set_in_port(rule, pin->fmd.in_port); diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index ac1a9633..10d450ec 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -2733,9 +2733,6 @@ send_packet_in_miss(struct ofproto_dpif *ofproto, const struct ofpbuf *packet, flow_get_metadata(flow, &pin.fmd); - /* Registers aren't meaningful on a miss. */ - memset(pin.fmd.reg_masks, 0, sizeof pin.fmd.reg_masks); - connmgr_send_packet_in(ofproto->up.connmgr, &pin); } diff --git a/tests/ofp-print.at b/tests/ofp-print.at index 23449801..376f5b8b 100644 --- a/tests/ofp-print.at +++ b/tests/ofp-print.at @@ -1006,13 +1006,13 @@ ff ff ff ff 00 40 01 07 00 00 00 00 00 00 00 09 \ 00 01 00 01 02 04 00 00 00 02 00 01 04 04 00 00 \ 00 03 00 01 06 04 00 00 00 04 00 01 08 04 00 00 \ 00 05 80 00 05 10 5a 5a 5a 5a 5a 5a 5a 5a ff ff \ -00 00 ff ff 00 00 00 00 00 00 82 82 82 82 82 82 \ +ff ff ff ff ff ff 00 00 00 00 82 82 82 82 82 82 \ 80 81 81 81 81 81 81 00 00 50 08 00 45 00 00 28 \ 00 00 00 00 00 06 32 05 53 53 53 53 54 54 54 54 \ 00 55 00 56 00 00 00 00 00 00 00 00 50 00 00 00 \ 31 6d 00 00 00 00 00 00 00 00 \ "], [0], [dnl -NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x5a5a00005a5a0000/0xffff0000ffff0000 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x5a5a5a5a5a5a5a5a reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d ]) AT_CLEANUP diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index 46414b19..1e5856f2 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -97,7 +97,7 @@ AT_CHECK([ovs-ofctl monitor br0 65534 invalid_ttl --detach --no-chdir --pidfile AT_CHECK([ovs-appctl ofproto/trace br0 'in_port(1),eth(src=50:54:00:00:00:05,dst=50:54:00:00:00:07),eth_type(0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=1,tos=0,ttl=2,frag=no)' -generate], [0], [stdout]) OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl -NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via invalid_ttl) data_len=42 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=1 total_len=42 in_port=1 (via invalid_ttl) data_len=42 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(50:54:00:00:00:05->50:54:00:00:00:07) type:0800 proto:1 tos:0 ttl:1 ip(192.168.0.1->192.168.0.2) ]) OVS_VSWITCHD_STOP @@ -319,31 +319,31 @@ done OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl -NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=60 (unbuffered) +NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0 dnl -NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0 dnl -NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0 dnl -NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) tcp_csum:0 dnl -NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) tcp_csum:1a03 dnl -NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) tcp_csum:3205 dnl -NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) tcp_csum:31b8 dnl -NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d dnl -NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:6 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) tcp_csum:316d ]) @@ -356,31 +356,31 @@ done OVS_WAIT_UNTIL([ovs-appctl -t ovs-ofctl exit]) AT_CHECK([cat ofctl_monitor.log], [0], [dnl -NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=60 (unbuffered) +NXT_PACKET_IN (xid=0x0): cookie=0x1 total_len=60 in_port=1 (via action) data_len=60 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234 dnl -NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=1 cookie=0x3 total_len=64 in_port=1 reg0=0x1 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(20:22:22:22:22:22->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234 dnl -NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=2 cookie=0x4 total_len=64 in_port=1 reg0=0x1 reg1=0x2 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->50:54:00:00:00:07) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234 dnl -NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=3 cookie=0x5 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(192.168.0.1->192.168.0.2) port(8->11) udp_csum:1234 dnl -NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 tun_id=0x0 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=4 cookie=0x6 total_len=64 in_port=1 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->192.168.0.2) port(8->11) udp_csum:2c37 dnl -NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=5 cookie=0x7 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(8->11) udp_csum:4439 dnl -NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=6 cookie=0x8 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->11) udp_csum:43ec dnl -NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1 dnl -NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 metadata=0x0 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=64 (unbuffered) +NXT_PACKET_IN (xid=0x0): table_id=7 cookie=0x9 total_len=64 in_port=1 tun_id=0x6 reg0=0x1 reg1=0x2 reg2=0x3 reg3=0x4 reg4=0x5 (via action) data_len=64 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(vlan:80,pcp:0) mac(80:81:81:81:81:81->82:82:82:82:82:82) type:0800 proto:17 tos:0 ttl:0 ip(83.83.83.83->84.84.84.84) port(85->86) udp_csum:43a1 ]) diff --git a/tests/ofproto.at b/tests/ofproto.at index 46675bce..e3239f98 100644 --- a/tests/ofproto.at +++ b/tests/ofproto.at @@ -729,7 +729,7 @@ ovs-appctl -t ovs-ofctl ofctl/barrier ovs-appctl -t ovs-ofctl exit AT_CHECK([sed 's/ (xid=0x[[0-9a-fA-F]]*)//' monitor.log], [0], [dnl -NXT_PACKET_IN: total_len=14 in_port=NONE tun_id=0x0 metadata=0xfafafafa5a5a5a5a reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x0 reg7=0x0 (via action) data_len=14 (unbuffered) +NXT_PACKET_IN: total_len=14 in_port=NONE metadata=0xfafafafa5a5a5a5a (via action) data_len=14 (unbuffered) priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(00:10:20:30:40:50->00:01:02:03:04:05) type:1234 proto:0 tos:0 ttl:0 ip(0.0.0.0->0.0.0.0) OFPT_BARRIER_REPLY: ]) -- 2.30.2