ovs

  • https://github.com/openvswitch/ovs/blob/master/FAQ.md
  • http://openvswitch.org/support/config-cookbooks/port-tunneling/
  • http://openvswitch.org/support/config-cookbooks/vlan-configuration-cookbook/
  • http://networkstatic.net/setting-overlays-open-vswitch/

Setup env

ovs</a>

Configuration Steps for vlan

in H1

    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 tap0 tag=100
    ovs-vsctl add-port br0 tap1 tag=101
    ovs-vsctl add-port br0 eth0

in H2

    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 tap0 tag=100
    ovs-vsctl add-port br0 tap1 tag=101
    ovs-vsctl add-port br0 eth0

if you add port eth0 into ovs, then you can't config the IP in this port

Configuration Steps for GRE tunnel

in H1

    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 tap0
    ovs-vsctl add-port br0 tap1
    ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=`IP address of eth0 on Host2`

in H2

    ovs-vsctl add-br br0
    ovs-vsctl add-port br0 tap0
    ovs-vsctl add-port br0 tap1
    ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip= `IP address of eth0 on Host1`

For tunnel, if the IP is the eth0, then you can't add this port into ovs

Configuration Steps for vxlan tunnel

in H1

  • ovs-vsctl add-br br0
  • ovs-vsctl add-port br0 vxlan – set Interface vxlan type=vxlan options:key=flow
    ptions:local_ip=10.56.212.53 options:remote_ip=10.56.212.56 ofport_request=10
  • ovs-vsctl add-port br0 tap1 – set Interface tap1 type=internal
  • ip netns add ns1
  • ip link set tap1 netns ns1
  • ip netns exec ns1 ip link set dev tap1 up
  • ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap1

in H2

  • ovs-vsctl add-br br0
  • ovs-vsctl add-port br0 vxlan – set Interface vxlan type=vxlan options:key=flow options:local_ip=10.56.212.56 options:remote_ip=10.56.212.53 ofport_request=10
  • ovs-vsctl add-port br0 tap1 – set Interface tap1 type=internal
  • ip netns add ns1
  • ip link set tap1 netns ns1
  • ip netns exec ns1 ip link set dev tap1 up
  • ip netns exec ns1 ip addr add 10.0.0.2/24 dev tap1

For tunnel, if the IP is the eth0, then you can't add this port into ovs

in ovs

    ovs-ofctl add-flow br0 "table=0,in_port=1,actions=set_field:103->tun_id,goto_table:1"
    ovs-ofctl add-flow br0 "table=0,actions=goto_table:1"

    ovs-ofctl add-flow br0 "table=1,tun_id=103,dl_dst=52:54:00:12:34:56,actions=output:10"
    ovs-ofctl add-flow br0 "table=1,tun_id=103,dl_dst=52:54:00:12:34:11,actions=output:1"
    ovs-ofctl add-flow br0 "table=1,tun_id=103,dl_type=0x0806,nw_dst=10.0.0.1,actions=output:1"
    ovs-ofctl add-flow br0 "table=1,tun_id=103,dl_type=0x0806,nw_dst=10.0.0.2,actions=output:10"

vxlan

Q: What’s a VXLAN?
A: VXLAN stands for Virtual eXtensible Local Area Network, and is a means to solve the scaling challenges of VLAN networks in a multi-tenant environment. VXLAN is an overlay network which transports an L2 network over an existing L3 network. For more information on VXLAN, please see RFC 7348:
http://tools.ietf.org/html/rfc7348

Q: How much of the VXLAN protocol does Open vSwitch currently support?
A: Open vSwitch currently supports the framing format for packets on the wire. There is currently no support for the multicast aspects of VXLAN.
To get around the lack of multicast support, it is possible to pre-provision MAC to IP address mappings either manually or from a controller.

Q: What destination UDP port does the VXLAN implementation in Open vSwitch
use?

A: By default, Open vSwitch will use the assigned IANA port for VXLAN, which is 4789. However, it is possible to configure the destination UDP port manually on a per-VXLAN tunnel basis. An example of this configuration is provided below.

ovs-vsctl add-br br0
ovs-vsctl add-port br0 vxlan1 -- set interface vxlan1 type=vxlan options:remote_ip=192.168.1.2 options:key=flow options:dst_port=8472

Configuration example for vxlan

