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

Reply via email to