From 7dedaa0344a7c29523d3e5add541f7a6275b4043 Mon Sep 17 00:00:00 2001 From: Andreas Martens Date: Mon, 30 Jul 2018 14:42:02 +0100 Subject: [PATCH] add comments to the OVS service --- daemon/core/services/sdn.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/daemon/core/services/sdn.py b/daemon/core/services/sdn.py index 9d8a26ba..44a40f48 100644 --- a/daemon/core/services/sdn.py +++ b/daemon/core/services/sdn.py @@ -51,10 +51,15 @@ class OvsService(SdnService): cfg = "#!/bin/sh\n" cfg += "# auto-generated by OvsService (OvsService.py)\n" - cfg += "/etc/init.d/openvswitch-switch start < /dev/null\n" - cfg += "ovs-vsctl add-br ovsbr0\n" - cfg += "ifconfig ovsbr0 up\n" + cfg += "## First make sure that the ovs services are up and running\n" + cfg += "/etc/init.d/openvswitch-switch start < /dev/null\n\n" + cfg += "## create the switch itself, set the fail mode to secure, \n" + cfg += "## this stops it from routing traffic without defined flows.\n" + cfg += "## remove the -- and everything after if you want it to act as a regular switch\n" + cfg += "ovs-vsctl add-br ovsbr0 -- set Bridge ovsbr0 fail-mode=secure\n" + cfg += "\n## Now add all our interfaces as ports to the switch\n" + portnum = 1 for ifc in node.netifs(): if hasattr(ifc, 'control') and ifc.control is True: continue @@ -62,9 +67,10 @@ class OvsService(SdnService): ifnum = ifnumstr[0] # create virtual interfaces + cfg += "## Create a veth pair to send the data to\n" cfg += "ip link add rtr%s type veth peer name sw%s\n" % (ifnum, ifnum) - cfg += "ifconfig rtr%s up\n" % ifnum - cfg += "ifconfig sw%s up\n" % ifnum +# cfg += "ifconfig rtr%s up\n" % ifnum +# cfg += "ifconfig sw%s up\n" % ifnum # remove ip address of eths because quagga/zebra will assign same IPs to rtr interfaces # or assign them manually to rtr interfaces if zebra is not running @@ -81,17 +87,31 @@ class OvsService(SdnService): raise ValueError("invalid address: %s" % ifcaddr) # add interfaces to bridge - cfg += "ovs-vsctl add-port ovsbr0 eth%s\n" % ifnum - cfg += "ovs-vsctl add-port ovsbr0 sw%s\n" % ifnum + # Make port numbers explicit so they're easier to follow in reading the script + cfg += "## Add the CORE interface to the switch\n" + cfg += "ovs-vsctl add-port ovsbr0 eth%s -- set Interface eth%s ofport_request=%d\n" % (ifnum, ifnum, portnum) + cfg += "## And then add its sibling veth interface\n" + cfg += "ovs-vsctl add-port ovsbr0 sw%s -- set Interface sw%s ofport_request=%d\n" % (ifnum, ifnum, portnum+1) + cfg += "## start them up so we can send/receive data\n" + cfg += "ovs-ofctl mod-port ovsbr0 eth%s up\n" % ifnum + cfg += "ovs-ofctl mod-port ovsbr0 sw%s up\n" % ifnum + cfg += "## Bring up the lower part of the veth pair\n" + cfg += "ip link set dev rtr%s up\n" % ifnum + portnum += 2 # Add rule for default controller if there is one local (even if the controller is not local, it finds it) + cfg += "\n## We assume there will be an SDN controller on the other end of this, \n" + cfg += "## but it will still function if there's not\n" cfg += "ovs-vsctl set-controller ovsbr0 tcp:127.0.0.1:6633\n" + cfg += "\n## Now to create some default flows, \n" + cfg += "## if the above controller will be present then you probably want to delete them\n" # Setup default flows portnum = 1 for ifc in node.netifs(): if hasattr(ifc, 'control') and ifc.control is True: continue + cfg += "## Take the data from the CORE interface and put it on the veth and vice versa\n" cfg += "ovs-ofctl add-flow ovsbr0 priority=1000,in_port=%d,action=output:%d\n" % (portnum, portnum + 1) cfg += "ovs-ofctl add-flow ovsbr0 priority=1000,in_port=%d,action=output:%d\n" % (portnum + 1, portnum) portnum += 2