Applied to master, branch-2.3, branch-2.1, On Sun, Jun 7, 2015 at 11:33 AM, Alex Wang <al...@nicira.com> wrote:
> > >> > Before this commit, this is not enforced, so OpenFlow flow like >> > "vlan_tci=0x000a/0x0fff,action=output:local" can generate datapath >> > flow like "vlan(vid=5/0xfff,pcp=0/0x0,cfi=1/0)". >> > >> >> I'd think exact match on hex 'a' would yield vid=10 instead of 5. > > > > This really bites me!, I must be really more careful copying from > different > tests. > > > >> > With the OVS datapath check, the installation of such datapath >> > flow will be rejected with: >> > "|WARN|system@ovs-system: failed to put[create][modify] (Invalid >> argument)" >> > >> > This commit makes ovs userspace always exact match the VLAN_CFI >> > bit if the flow matches VLAN TCI. >> > >> > Reported-by: Ronald Lee <ronald...@vmware.com> >> > Signed-off-by: Alex Wang <al...@nicira.com> >> > >> > --- >> > PATCH->V2: >> > - Fix careless testing. >> > - Adopt Jarno's suggestions. >> > --- >> > ofproto/ofproto-dpif-xlate.c | 4 ++++ >> > tests/ofproto-dpif.at | 16 ++++++++++++++++ >> > 2 files changed, 20 insertions(+) >> > >> > diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c >> > index 71b8bef..6bb8518 100644 >> > --- a/ofproto/ofproto-dpif-xlate.c >> > +++ b/ofproto/ofproto-dpif-xlate.c >> > @@ -5033,6 +5033,10 @@ xlate_actions(struct xlate_in *xin, struct >> xlate_out *xout) >> > wc->masks.tp_src &= htons(UINT8_MAX); >> > wc->masks.tp_dst &= htons(UINT8_MAX); >> > } >> > + /* VLAN_TCI CFI bit must be matched if any of the TCI is >> matched. */ >> > + if (wc->masks.vlan_tci) { >> > + wc->masks.vlan_tci |= htons(VLAN_CFI); >> > + } >> > } >> > } >> > >> > diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at >> > index b5a9ad9..ef7c5c0 100644 >> > --- a/tests/ofproto-dpif.at >> > +++ b/tests/ofproto-dpif.at >> > @@ -6673,3 +6673,19 @@ >> icmp6,vlan_tci=0x0000,dl_src=00:00:86:05:80:da,dl_dst=00:60:97:07:69:ea,ipv6_src >> > OVS_VSWITCHD_STOP >> > AT_CLEANUP >> > >> > +# Tests the exact match of CFI bit in installed datapath flows >> matching VLAN. >> > +AT_SETUP([ofproto-dpif - vlan matching]) >> > +OVS_VSWITCHD_START( >> > + [add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1]) >> > +AT_CHECK([ovs-appctl vlog/set dpif:dbg dpif_netdev:dbg]) >> > + >> > +AT_CHECK([ovs-ofctl del-flows br0]) >> > +AT_CHECK([ovs-ofctl add-flow br0 >> "vlan_tci=0x000a/0x0fff,action=output:local"]) >> > + >> > +AT_CHECK([ovs-appctl netdev-dummy/receive p0 >> 'in_port(1),eth(src=50:54:00:00:00:09,dst=50:54:00:00:00:0a),eth_type(0x8100),vlan(vid=10,pcp=0),encap(eth_type(0x0800),ipv4(src=10.0.0.2,dst=10.0.0.1,proto=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0))']) >> > + >> > +AT_CHECK([cat ovs-vswitchd.log | grep 'in_port=[[1]]' | >> FILTER_FLOW_INSTALL | STRIP_XOUT], [0], [dnl >> > +recirc_id=0,ip,in_port=1,dl_vlan=10,nw_frag=no, actions: <del> >> > +]) >> > +OVS_VSWITCHD_STOP >> > +AT_CLEANUP >> > \ No newline at end of file >> >> Maybe add the new line to the end of file? >> > > Will do, > > >> > -- >> > 1.7.9.5 >> > >> > > Thanks, > Alex Wang, > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev