Playbook for configuring CORD dataplane
diff --git a/xos/configurations/cord/dataplane/ansible.cfg b/xos/configurations/cord/dataplane/ansible.cfg
new file mode 100644
index 0000000..9100590
--- /dev/null
+++ b/xos/configurations/cord/dataplane/ansible.cfg
@@ -0,0 +1,4 @@
+[defaults]
+remote_user = ubuntu
+private_key_file = ~/.ssh/id_rsa
+host_key_checking = false
\ No newline at end of file
diff --git a/xos/configurations/cord/dataplane/dataplane.yaml b/xos/configurations/cord/dataplane/dataplane.yaml
new file mode 100644
index 0000000..ca6d9d5
--- /dev/null
+++ b/xos/configurations/cord/dataplane/dataplane.yaml
@@ -0,0 +1,92 @@
+---
+- hosts: switch_vbng
+ sudo: yes
+ vars:
+ controller:
+ - ip: "{{ hostvars['onos_vbng']['ansible_ssh_host'] }}"
+ - port: 6653
+ 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: Add controller to switch
+ debug: msg="Not implemented yet"
+
+- hosts: switch_volt
+ sudo: yes
+ vars:
+ controller:
+ - ip: "{{ hostvars['onos_volt']['ansible_ssh_host'] }}"
+ - port: 6653
+ 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
+
+ - 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 -3x
+ ignore_errors: true
+
+ - name: Find subscriber_network interface
+ script: scripts/if_from_ip.py {{ subscriber_ip }}
+ register: subscriber_net
+
+ - name: Find lan_network interface
+ script: scripts/if_from_ip.py {{ lan_ip }}
+ register: lan_net
+
+ - name: Run the datapath
+ shell: ofdatapath -i {{ subscriber_net.stdout }},{{ lan_net.stdout }} punix:/tmp/s1 -d 000000000001 --no-slicing
+
+ - name: Run the control program
+ shell: sudo ofprotocol unix:/tmp/s1 tcp:{{ controller.ip }}:{{ controller.port }} --fail=closed --listen=punix:/tmp/s1.listen
+
diff --git a/xos/configurations/cord/dataplane/generate.sh b/xos/configurations/cord/dataplane/generate.sh
new file mode 100755
index 0000000..360ed67
--- /dev/null
+++ b/xos/configurations/cord/dataplane/generate.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# set -x
+
+source ~/admin-openrc.sh
+
+get_ip () {
+ LABEL=$1
+ NETWORK=$2
+ nova list --all-tenants|grep $LABEL|sed "s/^.*$NETWORK=//g"|sed 's/; .*$//g'|awk '{print $1}'
+}
+
+cat <<EOF
+onos_vbng ansible_ssh_host=$( get_ip mysite_onos_vbng flat-lan-1-net)
+switch_vbng ansible_ssh_host=$( get_ip mysite_vbng flat-lan-1-net) wan_ip=$( get_ip mysite_vbng wan_network) public_ip=$( get_ip mysite_vbng tun0-net )
+
+onos_volt ansible_ssh_host=$( get_ip mysite_onos_volt flat-lan-1-net)
+switch_volt ansible_ssh_host=$( get_ip mysite_volt flat-lan-1-net) subscriber_ip=$( get_ip mysite_volt subscriber_network) lan_ip=$( get_ip mysite_volt lan_network) vcpe_lan_ip=$( get_ip mysite_vcpe lan_network)
+EOF
diff --git a/xos/configurations/cord/dataplane/scripts/if_from_ip.py b/xos/configurations/cord/dataplane/scripts/if_from_ip.py
new file mode 100644
index 0000000..be1da48
--- /dev/null
+++ b/xos/configurations/cord/dataplane/scripts/if_from_ip.py
@@ -0,0 +1,14 @@
+#!/usr/bin/python
+
+import sys
+import netifaces
+
+def main (argv):
+ addr = argv[0]
+ for iface in netifaces.interfaces():
+ addrs = netifaces.ifaddresses(iface)
+ if 2 in addrs and addrs[2][0]['addr'] == addr:
+ print iface
+
+if __name__ == "__main__":
+ main(sys.argv[1:])