vxlan</a>

    sudo ovs-ofctl -O OpenFlow13  add-flow br0 " priority=0, actions=normal"
    sudo ovs-appctl fdb/show
    =========== For the Example, MAC Addresses are as follows ===========
    TEP1-192.168.1.180
    ------------------
     port  VLAN  MAC                Age
        2     0  00:00:00:00:00:01   11

    TEP2-192.168.1.181
    ------------------
     port  VLAN  MAC                Age
        2     0  00:00:00:00:00:05    3
        1     0  00:00:00:00:00:04    3

    TEP3-192.168.1.182
    ------------------
     port  VLAN  MAC                Age
        1     0  00:00:00:00:00:08   24

Host 192.168.1.180

ovs-vsctl add-br br0
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl add-port br0 vxlan -- set Interface vxlan type=vxlan options:key=flow options:local_ip=192.168.1.180 options:remote_ip=192.168.1.181 ofport_request=10
ovs-vsctl add-port br0 vxlan1 -- set Interface vxlan1 type=vxlan options:key=flow options:local_ip=192.168.1.180 options:remote_ip=192.168.1.182 ofport_request=11

Add OpenFlow Flowmods using 3 tables, Classifier, Ingress, Egress. That is an implementation choice not a requirement.

ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=10, actions=goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=11 actions=goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,in_port=2,dl_src=00:00:00:00:00:01 actions=set_field:5->tun_id,goto_table=1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,priority=16384,in_port=1 actions=drop"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:08 actions=output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:04 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:05 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:10,output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=8192,tun_id=0x5 actions=goto_table:2"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,tun_id=0x5,dl_dst=00:00:00:00:00:01 actions=output:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=8192,tun_id=0x5 actions=drop"

Host 192.168.1.181

ovs-vsctl add-br br0
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl add-port br0 vxlan -- set Interface vxlan type=vxlan options:key=flow options:local_ip=192.168.1.181 options:remote_ip=192.168.1.182 ofport_request=10
ovs-vsctl add-port br0 vxlan1 -- set Interface vxlan1 type=vxlan options:key=flow options:local_ip=192.168.1.181 options:remote_ip=192.168.1.180 ofport_request=11

Add OpenFlow Flowmods using 3 tables, Classifier, Ingress, Egress. That is an implementation choice not a requirement.

ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=10 actions=goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=11 actions=goto_table:2"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,in_port=1,dl_src=00:00:00:00:00:04 actions=set_field:5->tun_id,goto_table=1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,in_port=2,dl_src=00:00:00:00:00:05 actions=set_field:5->tun_id,goto_table=1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,priority=16384,in_port=1 actions=drop"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,priority=16384,in_port=2 actions=drop"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:08 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:02 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:01 actions=output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:10,output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=8192,tun_id=0x5 actions=goto_table:2"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,tun_id=0x5,dl_dst=00:00:00:00:00:04 actions=output:1 VM1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,tun_id=0x5,dl_dst=00:00:00:00:00:05 actions=output:2 VM2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:1,output:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=8192,tun_id=0x5 actions=drop"

Host 192.168.1.182

ovs-vsctl add-br br0
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl add-port br0 vxlan -- set Interface vxlan type=vxlan options:key=10 options:local_ip=192.168.1.183 options:remote_ip=192.168.1.182  ofport_request=10
ovs-vsctl add-port br0 vxlan -- set Interface vxlan type=vxlan options:key=10 options:local_ip=192.168.1.182 options:remote_ip=192.168.1.183 ofport_request=10

Add OpenFlow Flowmods using 3 tables, Classifier, Ingress, Egress. That is an implementation choice not a requirement.

ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=10 actions=goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,tun_id=0x5,in_port=11 actions=goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,in_port=1,dl_src=00:00:00:00:00:08 actions=set_field:5->tun_id,goto_table=1,tun_dst:ip:1.1.1.1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=0,priority=16384,in_port=1 actions=drop"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:01 actions=output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:02 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:04 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,tun_id=0x5,dl_dst=00:00:00:00:00:05 actions=output:10,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:10,output:11,goto_table:2"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=1,priority=8192,tun_id=0x5 actions=goto_table:2"

ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,tun_id=0x5,dl_dst=00:00:00:00:00:08 actions=output:1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=16384,tun_id=0x5,dl_dst=ff:ff:ff:ff:ff:ff actions=output:1"
ovs-ofctl add-flow -O OpenFlow13 br0 "table=2,priority=8192,tun_id=0x5 actions=drop"