OpenFlow App Framework
Project description
zof is a Python framework for creating asyncio-based applications that control the network using the OpenFlow protocol.
Supported Features
OpenFlow versions 1.0 - 1.4 (with partial support for 1.5)
TLS connections
Limited packet parsing and generation: ARP, LLDP, IPv4, IPv6, UDP, TCP, ICMPv4, ICMPv6
App’s can simulate switches; Supports both sides of the OpenFlow protocol
Requirements
Python 3.5.1 or later
oftr command line tool
Install - Linux
# Install /usr/bin/oftr dependency.
sudo add-apt-repository ppa:byllyfish/oftr
sudo apt-get update
sudo apt-get install oftr
# Create virtual environment and install latest zof.
python3.5 -m venv myenv
source myenv/bin/activate
pip install zof
The oftr command line tool can also be installed on a Raspberry PI or using HomeBrew.
Demos
To run the layer2 controller demo:
python -m zof.demo.layer2
Architecture
zof uses a separate oftr process to terminate OpenFlow connections and translate OpenFlow messages to JSON.
You construct OpenFlow messages via YAML strings or Python dictionaries. Incoming OpenFlow messages are generic Python objects. Special OpenFlow constants such as ‘NO_BUFFER’ appear as strings.
type: FLOW_MOD
msg:
command: ADD
match:
- field: IN_PORT
value: 1
- field: ETH_DST
value: 00:00:00:00:00:01
instructions:
- instruction: APPLY_ACTIONS
actions:
- action: OUTPUT
port_no: 2
The basic building block of zof is an app. An app is associated with various message and event handlers. You create an app object using the zof.Application class. Then, you associate handlers using the app’s message decorator.
import zof
APP = zof.Application('app_name_here')
@APP.message('packet_in')
def packet_in(event):
APP.logger.info('packet_in message %r', event)
@APP.message(any)
def other(event):
APP.logger.info('other message %r', event)
if __name__ == '__main__':
zof.run()
Place the above text in a file named demo.py and run it with python demo.py. This app handles OpenFlow ‘PACKET_IN’ messages using the packet_in function. All other messages are dispatched to the other function. The app does not do anything; it just logs events.
To compose the demo.py program with the layer2 demo:
python demo.py --x-modules=zof.demo.layer2
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file zof-0.19.0.tar.gz
.
File metadata
- Download URL: zof-0.19.0.tar.gz
- Upload date:
- Size: 74.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.8.1 pkginfo/1.3.2 requests/2.11.1 setuptools/28.8.0 requests-toolbelt/0.7.0 clint/0.5.1 CPython/3.6.3 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0be48b6f9070485a80331546ba55e7e48fdd53e41781603e6cdf2f32ffb0a9f7 |
|
MD5 | 3ce13c91353169f4d93044e6ae416538 |
|
BLAKE2b-256 | 3fe201f42efbc02666a80fb581aa8ea410b82cc3514a4ebe1e158dbf9f9be4fe |
File details
Details for the file zof-0.19.0-py3-none-any.whl
.
File metadata
- Download URL: zof-0.19.0-py3-none-any.whl
- Upload date:
- Size: 67.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.8.1 pkginfo/1.3.2 requests/2.11.1 setuptools/28.8.0 requests-toolbelt/0.7.0 clint/0.5.1 CPython/3.6.3 Darwin/17.7.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2403445ae8a18f3711ec436219827edff49a168e3d28a91ae2b2aecda8371889 |
|
MD5 | 6ee3a4920dbdda29a5a5c687b7d99543 |
|
BLAKE2b-256 | a92ff08d0ab1eaa1c853a323f46607f4648e13f235df1a0ab5f9777b12692f11 |