blob: 3ca3bbe834b2ca4762f742885b2906f6c5b77143 [file] [log] [blame]
---
- hosts: switch_vbng
sudo: yes
vars:
controller_ip: "{{ hostvars['onos_vbng']['ansible_ssh_host'] }}"
controller_port: 6653
ovs_dpid: "0000000000000001"
tags:
- vbng
tasks:
- name: Fix /etc/hosts
lineinfile:
dest=/etc/hosts
regexp="127.0.0.1 localhost"
line="127.0.0.1 localhost {{ ansible_hostname }}"
- name: Install packages
apt: name={{ item }}
state=latest
update_cache=yes
with_items:
- openvswitch-switch
- python-netifaces
- name: Create br-vbng
openvswitch_bridge:
bridge=br-vbng
state=present
- name: Find wan_network interface
script: scripts/if_from_ip.py {{ wan_ip }}
register: wan_net
- name: Find public_network interface
script: scripts/if_from_ip.py {{ public_ip }}
register: public_net
- name: Hook up wan-network to br-vbng
openvswitch_port:
bridge=br-vbng
port={{ wan_net.stdout }}
state=present
- name: Hook up public-network to OvS
openvswitch_port:
bridge=br-vbng
port={{ public_net.stdout }}
state=present
- name: Remove IP address on public_network
command: /sbin/ifconfig {{ public_net.stdout }} 0.0.0.0
when: public_net.stdout
- name: Change datapath ID of bridge to match config file
command: /usr/bin/ovs-vsctl set bridge br-vbng other-config:datapath-id={{ ovs_dpid }}
- name: Add controller to switch
command: /usr/bin/ovs-vsctl set-controller br-vbng tcp:{{ controller_ip }}:{{ controller_port }}
- hosts: switch_volt
sudo: yes
vars:
controller_ip: "{{ hostvars['onos_volt']['ansible_ssh_host'] }}"
controller_port: 6653
vcpe_lan_ip: "{{ hostvars['vcpe']['lan_ip'] }}"
tags:
- volt
tasks:
- name: Fix /etc/hosts
lineinfile:
dest=/etc/hosts
regexp="127.0.0.1 localhost"
line="127.0.0.1 localhost {{ ansible_hostname }}"
- name: Install packages
apt: name={{ item }} state=present update_cache=yes
with_items:
- git
- python-netifaces
- openvswitch-switch
- name: Checkout the Mininet repo
git: repo=https://github.com/mininet/mininet.git
dest=/tmp/mininet
- name: Install the CPqD switch using Mininet install script
shell: /tmp/mininet/util/install.sh -3f
creates=/usr/local/bin/ofdatapath
ignore_errors: true
- name: Find subscriber_network interface
script: scripts/if_from_ip.py {{ subscriber_ip }}
register: subscriber_net
- name: Create bridge br-sub
openvswitch_bridge:
bridge=br-sub
state=present
- name: Add subscriber_net to br-sub
openvswitch_port:
bridge=br-sub
port={{ subscriber_net.stdout }}
state=present
# The CPqD switch is expecting that packets coming from the client have
# VLAN tag 1. However Neutron's OvS configuration eats VLAN-tagged packets.
# So tag them with VLAN 1 here before sending to CPqD.
#
# Note that the VLAN tag is 0 in the real-world setup, but the CPqD switch
# seems to have a problem with these packets.
# Using OvS to tag packets with VLAN ID 1 is not quite working for some reason.
# The packets from the client get tagged OK, but only the first packet from the
# VCPE gets its tag stripped off. Very weird. That's why we are using veth
# devices instead.
#- name: Add tag 1 to br-sub port
# shell: ovs-vsctl set port {{ subscriber_net.stdout }} tag=1
- name: Create a pair of veth devices
shell: ifconfig veth0 >> /dev/null || ip link add veth0 type veth peer name veth1
- name: Create veth0.1
shell: ifconfig veth0.1 >> /dev/null || ip link add link veth0 name veth0.1 type vlan id 1
- name: Bring the interfaces up
shell: ip link set {{ item }} up
with_items:
- veth0
- veth1
- veth0.1
- name: Add veth0.1 to br-sub
openvswitch_port:
bridge=br-sub
port=veth0.1
state=present
- name: Create bridge br-lan
openvswitch_bridge:
bridge=br-lan
state=present
- name: Create tunnel port on br-lan
openvswitch_port:
bridge=br-lan
port=gre0
state=present
- name: Set up GRE tunnel to vCPE
shell: ovs-vsctl set Interface gre0 type=gre options:remote_ip={{ vcpe_lan_ip }}
- name: Check if br-lan has an IPv6 address
shell: ip addr show br-lan|grep inet6|awk '{print $2}'
register: ipv6
- name: Remove br-lan IPv6 address if present
shell: ifconfig br-lan inet6 del {{ ipv6.stdout }}
when: ipv6.stdout != ""
- name: Check if veth1 has an IPv6 address
shell: ip addr show veth1|grep inet6|awk '{print $2}'
register: ipv6
- name: Remove veth1 IPv6 address if present
shell: ifconfig veth1 inet6 del {{ ipv6.stdout }}
when: ipv6.stdout != ""
- name: Run the datapath
command: /usr/local/bin/ofdatapath -i veth1,br-lan punix:/tmp/s1 -d 000000000001 --no-slicing -D -P
creates=/usr/local/var/run/ofdatapath.pid
- name: Run the control program
command: /usr/local/bin/ofprotocol unix:/tmp/s1 tcp:{{ controller_ip }}:{{ controller_port }} --fail=closed --listen=punix:/tmp/s1.listen -D -P
creates=/usr/local/var/run/ofprotocol.pid
- hosts: client
sudo: yes
tags:
- client
tasks:
- name: Fix /etc/hosts
lineinfile:
dest=/etc/hosts
regexp="127.0.0.1 localhost"
line="127.0.0.1 localhost {{ ansible_hostname }}"
- name: Install packages
apt: name={{ item }}
state=latest
update_cache=yes
with_items:
- openvswitch-switch
- python-netifaces
- name: Create br-sub
openvswitch_bridge:
bridge=br-sub
state=present
- name: Find subscriber_network interface
script: scripts/if_from_ip.py {{ subscriber_ip }}
register: client_net
- name: Hook up subscriber-network to OvS
openvswitch_port:
bridge=br-sub
port={{ client_net.stdout }}
state=present
- name: Run some commands on br-sub
shell: "{{ item }}"
with_items:
- ifconfig br-sub 0.0.0.0 mtu 1400 up
- ethtool -K br-sub tso off
- ethtool -K br-sub tx off
# Run dhclient on br-sub internal interface to issue DHCP request to vCPE
#
# Need to set up a tunnel between vCPE and vOLT to keep VLAN-tagged
# packets from being swallowed by the network.
#
- hosts: vcpe
sudo: yes
vars:
volt_lan_ip: "{{ hostvars['switch_volt']['lan_ip'] }}"
tags:
- vcpe
tasks:
- name: Install packages
apt: name={{ item }}
state=latest
update_cache=yes
with_items:
- openvswitch-switch
- name: Create br-lan
openvswitch_bridge:
bridge=br-lan
state=present
- name: Create tunnel port
openvswitch_port:
bridge=br-lan
port=gre0
state=present
- name: Configure GRE tunnel to vOLT switch
shell: ovs-vsctl set Interface gre0 type=gre options:remote_ip={{ volt_lan_ip }}
- name: Restart vCPEs
script: scripts/restart-vcpes.sh