On Thu, Dec 18, 2014 at 10:31:43AM -0800, Pravin Shelar wrote: > On Tue, Dec 16, 2014 at 3:10 PM, Jarno Rajahalme <jrajaha...@nicira.com> > wrote: > > LGTM, > > > > With some comments below: > > > > Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> > > > > Jarno > > > > On Dec 15, 2014, at 12:37 PM, Pravin B Shelar <pshe...@nicira.com> wrote: > > > >> vSwitchd does not generate correct MPLS actions for multiple > >> MPLS push or pop action. > >> Datapath can handle multiple push action for in single action list. > >> But for after first MPLS pop it needs to recirculate packet to > >> refill packet key. Following patch fixes it accordingly. > >> > >> Reported-by: Stefano Salsano <stefano.sals...@uniroma2.it> > >> Signed-off-by: Pravin B Shelar <pshe...@nicira.com> > >> --- > >> lib/flow.c | 11 ++++++--- > >> ofproto/ofproto-dpif-xlate.c | 24 ++++++++++---------- > >> tests/automake.mk | 1 + > >> tests/mpls-xlate.at | 50 > >> ++++++++++++++++++++++++++++++++++++++++++ > >> tests/odp.at | 2 - > >> tests/ofproto-dpif.at | 42 +++++++++++++++++----------------- > >> tests/testsuite.at | 1 + > >> 7 files changed, 92 insertions(+), 39 deletions(-) > >> create mode 100644 tests/mpls-xlate.at > >> > >> diff --git a/lib/flow.c b/lib/flow.c > >> index 521ee82..eb7fdf1 100644 > >> --- a/lib/flow.c > >> +++ b/lib/flow.c > >> @@ -1422,18 +1422,21 @@ flow_count_mpls_labels(const struct flow *flow, > >> struct flow_wildcards *wc) > >> /* dl_type is always masked. */ > >> if (eth_type_mpls(flow->dl_type)) { > >> int i; > >> - int len = FLOW_MAX_MPLS_LABELS; > >> + int cnt; > >> > >> - for (i = 0; i < len; i++) { > >> + cnt = 0; > >> + for (i = 0; i < FLOW_MAX_MPLS_LABELS; i++) { > >> if (wc) { > >> wc->masks.mpls_lse[i] |= htonl(MPLS_BOS_MASK); > >> } > >> if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) { > >> return i + 1; > >> } > >> + if (flow->mpls_lse[i]) { > >> + cnt++; > >> + } > > > > If the intent is to skip potential explicit null labels, then this is maybe > > OK. The explicit NULL label for IPv6 has the label value 2, should they be > > skipped too? > > > Current code depends on BOS flag set to search last MPLS label. This > does not work in all cases. For example kernel can only parse one MPLS > label, so in case of multiple labels it sets outer MPLS only. The > outer label does not set BOS flag and we get wrong count. This patch > fixes the issue.
I may be missing something obvious but this does not seem right to me because I think that 0 is a valid MPLS LSE (label:0, exp:0, bos:0, ttl:0). > >> } > >> - > >> - return len; > >> + return cnt; > >> } else { > >> return 0; > >> } > >> diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c > >> index 5a2b883..9b75df3 100644 > >> --- a/ofproto/ofproto-dpif-xlate.c > >> +++ b/ofproto/ofproto-dpif-xlate.c > >> @@ -3274,9 +3274,6 @@ compose_mpls_push_action(struct xlate_ctx *ctx, > >> struct ofpact_push_mpls *mpls) > >> } > >> ctx->exit = true; > >> return; > >> - } else if (n >= ctx->xbridge->max_mpls_depth) { > >> - COVERAGE_INC(xlate_actions_mpls_overflow); > >> - ctx->xout->slow |= SLOW_ACTION; > > > > So the datapath can push unlimited number of MPLS labels, even though it > > could not parse them on input? > > > Yes, nothing prevents from pushing multiple MPLS headers. > > >> } > >> > >> flow_push_mpls(flow, n, mpls->ethertype, wc); > >> @@ -3290,7 +3287,7 @@ compose_mpls_pop_action(struct xlate_ctx *ctx, > >> ovs_be16 eth_type) > >> int n = flow_count_mpls_labels(flow, wc); > >> > >> if (flow_pop_mpls(flow, n, eth_type, wc)) { > >> - if (ctx->xbridge->enable_recirc && !eth_type_mpls(eth_type)) { > >> + if (ctx->xbridge->enable_recirc) { > >> ctx->was_mpls = true; > >> } > >> } else if (n >= FLOW_MAX_MPLS_LABELS) { > >> @@ -3698,12 +3695,15 @@ xlate_action_set(struct xlate_ctx *ctx) > >> } > >> > >> static bool > >> -ofpact_needs_recirculation_after_mpls(const struct xlate_ctx *ctx, > >> - const struct ofpact *a) > >> +ofpact_needs_recirculation_after_mpls(const struct ofpact *a, struct > >> xlate_ctx *ctx) > >> { > >> struct flow_wildcards *wc = &ctx->xout->wc; > >> struct flow *flow = &ctx->xin->flow; > >> > >> + if (!ctx->was_mpls) { > >> + return false; > >> + } > >> + > >> switch (a->type) { > >> case OFPACT_OUTPUT: > >> case OFPACT_GROUP: > >> @@ -3718,11 +3718,6 @@ ofpact_needs_recirculation_after_mpls(const struct > >> xlate_ctx *ctx, > >> case OFPACT_SET_TUNNEL: > >> case OFPACT_SET_QUEUE: > >> case OFPACT_POP_QUEUE: > >> - case OFPACT_POP_MPLS: > >> - case OFPACT_DEC_MPLS_TTL: > >> - case OFPACT_SET_MPLS_TTL: > >> - case OFPACT_SET_MPLS_TC: > >> - case OFPACT_SET_MPLS_LABEL: > >> case OFPACT_NOTE: > >> case OFPACT_OUTPUT_REG: > >> case OFPACT_EXIT: > >> @@ -3733,6 +3728,11 @@ ofpact_needs_recirculation_after_mpls(const struct > >> xlate_ctx *ctx, > >> case OFPACT_SAMPLE: > >> return false; > >> > >> + case OFPACT_POP_MPLS: > >> + case OFPACT_DEC_MPLS_TTL: > >> + case OFPACT_SET_MPLS_TTL: > >> + case OFPACT_SET_MPLS_TC: > >> + case OFPACT_SET_MPLS_LABEL: > >> case OFPACT_SET_IPV4_SRC: > >> case OFPACT_SET_IPV4_DST: > >> case OFPACT_SET_IP_DSCP: > >> @@ -3794,7 +3794,7 @@ do_xlate_actions(const struct ofpact *ofpacts, > >> size_t ofpacts_len, > >> break; > >> } > >> > >> - if (ctx->was_mpls && ofpact_needs_recirculation_after_mpls(ctx, > >> a)) { > >> + if (ofpact_needs_recirculation_after_mpls(a, ctx)) { > >> compose_recirculate_action(ctx, ofpacts, a, ofpacts_len); > >> return; > >> } > >> diff --git a/tests/automake.mk b/tests/automake.mk > >> index ccce112..894a5d9 100644 > >> --- a/tests/automake.mk > >> +++ b/tests/automake.mk > >> @@ -20,6 +20,7 @@ TESTSUITE_AT = \ > >> tests/ofp-errors.at \ > >> tests/ovs-ofctl.at \ > >> tests/odp.at \ > >> + tests/mpls-xlate.at \ > >> tests/multipath.at \ > >> tests/bfd.at \ > >> tests/cfm.at \ > >> diff --git a/tests/mpls-xlate.at b/tests/mpls-xlate.at > >> new file mode 100644 > >> index 0000000..e2ef2e7 > >> --- /dev/null > >> +++ b/tests/mpls-xlate.at > >> @@ -0,0 +1,50 @@ > >> +AT_BANNER([mpls_xlate]) > >> + > >> +AT_SETUP([MPLS xlate action]) > >> + > >> +OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy > >> ofport_request=1]) > >> + > >> +AT_CHECK([ovs-appctl dpif/show], [0], [dnl > >> +dummy@ovs-dummy: hit:0 missed:0 > >> + br0: > >> + br0 65534/100: (dummy) > >> + p0 1/1: (dummy) > >> +]) > >> + > >> +dnl Setup single MPLS tags. > >> +AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 > >> in_port=local,dl_type=0x0800,action=push_mpls:0x8847,set_field:10-\>mpls_label,output:1]) > >> +AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 > >> dl_type=0x8847,in_port=1,mpls_label=20,action=pop_mpls:0x0800,output:LOCAL]) > >> + > >> +dnl Test MPLS push > >> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > >> 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], > >> [0], [stdout]) > >> +AT_CHECK([tail -1 stdout], [0], > >> + [Datapath actions: > >> push_mpls(label=10,tc=0,ttl=64,bos=1,eth_type=0x8847),1 > >> +]) > >> + > >> +dnl Test MPLS pop > >> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > >> 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=20,tc=0,ttl=64,bos=1)'], > >> [0], [stdout]) > >> +AT_CHECK([tail -1 stdout], [0], > >> + [Datapath actions: pop_mpls(eth_type=0x800),100 > >> +]) > >> + > >> +dnl Setup multiple MPLS tags. > >> +AT_CHECK([ovs-ofctl del-flows br0]) > >> + > >> +AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 > >> in_port=local,dl_type=0x0800,action=push_mpls:0x8847,set_field:10-\>mpls_label,push_mpls:0x8847,set_field:20-\>mpls_label,output:1]) > >> +AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 > >> table=0,dl_type=0x8847,in_port=1,mpls_label=60,action=pop_mpls:0x8847,goto_table:1]) > >> +AT_CHECK([ovs-ofctl -O OpenFlow13 add-flow br0 > >> table=1,dl_type=0x8847,in_port=1,mpls_label=50,action=pop_mpls:0x0800,output:LOCAL]) > >> + > >> +dnl Double MPLS push > >> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > >> 'in_port(100),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x0800),ipv4(src=1.1.2.92,dst=1.1.2.88,proto=47,tos=0,ttl=64,frag=no)'], > >> [0], [stdout]) > >> +AT_CHECK([tail -1 stdout], [0], > >> + [Datapath actions: > >> push_mpls(label=10,tc=0,ttl=64,bos=1,eth_type=0x8847),push_mpls(label=20,tc=0,ttl=64,bos=0,eth_type=0x8847),1 > >> +]) > >> + > >> +dnl Double MPLS pop > >> +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy > >> 'in_port(1),eth(src=f8:bc:12:44:34:b6,dst=f8:bc:12:46:58:e0),eth_type(0x8847),mpls(label=60,tc=0/0,ttl=64,bos=0)'], > >> [0], [stdout]) > >> +AT_CHECK([tail -1 stdout], [0], > >> + [Datapath actions: pop_mpls(eth_type=0x8847),recirc(300) > >> +]) > > > > It would be nice if we could trace recircs, too. > > > > That need more work outside MPLS, I will continue to work on this. > > >> + > >> +OVS_VSWITCHD_STOP > >> +AT_CLEANUP > >> diff --git a/tests/odp.at b/tests/odp.at > >> index f76aaa1..8f96c6a 100644 > >> --- a/tests/odp.at > >> +++ b/tests/odp.at > >> @@ -84,8 +84,6 @@ dnl Internally a stack of 3 LSEs will be used with the > >> trailing LSEs > >> dnl set to zero. This is reflected when the key is formated > >> sed '/bos=0/{ > >> s/^/ODP_FIT_TOO_LITTLE: / > >> -s/mpls(label=100,tc=7,ttl=100,bos=0)/mpls(lse0=0x64e64,lse1=0,lse2=0)/ > >> -s/mpls(label=1000,tc=4,ttl=200,bos=0)/mpls(lse0=0x3e88c8,lse1=0,lse2=0)/ > >> }' < odp-in.txt > odp-out.txt > >> > >> AT_CHECK_UNQUOTED([ovstest test-odp parse-keys < odp-in.txt], [0], [`cat > >> odp-out.txt` > >> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at > >> index baa942f..231c57f 100644 > >> --- a/tests/ofproto-dpif.at > >> +++ b/tests/ofproto-dpif.at > >> @@ -2054,13 +2054,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:01:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> ]) > >> > >> @@ -2108,13 +2108,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) > >> data_len=58 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=58 in_port=1 > >> (via action) data_len=58 (unbuffered) > >> tcp,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 > >> tcp_csum:7744 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) > >> data_len=58 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=58 in_port=1 > >> (via action) data_len=58 (unbuffered) > >> tcp,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 > >> tcp_csum:7744 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=58 in_port=1 (via action) > >> data_len=58 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=58 in_port=1 > >> (via action) data_len=58 (unbuffered) > >> tcp,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:02:00,dl_dst=50:54:00:00:00:07,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=255,tp_src=80,tp_dst=0,tcp_flags=0 > >> tcp_csum:7744 > >> ]) > >> > >> @@ -2190,13 +2190,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:00,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=30,mpls_bos=1 > >> ]) > >> > >> @@ -2218,13 +2218,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> ]) > >> > >> @@ -2246,13 +2246,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:03:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=29,mpls_bos=1 > >> ]) > >> > >> @@ -2376,13 +2376,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mplsm,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:01,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> ]) > >> > >> @@ -2402,13 +2402,13 @@ OVS_WAIT_UNTIL([test `wc -l < ofctl_monitor.log` > >> -ge 6]) > >> OVS_APP_EXIT_AND_WAIT(ovs-ofctl) > >> > >> AT_CHECK([cat ofctl_monitor.log], [0], [dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> dnl > >> -NXT_PACKET_IN (xid=0x0): cookie=0xd total_len=62 in_port=1 (via action) > >> data_len=62 (unbuffered) > >> +NXT_PACKET_IN (xid=0x0): table_id=254 cookie=0x0 total_len=62 in_port=1 > >> (via action) data_len=62 (unbuffered) > >> mpls,in_port=0,vlan_tci=0x0000,dl_src=60:66:66:66:05:10,dl_dst=50:54:00:00:00:07,mpls_label=20,mpls_tc=0,mpls_ttl=31,mpls_bos=1 > >> ]) > >> > >> diff --git a/tests/testsuite.at b/tests/testsuite.at > >> index d13732f..3792328 100644 > >> --- a/tests/testsuite.at > >> +++ b/tests/testsuite.at > >> @@ -132,6 +132,7 @@ m4_include([tests/ofp-util.at]) > >> m4_include([tests/ofp-errors.at]) > >> m4_include([tests/ovs-ofctl.at]) > >> m4_include([tests/odp.at]) > >> +m4_include([tests/mpls-xlate.at]) > >> m4_include([tests/multipath.at]) > >> m4_include([tests/learn.at]) > >> m4_include([tests/vconn.at]) > >> -- > >> 1.7.1 > >> > >> _______________________________________________ > >> dev mailing list > >> dev@openvswitch.org > >> http://openvswitch.org/mailman/listinfo/dev > > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev