Skip to content

bbill/of-tap-aggregation

 
 

Repository files navigation

SimpleTAP - OpenFlow TAP Aggregation App

SimpleTAP is an SDN application for Ryu SDN Controller, which configures TAP Aggregation Fabric with OpenFlow switches.

Installation

  • 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

Usage

  • 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 file

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 example

"switches": {
  "0000000000000001": {
    "name": "s1"
  },
  "0000000000000002": {
    "name": "s2"
  },
  "0000000000000003": {
    "name": "s3"
  }
}

rules example

"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 example

"taps": {
  "tap1": {
    "device_type": "mellanox",
    "hostname": "10.0.0.11",
    "username": "admin",
    "password": "admin"
  }
}

OpenFlow Pipeline

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

Example topology

TBD

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 98.1%
  • Shell 1.9%