[ovs-dev] OVN sandbox progress

Ben Pfaff blp at nicira.com
Thu Jun 11 06:53:47 UTC 2015


I want to report progress I've made tonight on an extended form of the
OVS sandbox that I expect to be useful for testing OVN.  The main point
of the extension is to make it easy to start up multiple sandboxed
instances of OVS and then connect them together.

What I have is at:
        https://github.com/blp/ovs-reviews/tree/ovn-sandbox

Please don't bother to review it; the code and its history is a mess.
But I want to demonstrate some of the potential.  If you check this out
and build, then run a command like this (assuming that you keep your
build directory as a subdirectory of your source directory as I do;
otherwise adjust the path on --init):

        utilities/ovs-sandbox --ovn --init=../ovn/sbtest

Before I show what this does, take a look at sbtest.  It's a shell
script that uses a mix of OVS/OVN commands and some extra commands
provided by ovs-sandbox:

    # Create a pair of sandboxes.
    sb_add hv0
    sb_add hv1

    # Create a network for connecting sandboxes together,
    # then attach our sandboxes to it with specified IP addresses,
    # via a new bridge in each of hv0 and hv1 called "br-phys":
    net_add n1
    ovn_attach n1 hv0 br-phys 192.168.0.1
    ovn_attach n1 hv1 br-phys 192.168.0.2

    # Create logical ports and networks:
    ovn-nbctl lswitch-add br0
    ovn-nbctl lport-add br0 lp0
    ovn-nbctl lport-set-macs lp0 f0:00:00:00:00:00
    ovn-nbctl lport-add br0 lp1
    ovn-nbctl lport-set-macs lp1 f0:11:11:11:11:11

    # Create ports on hv0 and hv1 that instantiate lp0 and lp1
    # (the syntax "as $sandbox" means to run the following command
    # in the context of $sandbox":
    as hv0 ovs-vsctl add-port br-int vif0 -- set Interface vif0 type=dummy external-ids:iface-id=lp0
    as hv1 ovs-vsctl add-port br-int vif1 -- set Interface vif1 type=dummy external-ids:iface-id=lp1

    # Run once for ARP resolution.
    as hv0 ovn-trace vif0 'f01111111111f000000000001234'
    # Run again for end-to-end test.
    as hv0 ovn-trace vif0 'f01111111111f000000000001234'

The interesting part is the pair of ovn-trace calls at the end.  This
injects a packet into the (simulated) system at the specified interface,
then waits 1 second, then greps all the system's logs to find out what
happened to the packet and dumps out the details.  So the first trace
shows us how the first packet gets encapsulated in a Geneve tunnel, and
then that Geneve packet gets dropped when hv0 finds that it doesn't have
the MAC address of hv1 and sends out an ARP:

----------------------------------------------------------------------
---- 0x80000000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
received on vif0: pkt_mark=0x80000000,in_port=ANY,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234

---- 0x80000000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
Bridge: br-int
Flow: pkt_mark=0x80000000,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234

Rule: table=0 cookie=0 priority=100,in_port=2
OpenFlow actions=set_field:0x1->metadata,set_field:0x1->reg6,resubmit(,16)

        Resubmitted flow: pkt_mark=0x80010000,reg6=0x1,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
        Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x0
        Resubmitted  odp: drop
        Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_type=0x1234
        Rule: table=16 cookie=0 priority=50,reg6=0x1,metadata=0x1
        OpenFlow actions=resubmit(,17)

                Resubmitted flow: unchanged
                Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x0
                Resubmitted  odp: drop
                Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
                Rule: table=17 cookie=0 priority=50,metadata=0x1,dl_dst=f0:11:11:11:11:11
                OpenFlow actions=set_field:0x2->reg7,resubmit(,18)

                        Resubmitted flow: pkt_mark=0x80010000,reg6=0x1,reg7=0x2,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
                        Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
                        Resubmitted  odp: drop
                        Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
                        Rule: table=18 cookie=0 priority=0,metadata=0x1
                        OpenFlow actions=resubmit(,19)

                                Resubmitted flow: unchanged
                                Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
                                Resubmitted  odp: drop
                                Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
                                Rule: table=19 cookie=0 priority=50,reg7=0x2,metadata=0x1
                                OpenFlow actions=resubmit(,64)

                                        Resubmitted flow: unchanged
                                        Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
                                        Resubmitted  odp: drop
                                        Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
                                        Rule: table=64 cookie=0 priority=50,reg7=0x2
                                        OpenFlow actions=set_field:0x2->tun_id,output:1
                                        output to native tunnel
                                        tunneling to 192.168.0.2 via br-phys
                                        ARP cache miss for 192.168.0.2 on bridge br-phys, sending ARP request

