[openstack-dev] The OVS and Provider Networks section of the guide to Neutron in DevStack
Mike Spreitzer
mspreitz at us.ibm.com
Wed Oct 21 05:05:00 UTC 2015
First let me make sure I understand what this section (
http://docs.openstack.org/developer/devstack/guides/neutron.html#neutron-networking-with-open-vswitch-and-provider-networks
) is trying to say. The second paragraph is saying that some
infrastructure provider has allocated a VLAN tag (and the later display of
localrc contents uses 2010 as that tag) and an address range (later seen
to be 203.0.113.0/24) to use on that VLAN on provider_net. The exhibited
localrc contents also say that tenant networks can be created, using VLAN
tags drawn from the range 3001:4000. Those localrc contents do not
explicitly say which ethernet --- provider_net or control_plane --- will
carry those tenant VLANs. Which ethernet do you think those localrc
contents imply will carry the tenant VLANs?
Second, I tested this using stable/liberty on Ubuntu 14.04.03, and got a
few surprises. I did exactly as described by that section, starting from
a "physical network setup" as described there (but it was actually
virtual, using VirtualBox), and using the localrc contents exhibited there
except patched to fix bugs
https://bugs.launchpad.net/devstack/+bug/1508195 and
https://bugs.launchpad.net/devstack/+bug/1508202 (the latter by sadly
stipulating IP_VERSION=4). After creating the controller, compute1, and
compute2 I looked at `ovs-vsctl show` on the controller, and found that
br-tun had two VxLan ports (see display below). This surprised me because
I thought that VxLan can itself handle multiple hosts, it is not just
point-to-point.
Bridge br-tun
fail_mode: secure
Port "vxlan-0a000003"
Interface "vxlan-0a000003"
type: vxlan
options: {df_default="true", in_key=flow,
local_ip="10.0.0.2", out_key=flow, remote_ip="10.0.0.3"}
Port patch-int
Interface patch-int
type: patch
options: {peer=patch-tun}
Port "vxlan-0a000004"
Interface "vxlan-0a000004"
type: vxlan
options: {df_default="true", in_key=flow,
local_ip="10.0.0.2", out_key=flow, remote_ip="10.0.0.4"}
Port br-tun
Interface br-tun
type: internal
My second surprise is that the path from controller to the VM's host goes
over the control_plane network --- somewhat contrary to its name!
My third surprise came after I made a VM on the provider network and tried
to ping it from the router. I got no response. A little investigation
shows that the router's ARP request for the VM gets lost somewhere between
br-int and br-tun. `tcpdump -nne -i br-int` on the controller shows the
ARP requests appearing with VLAN tag 1 (which is right, the external VLAN
tags are translated to internal host-local tags on br-int), and no ARP
replies. OTOH, `tcpdump -nne -i br-tun` does not even find the ARP
requests.
Digging a little deeper, I looked at the OpenFlow tables on the
controller. It looks like the flow table for br-tun does indeed prescribe
that all traffic coming from outside be dropped! Here is the output from
`ovs-appctl bridge/dump-flows br-tun`:
duration=23916s, priority=1, n_packets=0, n_bytes=0,
priority=1,in_port=3,actions=resubmit(,4)
duration=39904s, priority=1, n_packets=82, n_bytes=7025,
priority=1,in_port=1,actions=resubmit(,2)
duration=36711s, priority=1, n_packets=0, n_bytes=0,
priority=1,in_port=2,actions=resubmit(,4)
duration=39904s, priority=0, n_packets=7, n_bytes=558,
priority=0,actions=drop
table_id=2, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00,actions=resubmit(,20)
table_id=2, duration=39904s, priority=0, n_packets=82, n_bytes=7025,
priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,actions=resubmit(,22)
table_id=3, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,actions=drop
table_id=4, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,actions=drop
table_id=6, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,actions=drop
table_id=10, duration=39904s, priority=1, n_packets=0, n_bytes=0,
priority=1,actions=learn(table=20,hard_timeout=300,priority=1,cookie=0xb64bc7164f7e1137,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1
table_id=20, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,actions=resubmit(,22)
table_id=22, duration=39904s, priority=0, n_packets=82, n_bytes=7025,
priority=0,actions=drop
table_id=254, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,reg0=0x3,actions=drop
table_id=254, duration=39904s, priority=0, n_packets=1, n_bytes=90,
priority=0,reg0=0x1,actions=controller(reason=no_match)
table_id=254, duration=39904s, priority=0, n_packets=0, n_bytes=0,
priority=0,reg0=0x2,actions=drop
By examining `ovs-vsctl list Interface` I can see that patch-int is
OpenFlow port 1, vxlan-0a000003 is port 2, and vxlan-0a000004 is port 3.
So the router sends the ARP request to the ethernet broadcast address, it
comes into the controller through eth1 with VLAN tag 2010, and goes
through br-ex to br-int --- where it appears with VLAN tag 1 (I can see
both of those with `tcpdump`). The second line of the flow dump above
shows there have been 82 such packets. They got resubmitted to table 2,
where they all matched the second rule of that table and got resubmitted
to table 22 --- which dropped them all.
Did I do something wrong, or is this a bug --- and, if so, is it in
DevStack doc, DevStack scripts, or Neutron?
(Voluminous details available, if knew the preferred way to transfer
them.)
Thanks,
Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20151021/ed0a354c/attachment.html>
More information about the OpenStack-dev
mailing list