Date: Thu, 28 Mar 2024 09:01:17 +0000 (UTC) Message-ID: <1770950308.707.1711616477311@ip-10-30-146-46.us-west-2.compute.internal> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_706_2046285363.1711616477309" ------=_Part_706_2046285363.1711616477309 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
The segment routing use case is built on an older internal release= of ONOS (Sept 2014). The following instructions do not apply to ONOS 1.0.0= (Avocet), and are meant only for the SPRING-OPEN project.
There is no IP network in the world that can run without configuration. = In SPRING-OPEN, instead of configuring each switch individually (with IP ad= dresses, subnets, labels etc.) we configure the controller. Such configurat= ion should be possible via the controller CLI. However we have limited conf= iguration capabilities currently in the controller CLI (just tunnels and po= licies). Thus all startup-configuration happens via a configuration file lo= aded at controller startup. Please note that without this config file (or w= ith the wrong config file) the network will not work correctly.
First you need to edit ~/spring-open/conf/onos.properties
If you create a new network configuration file, you need to specify the = file in net.onrc.onos.core.configmanager.NetworkConfigManager.= networkConfigFile field. In the example below, conf/sr-3node.= conf file was specified.
floodlight.modules =3D net.floodlightcontroller.core.FloodlightPro= vider,\ net.floodlightcontroller.threadpool.ThreadPool,\ net.onrc.onos.core.topology.TopologyPublisher, \ net.onrc.onos.core.datagrid.HazelcastDatagrid,\ net.onrc.onos.core.flowprogrammer.FlowProgrammer,\ net.onrc.onos.core.intent.runtime.PathCalcRuntimeModule,\ net.onrc.onos.core.intent.runtime.PlanInstallModule,\ net.onrc.onos.core.registry.ZookeeperRegistry, \ net.onrc.onos.core.metrics.OnosMetricsModule, \ net.onrc.onos.apps.websocket.WebSocketModule, \ net.onrc.onos.core.main.config.DefaultConfiguration, \ net.onrc.onos.apps.segmentrouting.SegmentRoutingManager net.floodlightcontroller.restserver.RestApiServer.port =3D 8080 net.floodlightcontroller.core.FloodlightProvider.openflowport =3D 6633 net.floodlightcontroller.core.FloodlightProvider.workerthreads =3D 16 net.floodlightcontroller.core.FloodlightProvider.cpqdUsePipeline13 =3D true net.floodlightcontroller.forwarding.Forwarding.idletimeout =3D 5 net.floodlightcontroller.forwarding.Forwarding.hardtimeout =3D 0 net.onrc.onos.apps.websocket.WebSocketModule.port =3D 8081 net.floodlightcontroller.core.FloodlightProvider.cpqdUsePipeline13 =3D true # NOTE: Do NOT modify or remove the line below. This value will be overwrit= ten by onos.sh script. net.onrc.onos.core.datagrid.HazelcastDatagrid.datagridConfig =3D=20 # Uncomment and list all the ZooKeeper instances after localhost on multi-i= nstance deployment. #net.onrc.onos.core.registry.ZookeeperRegistry.connectionString =3D localho= st:2181,otherhost:2181 # Specify a network configuration file to be used by the NetworkConfigManag= er net.onrc.onos.core.configmanager.NetworkConfigManager.networkConfigFile =3D= conf/sr-3node.conf
Then, edit network configuration file
The following example (sr-3node.conf) shows the network configuration fo= r the topology with three switches and three links (refer to figure below).=
{ "comment": " Segment routing topology description and configuration", "restrictSwitches": true, "restrictLinks": true, "switchConfig": [ { "nodeDpid": "00:01", "name": "Dallas-R1", "type": "Router_= SR", "allowed": true, "latitude": 80.80, "longitude": 90.10, "params": { "routerIp": "192.168.0.1/32", "routerMac": "00:00:01:01:01:80", "nodeSid": 101, "isEdgeRouter" : true, "subnets": [ { "portNo": 1, "subnetIp": "10.0.1= .128/24" }, { "portNo": 4, "subnetIp": "10.0.2= .128/24" }, { "portNo": 5, "subnetIp": "10.0.3= .128/24" } ], =09=09=09=09=09=09=09"adjacencySids": [ { "adjSid": 77777, "ports": = [ 6 ,7 ] } ] } }, { "nodeDpid": "00:02", "name": "Dallas-R2", "type": "Router_= SR", "allowed": true, "latitude": 80.80, "longitude": 90.10, "params": { "routerIp": "192.168.0.2/32", "routerMac": "00:00:02:02:02:80", "nodeSid": 102, "isEdgeRouter" : false } }, { "nodeDpid": "00:03", "name": "Dallas-R3", "type": "Router_= SR", "allowed": true, "latitude": 80.80, "longitude": 90.10, "params": { "routerIp": "192.168.0.3/32", "routerMac": "00:00:07:07:07:80", "nodeSid": 103, "isEdgeRouter" : true, "subnets": [ { "portNo": 1, "subnetIp": "7.7.7.= 128/24" } ] } } ], "linkConfig":[ { "type": "pktLink", "allowed": true, "nodeDpid1": "01", "nodeDpid2": "02", "params": { "port1": 6, "port2": 1 } }, { "type": "pktLink", "allowed": true, "nodeDpid1": "01", "nodeDpid2": "02", "params": { "port1": 7, "port2": 3 } }, { "type": "pktLink", "allowed": true, "nodeDpid1": "02", "nodeDpid2": "03", "params": { "port1": 2, "port2": 2 } } ] }
Here is what you need to know for network configuration:
The first two lines are global params
While the controller configurati= on allows a lot of flexibility, we have currently not tested c= onfigs where restrictSwitches and restrictLinks are not 'true'. In other wo= rds, only switches and links that are configured are 'allowed' in the netwo= rk. We will always need to configure the switches, but we do hope to remove= the need for configuring links soon.
To configure the switches as Segment Routers we need to= do the following
subnets (optional): subnet information (can be spec= ified only if isEdgeRouter is true). Specify the interface= ("portNo": 1) for the attac= hed subnet ("subnetIp": "10.0.1.128= /24"). In the example, port 1 is assigned the subnet 10.0.1.0/24, and the I= P address assigned to the interface is 10.0.1.128/32. Only interfaces on wh= ich attached-subnets are configured need IP addresses. All other interfaces= (i.e. those connected to other segment-routers) are consider unnumbered in= terfaces and do not need IP addresses.
adjSid: con= figure an Adjacency Segment ID. This is a locally significant label, assign= ed to more than one router interface. Note that the controller automaticall= y assigns adjacency labels for single interfaces. Only when the operator ne= eds an adjacency-label to represent more than one outgoing interface, shoul= d this be used. Please use a number between 10000 and 99999. In the example= above, '77777' is used on ports 6 and 7.
To configure bidirectional links between Segment Routers we need to do the following (the need to do this configuration will be re= moved in the future)
To replicate the prototype shown in the videos with software switches, use this config file= at the controller: sr-cpqd-full.conf. Note that you would also need to fol= low the direct= ions to launch the related network topology in Mininet described in the= config file.
To replicate the prototype shown in the videos with hardware switches, y= ou would need to use a config file that reflects the DPIDs of the hardware = switches in your setup. To see an example of the config file we used in our= setup see: sr-dell-full.conf. Note that you would also need to follow the = directions to = launch an OpenFlow instance in the Dell Hardware.