[ovs-dev] [PATCH] ofproto: Fix MPLS multiple Push pop action.

Pravin Shelar pshelar at nicira.com
Thu Dec 18 18:31:43 UTC 2014


On Tue, Dec 16, 2014 at 3:10 PM, Jarno Rajahalme <jrajahalme at nicira.com> wrote:
> LGTM,
>
> With some comments below:
>
> Acked-by: Jarno Rajahalme <jrajahalme at nicira.com>
>
>   Jarno
>
> On Dec 15, 2014, at 12:37 PM, Pravin B Shelar <pshelar at 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.salsano at uniroma2.it>
>> Signed-off-by: Pravin B Shelar <pshelar at 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.

>>         }
>> -
>> -        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 at 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 at openvswitch.org
>> http://openvswitch.org/mailman/listinfo/dev
>



More information about the dev mailing list