...
Requirements
This work basically requires
- Ubuntu 18.04 with kernel version >= v4.14
Following software are also required:
- Python 2.7
...
- , python-pip
...
mininet
Build ONOS
...
- , mininet, InfluxDB, Grafana
Provision emulator VM
Install p4tools
Code Block |
---|
$ onos-setup-p4-dev |
Install BPFCollector
- Install pre-built bcc package from https://github.com/
...
Provision emulator VM
Install p4tools
...
- iovisor/bcc.
Clone BPFCollector repo. (See BPFCollector for details.)
Code Block $ git clone https://
...
gitlab.com/
...
tunv_ebpf/BPFCollector.git $ cd BPFCollector $ git checkout -t origin/spec_1.0
Enable JIT for eBPF to make BPFCollector run faster
Code Block $
...
Install BPFCollector
...
sudo sysctl net/core/bpf_jit_enable=1
Install Cython to run the InfluxDB Client with better performance
Code Block $ pip install Cython
Add virtual interfaces for collector
Code Block $ sudo ip link add veth_
...
1 type veth peer name veth_
...
2 $ sudo ip link set dev veth_
...
1 up $ sudo ip link set dev veth_
...
2 up
Modify Mininet topology script
- Modify the file $ONOS_ROOT/tools/test/topos/bmv2-demo.py
Look for this line:
Code Block from mininet.link import TCLink
Change the line as follows:
Code Block from mininet.link import TCLink, Intf
Look for this line:
Code Block net.build()
Below this line, add the followings:
Code Block collectorIntf = Intf( 'veth_1', node=net.nameToNode[ "s12" ] )
How to run
- Configure
Run ONOS
appsCode Block $ ONOS_APPS=drivers.bmv2,proxyarp,lldpprovider,hostprovider,fwd
...
bazel run onos-local -- clean
Launch Mininet
Code Block $ sudo -E
...
$ONOS_ROOT/tools/test/topos/bmv2-demo
...
.py --onos-ip=127.0.0.1 --pipeconf-id=org.onosproject.pipelines.int
Launch
...
the collector
Code Block $ sudo systemctl start influxdb
...
$ sudo python
...
BPFCollector/InDBClient.py veth_
...
2
Activate
...
In-band telemetry control application
Code Block $ onos-app localhost activate org.onosproject.inbandtelemetry
Add mirroring configuration on the switch for telemetry report
Code Block $ simple_switch_CLI --thrift-port `cat /tmp/bmv2-s12-thrift-
...
port` RuntimeCmd: mirroring_add 500 5 (500: REPORT_MIRROR_SESSION_ID defined in int_definitions.p4) (5: port number to send mirrored packet, in this case veth_
...
- Add host to host intent
Code Block |
---|
$ onos localhost onos> add-host-intent 00:00:00:00:01:01/None 00:00:00:00:02:02/None |
...
1)
- Add collector configuration
- Connect to ONOS web interface (http://localhost:8181/onos/ui/)
- Open "In-band Telemetry Control" in the menu
...
- Type 127.0.0.1
...
- to "
...
- IPv4 address" field
...
- and 54321 to "port" field in "INT Collector Configuration" section
- Clink "Apply Configuration
...
- " button
- Add IntIntent to specify traffic to monitor
...
- Open "In-band Telemetry Control"
...
- in the ONOS GUI menu
- Fill in "
...
- Source IP address", "
...
- Destination IP address", "
...
- Source port", "
...
- Destination port" and "Protocol" field
- Destination port" and "Protocol" field
...
- Source and Destination IP address fields accepts IP address with mask (e.g., 10.0.0.0/24)
...
- Source and
...
- Destination port number requires exact port number
- Protocol supports either TCP or UDP
- Any field remained empty, except Protocol field, means wildcard.
- Choose metadata to collect
...
- Switch Id
...
- and Egress timestamp
...
- must be chosen so as to make
...
- the collector to work properly.
- "
...
- Egress Port Tx Utilization" are not supported in current version of BMv2 software switch yet.
- Click "
...
- Apply Watchlist Rule" button below the metadata to deploy INT Intent.
- Created INT Intent will be appeared in the table below.
Generate some traffic to monitor
Code Block mininet> h11 iperf -c h22 -u -t 10000
...
- Connect Grafana to see the collected data at http://localhost:3000