[ovs-discuss] OVS - how to use geneve with variable length options ?

Manish Chopra manish.chopra at qlogic.com
Fri Sep 2 10:38:07 UTC 2016


> -----Original Message-----
> From: Jesse Gross [mailto:jesse at kernel.org]
> Sent: Friday, September 02, 2016 4:24 AM
> To: Manish Chopra <manish.chopra at qlogic.com>
> Cc: pshelar at nicira.com; bugs at openvswitch.org
> Subject: Re: OVS - how to use geneve with variable length options ?
> 
> On Thu, Sep 1, 2016 at 11:40 AM, Manish Chopra <manish.chopra at qlogic.com>
> wrote:
> >> -----Original Message-----
> >> From: Jesse Gross [mailto:jesse at kernel.org]
> >> Sent: Wednesday, August 31, 2016 10:26 PM
> >> To: Manish Chopra <manish.chopra at qlogic.com>
> >> Cc: pshelar at nicira.com; bugs at openvswitch.org
> >> Subject: Re: OVS - how to use geneve with variable length options ?
> >>
> >> On Wed, Aug 31, 2016 at 12:13 AM, Manish Chopra
> >> <manish.chopra at qlogic.com> wrote:
> >> >> -----Original Message-----
> >> >> From: Jesse Gross [mailto:jesse at kernel.org]
> >> >> Sent: Wednesday, August 31, 2016 12:55 AM
> >> >> To: Manish Chopra <manish.chopra at qlogic.com>
> >> >> Cc: pshelar at nicira.com; bugs at openvswitch.org
> >> >> Subject: Re: OVS - how to use geneve with variable length options ?
> >> >> On Tue, Aug 30, 2016 at 11:24 AM, Manish Chopra
> >> >> <manish.chopra at qlogic.com> wrote:
> >> >> > When I run traffic between both OVS bridge – I see that it uses geneve
> >> >> > header of size 8 bytes.
> >> >> >
> >> >> > I was wondering if I could use GENEVE with options using OVS ? which
> >> would
> >> >> > have geneve header size more than 8 bytes ?
> >> >> >
> >> >> >
> >> >> >
> >> >> > I couldn’t find anything about what arguments I should be using with
> >> >> > ovs-vsctl on both setups to use GENEVE with options ?
> >> >> >
> >> >> > Could you please supply necessary configuration/commands which I can
> try
> >> to
> >> >> > use GENEVE with options while running traffic ??
> >> >>
> >> >> In order to use options with Geneve tunnels, you'll need to map TLVs
> >> >> onto a set of tun_metadataXXX fields, which can then be used with any
> >> >> OVS flow mechanism, such as matches and actions. There is some
> >> >> information on how to do this in the ovs-ofctl man page:
> >> >> https://github.com/openvswitch/ovs/blob/v2.5.0/utilities/ovs-
> >> ofctl.8.in#L427
> >> >>
> >> >> You'll need to be using OVS 2.5 or newer to do this.
> >> >>
> >> > Hi Jesse, I have tried below configuration using ovs-ofctl on top of earlier
> >> configuration using ovs-vsctl on both setups
> >> > , as referenced in man page.
> >> >
> >> > ovs-ofctl add-tlv-map br2 "{class=0xffff,type=0x80,len=4}-
> >tun_metadata0"
> >> > ovs-ofctl add-flow br2 tun_metadata0=1234,actions=controller
> >> >
> >> > But I still see geneve header is used of size 8 Bytes when I run TCP stream
> >> between OVS bridges.
> >> > Not sure if I am missing something in the configuration using ovs-ofctl ?
> >>
> >> The flow that you have above will match incoming packets with that
> >> particular option, rather than generate it. In this case, any incoming
> >> packet with class 0xffff, type 0x80, and value 1234 will be sent to
> >> the controller.
> >>
> >> To generate packets with options, you need an action such as
> >> set_field. For example:
> >> ovs-ofctl add-flow br2
> >> "in_port=LOCAL,actions=set_field:1234->tun_metadata0,<TUNNEL PORT>"
> >
> > Hi Jesse,
> > I am not much familiar with OVS flow mechanism and these commands.
> > I just want to try GENEVE tunnel traffic with OVS which could use variable size
> geneve header in the packet to
> > test if our NIC offloads works fine with variable length geneve header or not.
> >
> > Below is my setup configuration  - two physical hosts which are connected
> back to back using NIC port [eth1 and eth2]
> > Below are IP addresses of OVS bridges and NIC interfaces.
> >
> > eth1- 192.168.44.44
> > eth2- 192.168.44.45
> > br2  [Setup 1] – 192.168.55.44
> > br2  [Setup 2] -  192.168.55.45
> >
> >
> >                Setup  1                                                                                              Setup 2
> >
> > ##########################
> #########################
> > OVS br2 -------------- eth1 - ###  --------------------------------------- ### - eth2 ----
> -----------OVS br2
> > ##########################
> #########################
> >
> > Setup 1 -
> > ovs-vsctl add-br br2
> > ovs-vsctl add-port br2 gnv0 -- set interface gnv0 type=geneve
> options:remote_ip=192.168.44.45
> >
> > Setup 2 -
> > ovs-vsctl add-br br2
> > ovs-vsctl add-port br2 gnv0 -- set interface gnv0 type=geneve
> options:remote_ip=192.168.44.44
> >
> > After adding geneve port on both setups - I can ping and run TCP traffic
> between these bridge [which used geneve header of 8 bytes]
> >
> > ping 192.168.55.45
> > PING 192.168.55.45 (192.168.55.45) 56(84) bytes of data.
> > 64 bytes from 192.168.55.45: icmp_seq=1 ttl=64 time=2.46 ms
> > 64 bytes from 192.168.55.45: icmp_seq=2 ttl=64 time=0.257 ms
> > ^C
> > --- 192.168.55.45 ping statistics ---
> > 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
> >
> > After that as you suggested - I tried adding flow using below command to run
> geneve with options.
> >
> > ovs-ofctl add-flow br2 "in_port=LOCAL,actions=set_field:1234-
> >tun_metadata0,6081"
> 
> The port number at the end of the command is not the UDP port number
> but the switch port number of the Geneve port. This is dynamically
> assigned so you'll need to fetch it yourself on each system (though in
> all likelihood it is 1 if there are no other ports on the system. You
> can retrieve it with:
> ovs-vsctl get interface gnv0 ofport
> 
> Otherwise, I believe that the steps you used previously (including
> setting up the TLV map on both machines) should work and generate
> options.

Thanks Jesse, I tried below and it actually used GENEVE header with options [Total geneve header size = 16 bytes].

ovs-vsctl add-br br2
ifconfig br3 192.168.55.44
ovs-vsctl add-port br2 gnv0 -- set interface gnv0 type=geneve options:remote_ip=192.168.44.45
ovs-ofctl add-tlv-map br2 "{class=0xffff,type=0x80,len=4}->tun_metadata0"
ovs-ofctl add-flow br2 "in_port=LOCAL,actions=set_field:1234->tun_metadata0,1"
 
I believe it used 4 bytes of Variable options data [with value 1234] in option header.

If I were to add more variable options data, How can I achieve that ??

For example If I need to use GENEVE header total length of 32, 64, 128 bytes etc. etc
What commands can I use to add more variable options data ?

Thanks,
Manish


More information about the discuss mailing list