...
Code Block | ||||
---|---|---|---|---|
| ||||
ApplicationId myAppId = ...; DeviceId myDeviceId = ...; Bmv2DeviceContext myContext = ...; Bmv2Configuration myConfiguration = myContext.configuration(); Ip4Prefix dstPrefix = Ip4Prefix.valueOf("192.16.184.0/24"); ExtensionSelector extSelector = Bmv2ExtensionSelector.builder() .forConfiguration(myConfiguration) .matchExact("standard_metadata", "ingress_port", 10) .matchLpm("ipv4", "dstAddr", dstPrefix.address().toOctets(), dstPrefix.prefixLength()) .build(); ExtensionTreatment extTreatment = Bmv2ExtensionTreatment.builder() .forConfiguration(myConfiguration) .setActionName("next_hop") .addParameter("nhop_id", 4) .build(); FlowRule rule = DefaultFlowRule.builder() .forDevice(myDeviceId) .fromApp(myAppId) .forTable(0) .withSelector(DefaultTrafficSelector.builder() .extension(extSelector, myDeviceId) .build()) .withTreatment(DefaultTrafficTreatment.builder() .extension(extTreatment, myDeviceId) .build()) .build(); |
Developers guide
ONOS+P4 development environment (onos-p4-dev)
To make it easy for you to get started, we prepared a repository with all you need to build and run a Mininet network of BMv2 devices that connect to ONOS. It includes:
...
Info | ||
---|---|---|
| ||
To get the most from the tools and instructions discussed in the following sections, it is highly recommended that you add this line to your shell configuration profile (.bash_aliases, .profile, etc.):
|
Walkthrough
This walkthrough demonstrates the necessary steps and commands to run a network of BMv2 devices in Mininet, connected to ONOS.
Build and run ONOS. This how-to screencast is a good starting point to build and run ONOS locally on your development machine, for any other information please refer to the ONOS Developer Guide.
Info title Important! Build using Maven We are transitioning our build system from Maven to BUCK. Most of ONOS 1.6 modules can be build using BUCK expect for the bmv2 modules which are built by Maven. Hence, be sure to build ONOS using the command:
Code Block $ mvn clean install
Activate the BMv2 drivers. In the ONOS command line type:
Code Block onos> app activate org.onosproject.drivers.bmv2
Check that the necessary components both the BMv2 providers and drivers have been loaded successfully. On the ONOS command line, type:
Code Block onos> app -s -a
You should see an output similar to this (depending on your startup apps defined in ONOS_APPS)
Code Block onos> apps -s -a * 8 org.onosproject.bmv2 1.6.1.SNAPSHOT BMv2 Providers * 18 org.onosproject.drivers 1.6.1.SNAPSHOT Default Device Drivers * 19 org.onosproject.drivers.bmv2 1.6.1.SNAPSHOT BMv2 Drivers * 26 org.onosproject.openflow-base 1.6.1.SNAPSHOT OpenFlow Provider * 27 org.onosproject.hostprovider 1.6.1.SNAPSHOT Host Location Provider * 28 org.onosproject.lldpprovider 1.6.1.SNAPSHOT LLDP Link Provider * 29 org.onosproject.openflow 1.6.1.SNAPSHOT OpenFlow Meta App * 41 org.onosproject.fwd 1.6.1.SNAPSHOT Reactive Forwarding App * 80 org.onosproject.proxyarp 1.6.1.SNAPSHOT Proxy ARP/NDP App
Check that both the BMv2 providers and drivers are loaded. The output of the command should be similar to this:
Code Block Start Mininet using the custom file
bmv2.py
included inonos-p4-dev
. On your Mininet VM (the same where you have clonedonos-p4-dev
) shell, type:Code Block mininet-vm$ sudo -E mn --custom $BMV2_PY --switch onosbmv2 --controller remote,ip=192.168.57.1,port=40123
This will run a simple Mininet topology with 2 hosts connected to a BMv2 switch. The
-E
argument in sudo ensures that all environment variables are exported to the root user, including$BMV2_EXE
(path to the switch target executable) and$BMV2_JSON
(JSON configuration to use at BMv2 startup).$BMV2_PY
is used to point to the location of the Mininet custom filebmv2.py
. All these variables are exported automatically by theonos-p4-dev
shell configuration script. In this case, ONOS is running on a machine reachable from the Mininet VM at the IP address 192.168.57.1.Be sure to use the correct IP address of your ONOS instance. 40123 is the default listening port of the BMv2 controller in ONOS.Info title Running BMv2 for the first time Be aware that when running BMv2 for the first time, it may take a while before the software switch process is executed.
Check that the BMv2 switch has successfully connected to ONOS. On the ONOS command line, check the output of the following command:
Code Block onos> devices id=bmv2:192.168.57.100:45674#1, available=false, role=NONE, type=SWITCH, mfr=p4.org, hw=bmv2, sw=1.0.0, serial=n/a, driver=bmv2-thrift, bmv2JsonConfigMd5=aefbfbd1543efbfbdefbfbdefbfbd121defbfbdefbfbd3468efbfbd76, bmv2ProcessInstanceId=-1811218096, protocol=bmv2-thrift
bmv2.py Mininet script
- Sample commands to run a network of bmv2 devices connected to ONOS
- Usage with onos.py
...