SimpleTAP is an SDN application for Ryu SDN Controller, which configures TAP Aggregation Fabric with OpenFlow switches.
- Install Python (2.7 and 3.4+ is supported)
- Get App from Github:
git clone git://github.com/kvadrage/of-tap-aggregation.git && cd of-tap-aggregation
- Install App prerequisites:
pip install -r requirements.txt
- Connect your TAP devices or SPAN ports to a fabric of switches with OpenFlow v1.3 support
- Connect your servers, running visibility and monitoring tools (like Wireshark or tcpdump), to this fabric as well
- Properly configure OpenFlow on these switches:
- OpenFlow 1.3
- Controller IP (port 6633)
- No TLS encryption
- Define the App config in config.json file
- Define OpenFlow Datapath IDs (DPIDs) for your switches in your fabric
- Define your TAP rules configuration (see below)
- Define your TAP devices configuration to automatically configure SPAN/Mirroring sessions on them. Supported device types:
- Run the App:
./run.sh
App configuration is represented as a dictionary and loaded at start from JSON file config.json
. It's structured into three major sections:
- switches - defines switch DPIDs in hex, that are allowed to participate in TAP Aggregation fabric
- rules - defines all TAP rules, that build end-to-end TAP sessions to deliver traffic from TAP devices to monitoring servers through entire fabric
- only ingress switch (ingress port) and egress switch (egress port) are required to be defined
- App will automatically build end-to-end path in the fabric and configure OpenFlow rules on fabric switches
- taps - defines active TAP devices on that automatic SPAN/Mirroring configuration is also required
"switches": {
"0000000000000001": {
"name": "s1"
},
"0000000000000002": {
"name": "s2"
},
"0000000000000003": {
"name": "s3"
}
}
"rules": {
"rule1": {
"in_switch": "0000000000000001",
"in_port": "s1-eth1",
"out_switch": "0000000000000003",
"out_port": "s3-eth2"
},
"rule2": {
"in_switch": "0000000000000001",
"in_port": "s1-eth2",
"out_switch": "0000000000000003",
"out_port": "s3-eth2",
"span": {
"tap": "tap1",
"in_port": "1/20",
"out_port": "1/21",
"direction": "both",
"truncate": false
}
}
}
"taps": {
"tap1": {
"device_type": "mellanox",
"hostname": "10.0.0.11",
"username": "admin",
"password": "admin"
}
}
TAP rules are translated into the following OpenFlow pipeline:
- Only table 0 is supported
- Match: based on in_port
- Action: output out_port
- End-to-end path is being provisioned using shortest path algorithm
- There is a chance that traffic from different TAP sessions might be mixed in the fabric
TBD