...
Segment routing device setting:
Code Block | ||||
---|---|---|---|---|
| ||||
"Device-id" : |
...
{ "segmentrouting" : |
...
{ "name" : "Device name", |
...
"ipv4NodeSid" : 123, |
...
"ipv4Loopback" : "192.168.0.123", |
...
"ipv6NodeSid" : 223, |
...
"ipv6Loopback" : "2000::c0a8:0223", |
...
"routerMac" : "00:00:00:00:01:23", |
...
"isEdgeRouter" : true, |
...
"adjacencySids" : [] |
...
}
} } |
In segment routing config:
Name: name for segment routing device
ipv4(6)NodeSid: global unique id for IP loopback, which used for MPLS lable in forwarding
ipv4(6)Loopback: Router loopback IP address, should not be part of same same subnet defined on dataplace interface
routerMac: Globally unique mac address this mac address will be used to reply ARP request for router IP or interface IP
isEdgeRouter: true if this device is edge/leaf, otherwise false
adjacencySids: Reserved, put empty array for now
Interface config:
Code Block | ||
---|---|---|
| ||
"Device-id/port-number" : |
...
{ "interfaces" : |
...
{
...
[ { "name": "interface name", |
...
"ips" : [ "10.0.1.254/24" ], |
...
"vlan-untagged": |
...
}
]
10 } ] } |
In interface config:
Name: interface name, can be empty or unset
ips: IP address for this interface, can be the default gateway of the host
VLAN config:
vlan-untagged (integer): this interface consumes untagged packet only, and this interface belongs to specific vlan
vlan-tagged (integer array): this interface can consumes specific tagged vlans
vlan-native (integer): if an untagged consumes by this port, and this is an interface with vlan-tagged setup, device will use this vlan for internal use
vlan config can be: vlan-untagged only, vlan-tagged only or vlan-tagged + vlan-native
...
Start ONOS with following command
Code Block | ||
---|---|---|
| ||
$ cd ~/onos |
...
$ ok clean |
Use another terminal, connect to ONOS shell and activate follow apps:
Code Block | ||
---|---|---|
| ||
$ onos localhost |
...
onos> app activate bmv2 fabric hostprovider lldpprovider proxyarp segmentrouting |
...
onos> apps -a -s |
...
* 9 org.onosproject.drivers |
...
1.13.0.SNAPSHOT Default Drivers |
...
* 35 org.onosproject.generaldeviceprovider 1.13.0.SNAPSHOT General Device Provider |
...
* 36 org.onosproject.protocols.grpc |
...
1.13.0.SNAPSHOT gRPC Protocol Subsystem |
...
* 37 org.onosproject.protocols.p4runtime |
...
1.13.0.SNAPSHOT P4Runtime Protocol Subsystem |
...
* 38 org.onosproject.p4runtime |
...
1.13.0.SNAPSHOT P4Runtime Provider |
...
* 39 org.onosproject.drivers.p4runtime |
...
1.13.0.SNAPSHOT P4Runtime Drivers |
...
* 42 org.onosproject.proxyarp |
...
1.13.0.SNAPSHOT Proxy ARP/NDP |
...
* 44 org.onosproject.hostprovider |
...
1.13.0.SNAPSHOT Host Location Provider |
...
* 45 org.onosproject.lldpprovider |
...
1.13.0.SNAPSHOT LLDP Link Provider |
...
* 73 org.onosproject.pipelines.basic |
...
1.13.0.SNAPSHOT Basic Pipelines |
...
* 84 org.onosproject.route-service |
...
1.13.0.SNAPSHOT Route Service Server |
...
* 95 org.onosproject.protocols.gnmi |
...
1.13.0.SNAPSHOT gNMI Protocol Subsystem |
...
* 96 org.onosproject.drivers.gnmi |
...
1.13.0.SNAPSHOT gNMI Drivers |
...
* 108 org.onosproject.pipelines.fabric |
...
1.13.0.SNAPSHOT Fabric Pipeline |
...
* 120 org.onosproject.segmentrouting |
...
1.13.0.SNAPSHOT Segment Routing |
...
* 121 org.onosproject.drivers.bmv2 |
...
1.13.0.SNAPSHOT BMv2 Drivers |
Push network configuration from another new terminal window
Code Block | ||
---|---|---|
| ||
$ cd ~/routing/trellis |
...
$ onos-netcfg localhost trellisp4.json |
(Optional) Decrease flow and group polling time
...
We can manually setup polling frequency in ONOS shell so ONOS can poll flow entries and groups from devices more frequently. (default: 30 seconds)
Code Block |
---|
onos> cfg set org.onosproject.net.flow.impl.FlowRuleManager fallbackFlowPollFrequency 5 |
...
onos> cfg set org.onosproject.net.group.impl.GroupManager fallbackGroupPollFrequency 5 |
Strat mininet topology on new terminal using trellisp4.py python script
trellisp4.py creates:
2 by 2 leaf-spine topology using 4 bmv2 devices
4 bidirectional links between leaf and spine
4 hosts, 2 hosts per leaf device
Code Block |
---|
$ sudo -E ./trellisp4.py --onos-ip 127.0.0.1 |
After started, ONOS should discover 4 devices and 8 links
Code Block |
---|
onos> devices -s |
...
id=device:bmv2:204, available=true, role=MASTER, type=SWITCH, driver=bmv2:org.onosproject.pipelines.fabric |
...
id=device:bmv2:205, available=true, role=MASTER, type=SWITCH, driver=bmv2:org.onosproject.pipelines.fabric |
...
id=device:bmv2:226, available=true, role=MASTER, type=SWITCH, driver=bmv2:org.onosproject.pipelines.fabric |
...
id=device:bmv2:227, available=true, role=MASTER, type=SWITCH, driver=bmv2:org.onosproject.pipelines.fabric |
...
onos> links |
...
src=device:bmv2:204/1, dst=device:bmv2:226/1, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:204/2, dst=device:bmv2:227/1, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:205/1, dst=device:bmv2:226/2, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:205/2, dst=device:bmv2:227/2, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:226/1, dst=device:bmv2:204/1, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:226/2, dst=device:bmv2:205/1, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:227/1, dst=device:bmv2:204/2, type=DIRECT, state=ACTIVE, expected=false |
...
src=device:bmv2:227/2, dst=device:bmv2:205/2, type=DIRECT, state=ACTIVE, expected=false |
Hosts should be learnt learned by ONOS
Code Block |
---|
onos> hosts |
...
id=00:AA:00:00:00:01/None, mac=00:AA:00:00:00:01, locations=[device:bmv2:204/3], vlan=None, ip(s)=[10.0.2.1], provider=of:org.onosproject.provider.host, configured=false |
...
id=00:AA:00:00:00:02/None, mac=00:AA:00:00:00:02, locations=[device:bmv2:204/4], vlan=None, ip(s)=[10.0.2.2], provider=of:org.onosproject.provider.host, configured=false |
...
id=00:AA:00:00:00:03/None, mac=00:AA:00:00:00:03, locations=[device:bmv2:205/3], vlan=None, ip(s)=[10.0.3.1], provider=of:org.onosproject.provider.host, configured=false |
...
id=00:AA:00:00:00:04/None, mac=00:AA:00:00:00:04, locations=[device:bmv2:205/4], vlan=None, ip(s)=[10.0.3.2], provider=of:org.onosproject.provider.host, configured=false |
If any host was not discovered by ONOS, try send arp request by using arping tool from mininet shell:
Code Block |
---|
mininet> h1 arping 10.0.2.254 |
Routing and bridging rule should be installed by ONOS after host been detected and hosts should be able to ping each other:
Code Block |
---|
mininet> pingallfull |
...
<...skip debug logs...> |
...
*** Results: |
...
h1->h2: 1/1, rtt min/avg/max/mdev 1.267/1.267/1.267/0.000 ms |
...
h1->h3: 1/1, rtt min/avg/max/mdev 3.384/3.384/3.384/0.000 ms |
...
h1->h4: 1/1, rtt min/avg/max/mdev 4.708/4.708/4.708/0.000 ms |
...
h2->h1: 1/1, rtt min/avg/max/mdev 1.381/1.381/1.381/0.000 ms |
...
h2->h3: 1/1, rtt min/avg/max/mdev 3.138/3.138/3.138/0.000 ms |
...
h2->h4: 1/1, rtt min/avg/max/mdev 3.983/3.983/3.983/0.000 ms |
...
h3->h1: 1/1, rtt min/avg/max/mdev 3.446/3.446/3.446/0.000 ms |
...
h3->h2: 1/1, rtt min/avg/max/mdev 3.315/3.315/3.315/0.000 ms |
...
h3->h4: 1/1, rtt min/avg/max/mdev 1.388/1.388/1.388/0.000 ms |
...
h4->h1: 1/1, rtt min/avg/max/mdev 3.345/3.345/3.345/0.000 ms |
...
h4->h2: 1/1, rtt min/avg/max/mdev 4.479/4.479/4.479/0.000 ms |
...
h4->h3: 1/1, rtt min/avg/max/mdev 1.302/1.302/1.302/0.000 ms |
...
mininet> |