Final flow: pkt_mark=0x80010000,reg6=0x1,reg7=0x2,tun_id=0x2,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
Megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,tun_id=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
Datapath actions: set(skb_mark(0x80010000/0xffff0000))
This flow is handled by the userspace slow path because it:
        - Triggers tracing.
----------------------------------------------------------------------



When the second packet is sent, ARP resolution is complete, so we can
follow the path of the packet all the way from vif0 to vif1:



----------------------------------------------------------------------
---- 0x80000000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
received on vif0: pkt_mark=0x80000000,in_port=ANY,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234

---- 0x80000000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
Bridge: br-int
Flow: pkt_mark=0x80000000,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234

Rule: table=0 cookie=0 priority=100,in_port=2
OpenFlow actions=set_field:0x1->metadata,set_field:0x1->reg6,resubmit(,16)

	Resubmitted flow: pkt_mark=0x80010000,reg6=0x1,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
	Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x0
	Resubmitted  odp: drop
	Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_type=0x1234
	Rule: table=16 cookie=0 priority=50,reg6=0x1,metadata=0x1
	OpenFlow actions=resubmit(,17)

		Resubmitted flow: unchanged
		Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x0
		Resubmitted  odp: drop
		Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
		Rule: table=17 cookie=0 priority=50,metadata=0x1,dl_dst=f0:11:11:11:11:11
		OpenFlow actions=set_field:0x2->reg7,resubmit(,18)

			Resubmitted flow: pkt_mark=0x80010000,reg6=0x1,reg7=0x2,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
			Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
			Resubmitted  odp: drop
			Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
			Rule: table=18 cookie=0 priority=0,metadata=0x1
			OpenFlow actions=resubmit(,19)

				Resubmitted flow: unchanged
				Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
				Resubmitted  odp: drop
				Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
				Rule: table=19 cookie=0 priority=50,reg7=0x2,metadata=0x1
				OpenFlow actions=resubmit(,64)

					Resubmitted flow: unchanged
					Resubmitted regs: reg0=0x0 reg1=0x0 reg2=0x0 reg3=0x0 reg4=0x0 reg5=0x0 reg6=0x1 reg7=0x2
					Resubmitted  odp: drop
					Resubmitted megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
					Rule: table=64 cookie=0 priority=50,reg7=0x2
					OpenFlow actions=set_field:0x2->tun_id,output:1
					output to native tunnel
					tunneling to 192.168.0.2 via br-phys
					tunneling from fa:a8:6b:4c:97:43 192.168.0.1 to 7a:ca:d9:a0:59:42 192.168.0.2

Final flow: pkt_mark=0x80010000,reg6=0x1,reg7=0x2,tun_id=0x2,metadata=0x1,in_port=2,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
Megaflow: pkt_mark=0x80000000/0xffff0000,recirc_id=0,reg6=0,reg7=0,tun_id=0,metadata=0,in_port=2,vlan_tci=0x0000/0x1000,dl_src=00:00:00:00:00:00/01:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
Datapath actions: set(skb_mark(0x80010000/0xffff0000)),tnl_push(tnl_port(6081),header(size=50,type=5,eth(dst=7a:ca:d9:a0:59:42,src=fa:a8:6b:4c:97:43,dl_type=0x0800),ipv4(src=192.168.0.1,dst=192.168.0.2,proto=17,tos=0,ttl=64,frag=0x40),udp(src=0,dst=6081,csum=0x0),geneve(vni=0x2)),out_port(1))
This flow is handled by the userspace slow path because it:
	- Triggers tracing.

---- 0x80010000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
Bridge: br-phys
Flow: pkt_mark=0x80010000,udp,in_port=LOCAL,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

Rule: table=0 cookie=0 priority=0
OpenFlow actions=NORMAL
forwarding to learned port

Final flow: pkt_mark=0x80020000,udp,in_port=LOCAL,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081
Megaflow: pkt_mark=0x80010000/0xffff0000,recirc_id=0,ip,in_port=LOCAL,vlan_tci=0x0000/0x1fff,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_frag=no
Datapath actions: set(skb_mark(0x80020000/0xffff0000)),101
This flow is handled by the userspace slow path because it:
	- Triggers tracing.

