OpenFlow on 4112F-ON
- Create OpenFlow Load Balancer
See here for a listing of files and source code.
Reading Material
Section titled “Reading Material”Open Flow Switch Specification v1.3.1
Dell OpenFlow Deployment and User Guide 3.0
Overview
Section titled “Overview”My Configuration
Section titled “My Configuration”- Controller is running on Windows in PyCharm while I’m testing. I’ll move it to RHEL when I’m done.
- I am using a S4112F-ON
- I am using a Ryu OpenFlow controller
Switch Version Info
Section titled “Switch Version Info”Dell EMC Networking OS10 EnterpriseCopyright (c) 1999-2020 by Dell Inc. All Rights Reserved.OS Version: 10.5.1.0Build Version: 10.5.1.0.124Build Time: 2020-02-12T09:05:20+0000System Type: S4112F-ONArchitecture: x86_64Up Time: 00:03:52Setup Controller
Section titled “Setup Controller”pip install -r requirements.txtOn Host Workstation
Section titled “On Host Workstation”** Make sure you use sudo or things will go wrong **
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -sudo apt-get install -y nodejssudo npm install -g @angular/clisudo ng add @angular/materialYou can drop the -g if you want to install angular locally in the directory instead of globally.
You will have to prefix your commands with npx -p @angular/cli ng
To setup debugging do the following:
-
Go to https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome and install the addon for Visual Studio Code
-
Go to the debugging tab in Visual Studio code, hit the down arrow next to launch program and click launch Chrome.
-
I used the following configuration:
{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"type": "chrome","request": "launch","name": "Launch Chrome against localhost","url": "http://localhost:4200","webRoot": "c:\\Users\\grant\\Documents\\trafficshaper\\angular"}]}
Setup OpenFlow on the Switch
Section titled “Setup OpenFlow on the Switch”Enable OpenFlow
Section titled “Enable OpenFlow”On the switch run:
OS10# configure terminalOS10(config)# openflowOS10(config-openflow)# mode openflow-onlyConfigurations not relevant to openflow mode will be removed from the startup-configuration and system will be rebooted. Do you want to proceed? [confirm yes/no]:yesConfigure Management
Section titled “Configure Management”OS10(conf-if-ma-1/1/1)# interface mgmt 1/1/1OS10(conf-if-ma-1/1/1)# ip address <SOME MANAGEMENT IP>/24OS10(conf-if-ma-1/1/1)# no shutdownOS10(conf-if-ma-1/1/1)# exitConfigure OpenFlow Controller
Section titled “Configure OpenFlow Controller”OS10# configure terminalOS10(config)# openflowOS10(config-openflow)# switch of-switch-1OS10(config-openflow-switch)# controller ipv4 <YOUR_CONTROLLER_IP> port 6633OS10(config-openflow-switch)# protocol-version 1.3OS10(config-openflow-switch)# no shutdownRunning the Code
Section titled “Running the Code”python main.py
Supported Protocols
Section titled “Supported Protocols”- TCP
- UDP
- ICMP
Helpful Commands
Section titled “Helpful Commands”Personal Notes
Section titled “Personal Notes”Things We Want
Section titled “Things We Want”Protocols
Section titled “Protocols”HTTP TLS DNS SSH
Things to mention
Section titled “Things to mention”- Inline decryption possibilities
Use Cases
Section titled “Use Cases”- I want to tie a sensor directly to a DC. So all things for that DC go to one sensor
A couple of dropdown boxes in a statement and an execute button. One of those things could be an IP address, or a port, or a protocol, physical port
Problems
Section titled “Problems”need to make sure we don’t receive a reject message need to make it so outports and inports persist if something is an input port do we want to stop them from using redirect port I need to go back and make sure that when compressed tiles move to the next line I need to handle getting flows for the openflow controller’s interface Need to add error handling if the server is unavailable Need to update the getPorts documentation