NetVirt Basic Tutorial

Openstack with
OpenDaylight
(A Workshop)
Vivekanandan Narasimhan, Ericsson
Vishal Thapar, Ericsson
Credits:
Andre Fredette, Red Hat
Isaku Yamahata, Intel
Sam Hague, Red Hat
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• Genius
• NetVirt
• Demo
Quick Overview - Openstack
• Openstack is a popular Opensource Cloud Operating System.
• Can be used to build our own Private or Public clouds.
• Uses Compute (Nova), Storage (Swift) and Network (Neutron)
Virtualization to realize cloud.
• Hypervisor-agnostic, Storage-array agnostic and Networking-agnostic
Overview
Openstack
&
OpenDaylight
OpenStack and OpenDaylight Integration
Network/Control Node
Controller node
OpenDaylight*
Neutron
ML2 Plugin
Networking-odl
Management Network
Data Network
Public Network
Neutron Northbound
ML2
DB
ovsdb/NetVirt
Compute Node
VM
VM
VM
Yang
Model
OV
S
Networking Node
DHCP
Agent
OV
S
Internet
Router
Overview - OpenDaylight SDN Platform
for Boron
Overview - Openstack and ODL Netvirt
• OpenStack Neutron
• networking-odl
• ODL ML2 Driver
• OpenDaylight
•
•
•
•
Neutron Northbound
NetVirt
MD-SAL
Southbound Protocols
• OVSDB
• OpenFlow
Features
Delivered
in Borondelivered in Boron
Overview
- Features
• Merge of NetVirt and
VPNService projects
• L2
• L3
• Auto-bridge creation
• Auto-tunnel creation
• Floating IP’s
• VLAN and Flat provider
network support for multiple
internal and external networks
• Security Groups
• Stateful using conntrack
• Stateless
• Learn (for OVS-DPDK)
• NAPT
• SNAT
• IPv6
• Layer 2 Gateway
Features
in Boron
DemoDelivered
Preparation
Prerequisite: You will require a laptop with 8 GB of RAM.
1. Copy and import netvirt_boron_mitaka.ova from the usb drive. The file is 4.1
GB and requires the ex-fat driver. Load the driver if needed.
2. Copy the relevant VirtualBox installer and install if not already installed.
3. Import the ova into VirtualBox.
4. Wait for further instructions to finish the configuration. The instructions will
be presented later during the demo portion of the tutorial.
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• Genius
• NetVirt
• Demo
9
Openstack
networking-odl
OpenstackNeutron
neutronand
and
networking-odl
• L2: ML2 plugin
• L3: ODL L3 plugin
• services
ML2 Plugin
...
...
...
QoS
...
...
FWaaS L2GW
ODL driver
ODL
L3
Plugin
ODL driver
Mechanism
Manager
ODL driver
Type Manager
Service
Plugins
SR-IOV
FWaaS
L2Gateway
QoS
LBaaS
BGPVPN
networking-sfc
trunk
ODL mech
driver
...
VXLAN
TypeDriver
VLAN
TypeDriver
GRE
TypeDriver
•
•
•
•
•
•
•
Neutron Server
networking-odl
Networking-odl Role
• Push down resource info from neutron into ODL
• Pass-through
• Neutron API: create/update/delete network/subnet/port/... to
• ODL neutron northbound: create/update/delete network/subnet/port/…
sounds very simple, but difficult task in distributed environment
ODL Neutron Northbound
•
•
•
•
ODL component
REST API for networking-odl
Common part of openstack integration
Neutron Northbound does
User Request
Neutron
Neutron
DB
Networking-ODL
• RestAPI for networking-odl
• YangModel for neutron info
• Mirror of openstack neutron definition
RestAPI
• Neutron Northbound does NOT
• Talk southbound protocol to program
switches
OpenDaylight
Neutron Northbound
MD-SAL
Yang
Model
OpenStack Service Provider
Openflow
OVSDB
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• OpenFlow & OVSDB
• Genius
• NetVirt
• Demo
13
Brief Overview of Open vSwitch
Open vSwitch Components
•
•
ovsdb-server
• Database that holds switch‐level configuration
• Custom database with nice properties: value constraints, weak references, garbage
collection
• Log based
• Speaks management protocol (OVSDB, JSON-RPC) to manager and ovs-vswitchd
• Supports multiple connections
ovs-vswitchd:
• Core component in the system:
• Communicates with outside world using OpenFlow
• Communicates with ovsdb-server using management protocol
• Communicates with kernel module over netlink
• Communicates with the system through netdev abstract interface
• Packet classifier supports efficient flow lookup with wildcards and “explodes” these
(possibly) wildcard rules for fast processing by the datapath
• Supports multiple independent datapaths (bridges)
OVSDB Southbound
•
Library
• OVSDB raw protocol layer
• Maintains connections to OVSDB nodes
• Applications register callbacks to receive
messages
•
Southbound
• Owns yang models
• Controls connections
• Writes incoming OVSDB messages to
operational datastore
• Sends outgoing OVSDB messages in
response to configuration updates
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• OpenFlow & OVSDB
• Genius
• NetVirt
• Demo
17
GENIUS
GENIUS
DHCP
SFC
L2
Service
L3
Service
ACL
GBP
SFC
Tunnel
Manager
Manager
Resourc
e
Manager
• Provides Generic Network Interfaces, Utilities and
Services
GBP
Genius
Interface
• Opendaylight offset 1 project, introduced in ODLBoron
ID
MDSAL
Manager
Utils
MD-SAL
NetVirt
• A framework for integration of different network
services
• Provides common view of network interfaces across
services
• Decouples application NSFs from Southbound
plugins
• Allows sharing of openflow resources like table-ids,
group-ids etc.
Openflow Plugin
OVSDB Plugin
NETCONF Plugin
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• OpenFlow & OVSDB
• Genius
• NetVirt
• Demo
19
NetVirt
NetVirt
Neutron NSF
•OpenStack Service Provider in
OpenDayight
DHCP
L2
Service
L3
Service
NAT
ACL
Service
Service
MD-SAL
• Provides several services like
L2, L3, NAT and BGPVPN etc.
NetVirt
Genius
• Uses OpenDaylight Genius
framework
Openflow Plugin
OVSDB Plugin
L2
Service
(ELAN)
L2 Service
(ELAN)
• L2 forwarding service (MAC lookup only)
• Neutron networks map to ELAN instances and determine corresponding broadcast domains
• MAC learning on packets hitting the OVS datapath
• Support for vlan trunk ports, vlan subports, and vlan transparent networks
• Forwarding between switches using VxLAN overlay
• Each ELAN maintains Local and remote broadcast groups per switch, for flooding
• Has lower priority than L3 service in GENIUS based pipeline
• Can forward non-IP pkts, IPv6 pkts because logic is purely L2 based
21
L3
Service
(VPN)
L2 Service
(ELAN)
• Provides Routing-as-a-service (IP lookup)
• Every Neutron Router is modeled as a VPN instance.
• Distributed Routing of packets from source to destination (no hops)
• Supports NATing service enabling VMs to access external networks that are GRE, VLAN and
FLAT types
• Support Extra-Routes for routers
• Support both IPv4 and IPv6 routing
22
OpenDaylight - NetVirt Pipeline
(17)
Dispatcher
(0) Classifier
(45) IPv6
Ing. ACL Service (1)
VM port
Provider Network
Internal Tunnel
BGPoMPLS GW
IPv6 ND for
Router Interface
Other packets
IPv6 Service (2)
L2 Service (4)
L3 Service 3)
(19) DMAC
Service Filter
Other DMAC
L3 DMAC
(18*)
BGPoMPL
S DHCP
DHCP
Non-DHCP
(40)
Ingress ACL
(50) L2 SMAC
Learning
Match Allowed
Known SMAC
Unknown SMAC
(41)
Ingress ACL
2
Match Allowed
(38*)
BGPoMPLS
(Ext
Tunnel)
(51) L2
DMAC Filter
Known DMAC
Unknown DMAC
(42*)
Ingress ACL
3
(20) LFIB
(80)
Non IP
VM Dest IP
ARP
Floating Dest IP
Non-ARP
(52) L2
Unknown
DMACs
Group
Full BC
Group
Local
BC
Match Allowed
(252)
Egress ACL
2
Match Allowed
Non IP
(25)
PDNAT
(FIP)DFIP
Associated
(26)
PSNAT
(FIP)SIP
Unknown
(28)
SNAT
(FIP)
Associated
(27)
DNAT
(FIP)
Associated DIP
Group
Local VM
SFIP
(46) NAPT
Outbound
Unknown NAPT
Known NAPT
(47)
NAPT FIB
(44) NAPT
Inbound
(253*)
Egress ACL
3
Group
Remote VM
Group
Provider
Network
(55)
Filter
Equal
L.Register
+
Egress
? Match - Drop
(251)
Egress ACL
IP - Default Route
Associated SIP
Tunnel In Port
VM In Port
(36)
Internal
Tunnel
(21) L3 - FIB
(220)
Egress
Dispatcher
Output to Controller
Output to OpenFlow port
Resubmit to Dispatcher
(17)
Agenda
• Openstack & OpenDaylight (ODL)
• Networking-ODL and ODL Controller
• OpenFlow & OVSDB
• Genius
• NetVirt
• Demo
24
Demo
AgendaDescription
• Demonstrate network virtualization using vxlan overlay, L3 and
floating ip
• Three nodes in a single ova that can be consumed by vm players:
• openstack control, compute, OpenDaylight, CentOS 7, devstack
• openstack compute, CentOS 7, devstack
• router for external access, CentOS 6.5
• Can be found later here:
• https://wiki.opendaylight.org/view/NetVirt
25
Topology
Agenda
26
Demo Steps: Import VMs and
Agenda
Start DevStack
1.
2.
3.
4.
5.
6.
Change the vboxnet0 IPv4 Address to 192.168.50.1. Find the setting at File->Preferences->Network>Host-only Networks.
Import the OVA into VirtualBox
a. Copy ovsdbtutorial15_2.ova to local system
b. File->Import Appliance, Browse to ovsdbtutorial15_2.ova
c. Do not select “Reinitialize the MAC address of all network cards”
d. Import: odl31-compute, odl31-control and router-node will be imported
e. Note: If VirtualBox complains about the fourth VM Network Adapter when you start the OVA
image then go into the settings for the VM, select Network->Adapter 4->Advanced. Change
the Adapter Type from Paravirtualized Network (virtio-net) to the type just above it. VB under
Windows sometimes has issues with the fourth Network Adapter.
Start all three VMs via the VirtualBox interface
Log into the odl31-control node. ssh [email protected], pw: odl
Start devstack
a. cd /opt/devstack
b. ./stack.sh
Repeat 4 and 5 to start devstack on odl32-compute,
ssh [email protected], pw: odl
27
Demo Steps: Import VMs and
Agenda
Start DevStack
1.
2.
3.
4.
5.
6.
Change the vboxnet0 IPv4 Address to 192.168.50.1. Find the setting at File->Preferences->Network>Host-only Networks.
Import the OVA into VirtualBox
a. Copy netvirt_boron_mitaka.ova to local system
b. File->Import Appliance, Browse to netvirt_boron_mitaka.ova
c. Do not select “Reinitialize the MAC address of all network cards”
d. Import: odl31-compute, odl31-control and router-node will be imported
e. Note: If VirtualBox complains about the fourth VM Network Adapter when you start the VM
images then go into the settings for the VM, select Network->Adapter 4->Advanced. Change
the Adapter Type from Paravirtualized Network (virtio-net) to the type just above it. VB under
Windows sometimes has issues with the fourth Network Adapter. You will likely need to do
this for both odl31-control and odl31-compute if you hit the issue.
Start all three VMs via the VirtualBox interface
Log into the odl31-control node. ssh [email protected], pw: odl
Start devstack
a. cd /opt/devstack
b. ./stack.sh
Repeat 4 and 5 to start devstack on odl32-compute,
ssh [email protected], pw: odl
28
Demo Steps: Import VMs and Start
Agenda
DevStack
1.
2.
3.
4.
5.
6.
Change the vboxnet0 IPv4 Address to 192.168.50.1. Find the setting at File->Preferences->Network>Host-only Networks.
Import the OVA into VirtualBox
a. Copy ovsdbtutorial15_2.ova to local system
b. File->Import Appliance, Browse to ovsdbtutorial15_2.ova
c. Do not select “Reinitialize the MAC address of all network cards”
d. Import: odl31-compute, odl31-control and router-node will be imported
e. Note: If VirtualBox complains about the fourth VM Network Adapter when you start the OVA
image then go into the settings for the VM, select Network->Adapter 4->Advanced. Change
the Adapter Type from Paravirtualized Network (virtio-net) to the type just above it. VB under
Windows sometimes has issues with the fourth Network Adapter.
Start all three VMs via the VirtualBox interface
Log into the odl31-control node. ssh [email protected], pw: odl
Start devstack
a. cd /opt/devstack
b. ./stack.sh
Repeat 4 and 5 to start devstack on odl32-compute,
ssh [email protected], pw: odl
29
./stack.sh
Agenda output
•
•
•
•
eth0: management, requires adding VB port-forwarding to reach from host.
Use eth3 instead since it is usable without adding port-forwarding
eth1: internal data network for tenant traffic, vxlan tunnels
eth2: external network for floating-ip’s - note this is eth1 for the router-node
eth3: management, reachable from host via the vboxnet0 Host-only Network
VM
Services
eth0
VB NAT
eth1
VB Internal 1
eth2
VB Internal 2
eth3
VB vboxnet0
odl31-control
control, ODL
10.0.2.15
192.168.254.31
0.0.0.0
192.168.50.31
odl32-compute
compute
10.0.2.15
192.168.254.32
0.0.0.0
192.168.50.32
router-node
router, DHCP
10.0.2.15
192.168.56.1
VB internal 2
NA
NA
30
Topology
Agenda Mappings
Description
Name
MAC Address
IP Address
ext-net rtr
vx-net0 gw
dhcp
Floating-IP
MAC Address
Node
Port
192.168.56.9
fa:16:3e:5b:ce:2f
10.100.5.1
10.100.5.2
odl31
tap4a3bc435-0a
a:16:3e:cc:ba:69
fa:16:3e:05:cd:7d
vx-net1 gw
dhcp
10.100.6.1
10.100.6.2
odl31
tap8e7a4d61-a7
fa:16:3e:94:07:2e
fa:16:3e:18:ae:3d
vmvx01
tap9100e021-53
fe:16:3e:23:d9:c0
fa:16:3e:23:d9:c0
10.100.5.3
192.168.56.10
fa:16:3e:e5:e5:81
odl31
3
vmvx11
tap738ad178-43
fe:16:3e:79:69:73
fa:16:3e:79:69:73
10.100.6.3
192.168.56.12
fa:16:3e:c8:99:b9
odl31
6
vtep 192.168.254.31
tund152e25a97b
96:6b:83:33:6c:59
odl31
4
vmvx02
tapafd3542b-03
fe:16:3e:76:91:5f
fa:16:3e:76:91:5f
10.100.5.4
192.168.56.11
fa:16:3e:cb:e2:b8
odl32
2
vmvx12
tap108e127b-79
fe:16:3e:81:78:40
fa:16:3e:81:78:40
10.100.6.4
192.168.56.13
fa:16:3e:42:e9:e5
odl32
4
2
5
31
vtep 192.168.254.32
tun177ea7be544
c2:8a:be:01:b0:d4
odl32
3
Neutron
Agenda Commands (1 of 4)
source openrc admin admin
os_addnano.sh:
nova flavor-create m1.nano auto 64 0 1
os_addadminkey.sh:
nova keypair-add --pub-key ~/.ssh/id_rsa.pub admin_key
32
Neutron
Agenda Commands (2 of 4)
os_addnet0.sh:
neutron net-create vx-net0 --provider:network_type vxlan --provider:segmentation_id 1500
neutron subnet-create vx-net0 10.100.5.0/24 --name vx-subnet0 --dns-nameserver 8.8.8.8
os_addvms0.sh:
nova boot --poll --flavor m1.nano --image $(nova image-list | grep 'uec\s' | awk '{print $2}' | tail -1) -nic net-id=$(neutron net-list | grep -w vx-net0 | awk '{print $2}') vmvx01 --availabilityzone=nova:odl31 --key-name admin_key
sleep 5
nova boot --poll --flavor m1.nano --image $(nova image-list | grep 'uec\s' | awk '{print $2}' | tail -1) -nic net-id=$(neutron net-list | grep -w vx-net0 | awk '{print $2}') vmvx02 --availabilityzone=nova:odl32 --key-name admin_key
sleep 5
nova get-vnc-console vmvx01 novnc
nova get-vnc-console vmvx02 novnc
nova keypair-add --pub-key ~/.ssh/id_rsa.pub admin_key
33
Neutron
Agenda Commands (3 of 4)
os_addnet1.sh:
neutron net-create vx-net1 --provider:network_type vxlan --provider:segmentation_id 1500
neutron subnet-create vx-net1 10.100.6.0/24 --name vx-subnet0 --dns-nameserver 8.8.8.8
os_addvms1.sh:
nova boot --poll --flavor m1.nano --image $(nova image-list | grep 'uec\s' | awk '{print $2}' | tail -1) -nic net-id=$(neutron net-list | grep -w vx-net1 | awk '{print $2}') vmvx11 --availabilityzone=nova:odl31 --key-name admin_key
sleep 5
nova boot --poll --flavor m1.nano --image $(nova image-list | grep 'uec\s' | awk '{print $2}' | tail -1) -nic net-id=$(neutron net-list | grep -w vx-net1 | awk '{print $2}') vmvx12 --availabilityzone=nova:odl32 --key-name admin_key
sleep 5
nova get-vnc-console vmvx11 novnc
nova get-vnc-console vmvx12 novnc
nova keypair-add --pub-key ~/.ssh/id_rsa.pub admin_key
34
Neutron
Agenda Commands (4 of 4)
os_addrtr.sh:
neutron router-create ext-rtr
neutron router-interface-add ext-rtr vx-subnet0
neutron router-interface-add ext-rtr vx-subnet1
os_addextnet.sh:
neutron net-create ext-net --router:external --provider:physical_network public --provider:network_type flat
neutron subnet-create --name ext-subnet --allocation-pool start=192.168.56.9,end=192.168.56.14 --disabledhcp --gateway 192.168.56.1 ext-net 192.168.56.0/24
neutron router-gateway-set ext-rtr ext-net
os_addfloatingips.sh:
for vm in vmvx01 vmvx02 vmvx11 vmvx12; do
vm_id=$(nova list | grep $vm | awk '{print $2}')
port_id=$(neutron port-list -c id -c fixed_ips -- --device_id $vm_id | grep subnet_id | awk '{print $2}')
neutron floatingip-create --port_id $port_id ext-net
done;
35
odl31-control
local.conf (1 of 2)
Agenda
# flip OFFLINE and RECLONE to lock (RECLONE=no) or update the source.
OFFLINE=True
RECLONE=no
VERBOSE=True
# disable everything so we can explicitly enable only what we need
disable_all_services
# Core compute (glance+keystone+nova+vnc)
enable_service g-api g-reg key n-api n-crt n-obj n-cpu n-cond n-sch n-novnc n-xvnc n-cauth
# dashboard
enable_service horizon
# neutron services. Recognize q-agt and q-l3 is not set which means ODL is the l2 agent and l3 provider.
enable_service neutron q-dhcp q-meta q-svc
# enable one of the two below:
# the first is external which assumes the user has ODL running already
# make sure to set the ODL_MGR_IP and ODL_PORT because we run in manual mode
# the second is allinone where devstack will download (if online) and start ODL
# enable_service odl-compute odl-neutron
# or use the allinone
enable_service odl-server odl-compute
# additional services. rabbit for rpm-based vm.
enable_service mysql rabbit
36
odl31-control
local.conf (2 of 2)
Agenda
HOST_IP=192.168.254.31
HOST_NAME=odl31
SERVICE_HOST_NAME=$HOST_NAME
SERVICE_HOST=$HOST_IP
Q_HOST=$SERVICE_HOST
enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/mitaka
# PORT and IP are only needed if using manual mode with external ODL.
# allinone uses defaults: ODL_PORT=8087, ODL_MGR_IP=$HOST_IP
ODL_MODE=allinone
# ODL_PORT=8080
# ODL_MGR_IP=192.168.50.1
NEUTRON_CREATE_INITIAL_NETWORKS=False
ODL_PROVIDER_MAPPINGS=public:eth2
SKIP_OVS_INSTALL=True
ODL_USING_EXISTING_JAVA=True
ODL_JAVA_MAX_MEM=2048m
ODL_NETVIRT_KARAF_FEATURE=odl-netvirt-openstack
ODL_RELEASE=boron-snapshot-0.5.0
[[post-config|$NEUTRON_CONF]]
[DEFAULT]
service_plugins = networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin
37
odl32-compute
local.conf
Agenda
# disable everything so we can explicitly enable only what we need
disable_all_services
# Core compute (nova+vnc)
enable_service n-cpu n-novnc
# next line enables odl as the neutron backend rather than the l2 agent
enable_service neutron odl-compute
# additional services. rabbit for rpm-based vm.
enable_service rabbit
HOST_IP=192.168.254.32
HOST_NAME=odl32
SERVICE_HOST_NAME=odl31
SERVICE_HOST=192.168.254.31
Q_HOST=$SERVICE_HOST
enable_plugin networking-odl http://git.openstack.org/openstack/networking-odl stable/mitaka
# PORT and IP are only needed if using manual mode with external ODL.
# allinone uses defaults: ODL_PORT=8087, ODL_MGR_IP=$HOST_IP
ODL_MODE=allinone
# ODL_PORT=8080
# ODL_MGR_IP=192.168.50.1
ODL_PROVIDER_MAPPINGS=public:eth2
SKIP_OVS_INSTALL=True
38
Demo Steps: Create Networks, L3 and
Agenda
Floating IPs
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
source openrc admin admin
os_addnano.sh: add a nano flavor of the vms
os_addadminkey.sh: add ssh keys to have password-less logins to the tenant vms
os_addnet0.sh: add vxlan network 10.100.5.0/24
os_addvms0.sh: launch two vms, one on each compute node
os_addnet1.sh: add vxlan network 10.100.6.0/24
os_addvms1.sh: launch two vms, one on each compute node
os_addrtr.sh: add router for the two subnets
os_addextnet.sh: add flat external network and set router gw
os_addfloatingips.sh: assign floating ip’s to each vm
ping away!
Or just use /opt/tools/os_doitall.sh: But it’s more fun to do each step and see what happens...
39
After stacking: Topology
Agenda
40
After
stacking: OVSDB
Agenda
sudo ovs-vsctl show
38161678-6926-4815-83b2-2632193a6e41
Manager "tcp:192.168.50.1:6640"
is_connected: true
Bridge br-int
Controller "tcp:192.168.50.1:6653"
is_connected: true
fail_mode: secure
Port "eth2"
Interface "eth2"
Port br-int
Interface br-int
type: internal
ovs_version: "2.5.1"
• br-int created
• eth2 moved to br-int
41
After
stacking: Flows
Agenda
sudo ovs-ofctl --protocol=OpenFlow13 dump-flows br-int
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x8000000, duration=161.694s, table=17, n_packets=0, n_bytes=0,
priority=0,metadata=0xa000000000000000/0xe000000000000000
actions=write_metadata:0xc000000000000000/0xe000000000000000,goto_table:80
cookie=0x6800000, duration=161.582s, table=18, n_packets=0, n_bytes=0, priority=0 actions=goto_table:38
cookie=0x1080000, duration=161.545s, table=19, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x1030000, duration=161.708s, table=20, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x8000003, duration=161.707s, table=21, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x8000004, duration=161.569s, table=22, n_packets=0, n_bytes=0, priority=0
actions=CONTROLLER:65535
cookie=0x6900000, duration=161.709s, table=40, n_packets=0, n_bytes=0, priority=0 actions=goto_table:41
cookie=0x6900000, duration=161.630s, table=41, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x4000000, duration=161.657s, table=45, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x8050000, duration=161.618s, table=50, n_packets=0, n_bytes=0, priority=0
actions=CONTROLLER:65535,goto_table:51
cookie=0x8030000, duration=161.607s, table=51, n_packets=0, n_bytes=0, priority=0 actions=goto_table:52
cookie=0x6800000, duration=161.643s, table=60, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x1030000, duration=161.655s, table=80, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x6900000, duration=161.594s, table=251, n_packets=0, n_bytes=0, priority=0
actions=goto_table:252
cookie=0x6900000, duration=161.558s, table=252, n_packets=0, n_bytes=0, priority=0
42
actions=resubmit(,220)
After
adding first network: Topology
Agenda
43
After
adding first network: OVSDB
Agenda
sudo ovs-vsctl show
38161678-6926-4815-83b2-2632193a6e41
Manager "tcp:192.168.50.1:6640"
is_connected: true
Bridge br-int
Controller "tcp:192.168.50.1:6653"
is_connected: true
fail_mode: secure
Port "tap4a3bc435-0a"
Interface "tap4a3bc435-0a"
type: internal
Port "eth2"
Interface "eth2"
Port br-int
Interface br-int
type: internal
ovs_version: "2.5.1"
• dhcp namespace port tap4a3bc435-0a for vxnet0
added to br-int
44
After
adding first network: Flows
Agenda
sudo ovs-ofctl --protocol=OpenFlow13 dump-flows br-int
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x8000000, duration=36.430s, table=0, n_packets=8, n_bytes=648, priority=4,in_port=2
actions=write_metadata:0x10000000000/0xffffff0000000001,goto_table:17
cookie=0x8040000, duration=35.540s, table=17, n_packets=5, n_bytes=390, priority=6,metadata=0x10000000000/0xffffff0000000000
actions=write_metadata:0xe000011388000000/0xfffffffffffffffe,goto_table:50
cookie=0x8000000, duration=317.350s, table=17, n_packets=0, n_bytes=0, priority=0,metadata=0xa000000000000000/0xe000000000000000
actions=write_metadata:0xc000000000000000/0xe000000000000000,goto_table:80
cookie=0x6800000, duration=317.238s, table=18, n_packets=0, n_bytes=0, priority=0 actions=goto_table:38
cookie=0x1080000, duration=317.201s, table=19, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x1030000, duration=317.364s, table=20, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x8000003, duration=317.363s, table=21, n_packets=0, n_bytes=0, priority=0 actions=goto_table:80
cookie=0x8000004, duration=317.225s, table=22, n_packets=0, n_bytes=0, priority=0 actions=CONTROLLER:65535
cookie=0x9000001, duration=35.546s, table=36, n_packets=0, n_bytes=0, priority=5,tun_id=0x1 actions=load:0x100->NXM_NX_REG6[],resubmit(,220)
cookie=0x9001388, duration=35.541s, table=36, n_packets=0, n_bytes=0, priority=5,tun_id=0x1388 actions=write_actions(group:209999)
cookie=0x9051388, duration=36.343s, table=38, n_packets=0, n_bytes=0, priority=5,tun_id=0x5dc
actions=write_metadata:0x1388000000/0x1fffffffff000000,goto_table:51
cookie=0x6900000, duration=317.365s, table=40, n_packets=0, n_bytes=0, priority=0 actions=goto_table:41
cookie=0x6900000, duration=317.286s, table=41, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x4000000, duration=317.313s, table=45, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x8051388, duration=35.546s, table=50, n_packets=5, n_bytes=390, priority=20,metadata=0x11388000000/0x1fffffffff000000,dl_src=fa:16:3e:05:cd:7d
actions=goto_table:51
cookie=0x8050000, duration=317.274s, table=50, n_packets=0, n_bytes=0, priority=0 actions=CONTROLLER:65535,goto_table:51
cookie=0x8031388, duration=35.548s, table=51, n_packets=0, n_bytes=0, priority=20,metadata=0x1388000000/0xffff000000,dl_dst=fa:16:3e:05:cd:7d
actions=load:0x100->NXM_NX_REG6[],resubmit(,220)
cookie=0x8030000, duration=317.263s, table=51, n_packets=5, n_bytes=390, priority=0 actions=goto_table:52
cookie=0x8701388, duration=35.541s, table=52, n_packets=5, n_bytes=390, priority=5,metadata=0x1388000000/0xffff000001 actions=write_actions(group:210000)
cookie=0x8701388, duration=35.541s, table=52, n_packets=0, n_bytes=0, priority=5,metadata=0x1388000001/0xffff000001 actions=write_actions(group:209999)
cookie=0x8800001, duration=35.540s, table=55, n_packets=5, n_bytes=390, priority=10,tun_id=0x1,metadata=0x10000000000/0x1fffff0000000000 actions=drop
cookie=0x8800001, duration=35.541s, table=55, n_packets=0, n_bytes=0, priority=9,tun_id=0x1 actions=load:0x100->NXM_NX_REG6[],resubmit(,220)
cookie=0x6800000, duration=317.299s, table=60, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x1030000, duration=317.311s, table=80, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,17)
cookie=0x8000007, duration=36.081s, table=220, n_packets=0, n_bytes=0, priority=7,reg6=0x100 actions=output:2
cookie=0x6900000, duration=317.250s, table=251, n_packets=0, n_bytes=0, priority=0 actions=goto_table:252
45
cookie=0x6900000, duration=317.214s, table=252, n_packets=0, n_bytes=0, priority=0 actions=resubmit(,220)
After
adding first network: Groups
Agenda
sudo ovs-ofctl --protocol=OpenFlow13 dump-groups br-int
OFPST_GROUP_DESC reply (OF1.3) (xid=0x2):
group_id=209999,type=all,bucket=actions=set_field:0x1->tun_id,resubmit(,55)
group_id=210000,type=all,bucket=actions=group:209999
sudo ovs-ofctl --protocol=OpenFlow13 dump-group-stats br-int
OFPST_GROUP reply (OF1.3) (xid=0x2):
group_id=209999,duration=36.285s,ref_count=2,packet_count=5,byte_count=390,bucket0:pa
cket_count=5,byte_count=390
group_id=210000,duration=35.981s,ref_count=1,packet_count=5,byte_count=390,bucket0:pa
cket_count=5,byte_count=390
46
After
adding first vms: Topology
Agenda
47
After
adding first vms: OVSDB
Agenda
sudo ovs-vsctl show
• vm vmvx01 tap port tap9100e021-53 added to br-int
• tunnel port tund152e25a97b added to br-int for the
VxLAN network
38161678-6926-4815-83b2-2632193a6e41
Manager "tcp:192.168.50.1:6640"
is_connected: true
Bridge br-int
Controller "tcp:192.168.50.1:6653"
is_connected: true
fail_mode: secure
Port "tap9100e021-53"
Interface "tap9100e021-53"
Port "tap4a3bc435-0a"
Interface "tap4a3bc435-0a"
type: internal
Port "eth2"
Interface "eth2"
Port br-int
Interface br-int
type: internal
Port "tund152e25a97b"
Interface "tund152e25a97b"
type: vxlan
options: {key=flow, local_ip="192.168.254.31", remote_ip="192.168.254.32"}
ovs_version: "2.5.1"
48
After
adding first vms: Flows
Agenda
sudo ovs-ofctl --protocol=OpenFlow13 dump-flows br-int
<SNIP>
cookie=0x8051388, duration=148.425s, table=50, n_packets=9, n_bytes=1840,
priority=20,metadata=0x11388000000/0x1fffffffff000000,dl_src=fa:16:3e:05:cd:7d actions=goto_table:51
cookie=0x8051388, duration=48.392s, table=50, n_packets=26, n_bytes=1900,
priority=20,metadata=0x21388000000/0x1fffffffff000000,dl_src=fa:16:3e:23:d9:c0 actions=goto_table:51
cookie=0x8050000, duration=430.153s, table=50, n_packets=0, n_bytes=0, priority=0 actions=CONTROLLER:65535,goto_table:51
cookie=0x8031388, duration=148.427s, table=51, n_packets=0, n_bytes=0,
priority=20,metadata=0x1388000000/0xffff000000,dl_dst=fa:16:3e:05:cd:7d actions=load:0x100->NXM_NX_REG6[],resubmit(,220)
cookie=0x8031388, duration=48.392s, table=51, n_packets=2, n_bytes=725,
priority=20,metadata=0x1388000000/0xffff000000,dl_dst=fa:16:3e:23:d9:c0 actions=load:0x200->NXM_NX_REG6[],resubmit(,220)
cookie=0x8031388, duration=30.011s, table=51, n_packets=2, n_bytes=725,
priority=20,metadata=0x1388000000/0xffff000000,dl_dst=fa:16:3e:76:91:5f actions=set_field:0x3->tun_id,output:4
cookie=0x8030000, duration=430.142s, table=51, n_packets=31, n_bytes=2290, priority=0 actions=goto_table:52
cookie=0x8701388, duration=148.420s, table=52, n_packets=31, n_bytes=2290, priority=5,metadata=0x1388000000/0xffff000001
actions=write_actions(group:210000)
cookie=0x8701388, duration=148.420s, table=52, n_packets=0, n_bytes=0, priority=5,metadata=0x1388000001/0xffff000001
actions=write_actions(group:209999)
cookie=0x8800001, duration=148.419s, table=55, n_packets=5, n_bytes=390,
priority=10,tun_id=0x1,metadata=0x10000000000/0x1fffff0000000000 actions=drop
cookie=0x8800002, duration=48.391s, table=55, n_packets=26, n_bytes=1900,
priority=10,tun_id=0x2,metadata=0x20000000000/0x1fffff0000000000 actions=drop
cookie=0x8800001, duration=148.420s, table=55, n_packets=49, n_bytes=3674, priority=9,tun_id=0x1 actions=load:0x100>NXM_NX_REG6[],resubmit(,220)
cookie=0x8800002, duration=48.391s, table=55, n_packets=23, n_bytes=1774, priority=9,tun_id=0x2 actions=load:0x200>NXM_NX_REG6[],resubmit(,220)
sudo ovs-ofctl --protocol=OpenFlow13 dump-groups br-int
OFPST_GROUP_DESC reply (OF1.3) (xid=0x2):
group_id=209999,type=all,bucket=actions=set_field:0x1->tun_id,resubmit(,55),bucket=actions=set_field:0x2->tun_id,resubmit(,55)
49
group_id=210000,type=all,bucket=actions=group:209999,bucket=actions=set_field:0x1388->tun_id,output:4
After adding second network
Agenda
and vms : Topology
50
After adding second network
Agenda
and vms: OVSDB
sudo ovs-vsctl show
38161678-6926-4815-83b2-2632193a6e41
Manager "tcp:192.168.50.1:6640"
is_connected: true
Bridge br-int
Controller "tcp:192.168.50.1:6653"
is_connected: true
fail_mode: secure
Port "tap8e7a4d61-a7"
Interface "tap8e7a4d61-a7"
type: internal
Port "tap9100e021-53"
Interface "tap9100e021-53"
Port "tap738ad178-43"
Interface "tap738ad178-43"
Port "tap4a3bc435-0a"
Interface "tap4a3bc435-0a"
type: internal
Port "eth2"
Interface "eth2"
Port br-int
Interface br-int
type: internal
Port "tund152e25a97b"
Interface "tund152e25a97b"
type: vxlan
options: {key=flow, local_ip="192.168.254.31",
remote_ip="192.168.254.32"}
ovs_version: "2.5.1"
• dhcp namespace port tap8e7a4d61-a7 for vxnet1 added to
br-int
• vm vmvx02 tap port tap738ad178-43 added to br-int
51
After
adding floating-ips: Topology
Agenda
52
Now
try
these
PINGS
Agenda
Intra-subnet - 10.100.5.4 to 10.100.5.3
Inter-subnet - 10.100.5.4 to 10.100.6.3
Internet access – 10.100.5.4 to www.google.com
53
Start
From Here
Agenda
•
•
•
•
•
Checkout all the info on the project wiki:
• NetVirt Project Wiki
• Weekly meetings on Tuesday’s at 8:00a PST
• Getting started: How to pull and build the code
• Tutorials with slides and ova-packaged virtual machines
Connect with active developers in the community on the #opendaylight-ovsdb
IRC channel at freenode.net
Poke {vishnoianil,shague} on irc #opendaylight-ovsdb
NetVirt Trello page for project task tracking: NetVirt Trello
Join the conversation through lists.opendaylight.org and ask.opendaylight.org
and [email protected]
54
Thank You