[ovs-discuss] [ovs-dev] fix the mod_vlan_vid actions with OpenFlow13.
Eric Garver
e at erig.me
Wed Aug 22 18:59:50 UTC 2018
On Wed, Aug 22, 2018 at 02:17:33AM +0000, Lilijun (Jerry, Cloud Networking) wrote:
> Hi Eric and all,
>
> Thanks for Eric's advice very much.
>
> But in my opinion, this issue reported from wangyunjian is something about feature's compatibility.
>
> Using the rule: ovs-ofctl -O OpenFlow13 add-flow ovsbr0 " table=0,priority=2,in_port=1 actions=mod_vlan_vid:3,NORMAL",
> the action mod_vlan_id's behavior is only to modify a packet's vlan id before we introduce the feature of QinQ.
> But now it has changed to push an outer vlan unexpectedly.
>
> The same openflow rules will act with different functions. That maybe bring user's packets being handled with a wrong manner and dropped unexpectedly.
>
> So, I think we'd better fix it to keep the compatibility instead of asking OVS's users for rules configuration changed to another action.
Unfortunately, I don't know a way to fix it without breaking something
else.
I'd like to reiterate that mod_vlan_vid without qualifying a vlan in the
match only worked pre-QinQ because the PUSH_VLAN would "push" a new tag
by overwriting the existing VLAN - albeit with no observable side effect
due to the follow-up SET_VLAN_VID.
ovs-ofctl has no information other than the match qualifiers. If there
is no vlan being matched it assumes the mod_vlan_vid should also try and
push a VLAN header. set_vlan_vid (OF >= 1.1) does not make this
assumption.
>
> The first patch from wangyunjian can worked without any compatibility broken although it's a bit complicated.
The initial patch is buggy as I pointed out in my original reply. It
breaks the explicit "push_vlan" action. I would guess that "make
check-kernel" and "make check-system-userspace" fail on the 802.1ad
tests.
The second patch is also buggy. It breaks the mod_vlan_vid action for
non-tagged packets. It won't push a VLAN tag at all.
> Do you have any better and simpler solutions or ideas?
Not at the moment. Maybe someone on the list can come up with something.
>
> B.R.
> Lilijun
>
> -----Original Message-----
> From: ovs-dev-bounces at openvswitch.org [mailto:ovs-dev-bounces at openvswitch.org] On Behalf Of Eric Garver
> Sent: Tuesday, August 21, 2018 9:45 PM
> To: wangyunjian <wangyunjian at huawei.com>
> Cc: dev at openvswitch.org; Zhoulei (stone, Cloud Networking) <stone.zhou at huawei.com>; ovs-discuss at openvswitch.org; thomasfherbert at gmail.com
> Subject: Re: [ovs-dev] [ovs-discuss] fix the mod_vlan_vid actions with OpenFlow13.
>
> On Tue, Aug 21, 2018 at 02:23:33AM +0000, wangyunjian wrote:
> >
> >
> > > -----Original Message-----
> > > From: Eric Garver [mailto:e at erig.me]
> > > Sent: Monday, August 20, 2018 9:15 PM
> > > To: wangyunjian <wangyunjian at huawei.com>
> > > Cc: dev at openvswitch.org; ovs-discuss at openvswitch.org; Zhoulei
> > > (stone, Cloud Networking) <stone.zhou at huawei.com>;
> > > thomasfherbert at gmail.com
> > > Subject: Re: [ovs-discuss] [ovs-dev] fix the mod_vlan_vid actions
> > > with OpenFlow13.
> > >
> > > On Mon, Aug 20, 2018 at 02:17:34AM +0000, wangyunjian wrote:
> > > >
> > > >
> > > [..]
> > > > > > On Fri, Aug 17, 2018 at 12:15:30PM +0000, wangyunjian wrote:
> > > > > > > The datapath flow which pushs double vlan was found using
> > > > > > > ovs-appctl dpctl/dump-flows, but the flow was set
> > > > > > > mod_vlan_vid
> > > actions.
> > > > > > > This problem is discovered from "Add support for 802.1ad
> > > > > > > (QinQ
> > > > > tunneling)".
> > > > > >
> > > > > > Thanks for reporting. Can you say what version of OVS you're using?
> > > > > > Including any extra patches you may have applied.
> > > > >
> > > > > The version of OVS is master branch(git log "
> > > > > be5e6d6822e60b5b84ac65dcd1b249145356a809
> > > > > ofp-ed-props: Fix hang for crafted OpenFlow encap/decap properties".).
> > > > >
> > > > > >
> > > > > > > My test steps:
> > > > > > >
> > > > > > > 1) ovs-vsctl add-br ovsbr0 -- set bridge ovsbr0 datapath_type=netdev
> > > > > > > ovs-vsctl add-port ovsbr0 eth2 -- set Interface eth2
> > > > > > > type=dpdk
> > > > > > options:dpdk-devargs=0000:03:00.0
> > > > > > > ovs-ofctl -O OpenFlow13 add-flow ovsbr0 "
> > > > > > > table=0,priority=2,in_port=1
> > > > > > actions=mod_vlan_vid:3,NORMAL"
> > >
> > > What happens if you add a wildcard VLAN match here?
> > > e.g. vlan_tci=0x1000/0x1000
> >
> > The packet is set vlan_vid ok with adding the wildcard VLAN match.
> >
> > linux-jrWzwZ:/data/wyj/git/ovs # ovs-ofctl -O OpenFlow13 add-flow ovsbr0 "cookie=0xb043f0d196265635,table=0,priority=2,in_port=1,vlan_tci=0x1000/0x1000 actions=mod_vlan_vid:2,NORMAL"
> > linux-jrWzwZ:/data/wyj/git/ovs # tcpdump -i ovsbr0 -ne
> > tcpdump: verbose output suppressed, use -v or -vv for full protocol
> > decode listening on ovsbr0, link-type EN10MB (Ethernet), capture size
> > 65535 bytes
> > 10:06:53.284556 90:17:ac:b0:0a:ff > Broadcast, ethertype 802.1Q
> > (0x8100), length 64: vlan 2, p 0, ethertype ARP, Request who-has
> > 3.3.3.18 tell 3.3.3.17, length 46
> > 10:06:54.286542 90:17:ac:b0:0a:ff > Broadcast, ethertype 802.1Q
> > (0x8100), length 64: vlan 2, p 0, ethertype ARP, Request who-has
> > 3.3.3.18 tell 3.3.3.17, length 46
> > 10:06:56.283594 90:17:ac:b0:0a:ff > Broadcast, ethertype 802.1Q
> > (0x8100), length 64: vlan 2, p 0, ethertype ARP, Request who-has
> > 3.3.3.18 tell 3.3.3.17, length 46
>
> The mod_vlan_vid will implicitly insert a PUSH_VLAN action if the match/flow does not qualify a vlan regardless of the specified OF version. This is done on the ovs-ofctl side before the flow is sent over to ovs-vswitchd - long before any packets are involved.
>
> You have two options:
>
> 1) qualify the VLAN as you've done above
>
> 2) Use set_vlan_vid action with "-O OpenFlow11" or greater. It will
> _not_ attempt to push a VLAN.
>
> This worked before 802.1ad/QinQ support only by accident because the PUSH_VLAN action blindly overwrote the existing VLAN.
>
> Hope that helps.
> Eric.
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> _______________________________________________
> discuss mailing list
> discuss at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-discuss
More information about the discuss
mailing list