---- 0x80020000 ---- /home/blp/nicira/ovs/_build/sandbox/sandbox/ovs-vswitchd.log ----
received on hv0_br-phys: pkt_mark=0x80020000,udp,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

---- 0x80020000 ---- /home/blp/nicira/ovs/_build/sandbox/sandbox/ovs-vswitchd.log ----
Bridge: n1
Flow: pkt_mark=0x80020000,udp,in_port=1,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

Rule: table=0 cookie=0 priority=0
OpenFlow actions=NORMAL
forwarding to learned port

Final flow: pkt_mark=0x80030000,udp,in_port=1,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081
Megaflow: pkt_mark=0x80020000/0xffff0000,recirc_id=0,ip,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_frag=no
Datapath actions: set(skb_mark(0x80030000/0xffff0000)),3
This flow is handled by the userspace slow path because it:
	- Triggers tracing.

---- 0x80020000 ---- /home/blp/nicira/ovs/_build/sandbox/hv0/ovs-vswitchd.log ----
sent on br-phys_n1: pkt_mark=0x80020000,udp,in_port=1,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

---- 0x80030000 ---- /home/blp/nicira/ovs/_build/sandbox/sandbox/ovs-vswitchd.log ----
sent on hv1_br-phys: pkt_mark=0x80030000,udp,in_port=2,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

---- 0x80030000 ---- /home/blp/nicira/ovs/_build/sandbox/hv1/ovs-vswitchd.log ----
received on br-phys_n1: pkt_mark=0x80030000,udp,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

---- 0x80030000 ---- /home/blp/nicira/ovs/_build/sandbox/hv1/ovs-vswitchd.log ----
Bridge: br-phys
Flow: pkt_mark=0x80030000,udp,in_port=1,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081

Rule: table=0 cookie=0 priority=0
OpenFlow actions=NORMAL
forwarding to learned port

Final flow: pkt_mark=0x80040000,udp,in_port=1,vlan_tci=0x0000,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,nw_dst=192.168.0.2,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=32805,tp_dst=6081
Megaflow: pkt_mark=0x80030000/0xffff0000,recirc_id=0,udp,in_port=1,vlan_tci=0x0000/0x1fff,dl_src=fa:a8:6b:4c:97:43,dl_dst=7a:ca:d9:a0:59:42,nw_src=192.168.0.1,tp_dst=6081
Datapath actions: set(skb_mark(0x80040000/0xffff0000)),tnl_pop(6081)
This flow is handled by the userspace slow path because it:
	- Triggers tracing.

---- 0x80040000 ---- /home/blp/nicira/ovs/_build/sandbox/hv1/ovs-vswitchd.log ----
Bridge: br-int
Flow: pkt_mark=0x80040000,tun_id=0x2,tun_src=192.168.0.1,tun_dst=192.168.0.2,tun_gbp_id=0,tun_gbp_flags=0,tun_tos=0,tun_ttl=64,key,in_port=1,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234

Rule: table=0 cookie=0 priority=50,tun_id=0x2
OpenFlow actions=output:2

Final flow: pkt_mark=0x80050000,tun_id=0x2,tun_src=192.168.0.1,tun_dst=192.168.0.2,tun_gbp_id=0,tun_gbp_flags=0,tun_tos=0,tun_ttl=64,key,in_port=1,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
Megaflow: pkt_mark=0x80040000,recirc_id=0,tun_id=0x2,tun_src=192.168.0.1,tun_dst=192.168.0.2,tun_tos=0,tun_ttl=64,key,in_port=1,dl_type=0x1234
Datapath actions: set(skb_mark(0x80050000)),3
This flow is handled by the userspace slow path because it:
	- Triggers tracing.

---- 0x80050000 ---- /home/blp/nicira/ovs/_build/sandbox/hv1/ovs-vswitchd.log ----
sent on vif1: pkt_mark=0x80050000,tun_id=0x2,tun_src=192.168.0.1,tun_dst=192.168.0.2,tun_gbp_id=0,tun_gbp_flags=0,tun_tos=0,tun_ttl=64,key,in_port=6081,vlan_tci=0x0000,dl_src=f0:00:00:00:00:00,dl_dst=f0:11:11:11:11:11,dl_type=0x1234
----------------------------------------------------------------------

Anyway, there's cleanup to do, and some of the stuff I had to do to get
the above traces to work might require rethinking, but I think that the
basic idea is sound, and comments on the ideas are welcome.

Thanks,

Ben.



More information about the dev mailing list