The POX network software platform

Overview

POX

POX is a networking software platform written in Python.

POX started life as an OpenFlow controller, but can now also function as an OpenFlow switch, and can be useful for writing networking software in general. It currently supports OpenFlow 1.0 and includes special support for the Open vSwitch/Nicira extensions.

POX versions are named. Starting with POX "gar", POX officially requires Python 3. The last version with support for Python 2 was POX "fangtooth". POX should run under Linux, Mac OS, and Windows. (And just about anywhere else -- we've run it on Android phones, under FreeBSD, Haiku, and elsewhere. All you need is Python!) Some features are not available on all platforms. Linux is the most featureful.

This README contains some information to get you started, but is purposely brief. For more information, please see the full documentation.

Running POX

pox.py boots up POX. It takes a list of component names on the command line, locates the components, calls their launch() function (if it exists), and then transitions to the "up" state.

If you run ./pox.py, it will attempt to find an appropriate Python 3 interpreter itself. In particular, if there is a copy of PyPy in the main POX directory, it will use that (for a potentially large performance boost!). Otherwise it will look for things called python3 and fall back to python. You can also, of course, invoke the desired Python interpreter manually (e.g., python3 pox.py).

The POX commandline optionally starts with POX's own options (see below). This is followed by the name of a POX component, which may be followed by options for that component. This may be followed by further components and their options.

./pox.py [pox-options...] [component] [component-options...] ...

POX Options

While components' options are up to the component (see the component's documentation), as mentioned above, POX has some options of its own. Some useful ones are:

Option Meaning
--verbose print stack traces for initialization exceptions
--no-openflow don't start the openflow module automatically

Components

POX components are basically Python modules with a few POX-specific conventions. They are looked for everywhere that Python normally looks, plus the pox and ext directories. Thus, you can do the following:

./pox.py forwarding.l2_learning

As mentioned above, you can pass options to the components by specifying options after the component name. These are passed to the corresponding module's launch() funcion. For example, if you want to run POX as an OpenFlow controller and control address or port it uses, you can pass those as options to the openflow._01 component:

./pox.py openflow.of_01 --address=10.1.1.1 --port=6634

Further Documentation

The full POX documentation is available on GitHub at https://noxrepo.github.io/pox-doc/html/

Comments
  • Can a host in mininet connect to internet or webserver

    Can a host in mininet connect to internet or webserver

    I am working on a project "Detection of outgoing DDoS attack" I am using mininet with pox-fangtooth controller internet from host this screenshot is the xterm terminal of host h1 I want the hosts in the mininet network to access an external server or a web server Could you kindly guide on how to connect host to internet

    opened by pvshalini 0
  • Redirect traffic after changing host IP address in Mininet

    Redirect traffic after changing host IP address in Mininet

    Hi Good day Your help here is much appreciated

    I am using Meininet install on Ubuntu 20.04

    h1 as tcp server ( using iPerf ) h2 h3 h4 clients

    if change IP for h1 (server)

    • mininet> h1 ifconfig h1-eth0 20.0.0.60 netmask 255.255.255.0

    • How we can redirect h2 h3 h4 clients' traffic without losing concoction ? or Mapping

    • is Pox have components to hand it? or Mapping

    • Does any command line in mininet can handle it?

    • any solution or something to do?

    Please guide me

    Best Regards

    pic
    opened by MohsenBs 1
  • No access to Internet after running POX  and connected to OpenWRT router

    No access to Internet after running POX and connected to OpenWRT router

    Hello Dear @MurphyMc

    I have installed POX on ubuntu 20.04 + have installed OVS on the OpenWRT router . .

    I have set the OpenWRT router as an access point, but when I run POX and connect the OpenWRT through ovs , I cant access the internet!

    actually, when using this command: "/ usr/share/openvswitch/scripts/ovs-ctl start" to start listening to pox , the host they connected to OpenWRT router can't access the internet

    did you know why?. before running pox the router worked fine

    thanks in advanced

    opened by EngHassanJ 3
  • Clients IPs are not changed with DHCP

    Clients IPs are not changed with DHCP

    Hi

    I am using Meininet that install on Ubuntu 20.04

    • I have run dhcp with POX command (( proto.dhcpd --network=10.1.1.0/24 --ip=10.1.1.1 --first=10 --last=None --router=None --dns=4.2.2.1))

    • Hosts can get a dynamic address but the address does not change to a different address when DHCP is requested again

    • after dhclient and dhclient -r commands the IP address is still the same on mininet hosts. How can change or renew with different IPs?

    image image

    opened by MohsenBs 6
  • l2_multi always destination host unreachable error

    l2_multi always destination host unreachable error

    hi

    ı am newbie. I can run l2_learning without any problem however try to run l2_multi but ı failed. ı couldnt find the problem.

    my basic mininet topology

    def myNetwork(): net = Mininet( topo=None, build=False, ipBase='10.0.0.0/8')

    info( '*** Adding controller\n' )
    c0=net.addController(name='c0',
                      controller=RemoteController,
                      ip='127.0.0.1',
                      protocol='tcp',
                      port=6633)
    
    info( '*** Add switches\n')
    s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
    s2 = net.addSwitch('s2', cls=OVSKernelSwitch)
    
    info( '*** Add hosts\n')
    h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
    h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
    
    info( '*** Add links\n')
    net.addLink(s2, s1)
    net.addLink(s1, h1)
    net.addLink(s2, h2)
    
    info( '*** Starting network\n')
    net.build()
    info( '*** Starting controllers\n')
    for controller in net.controllers:
        controller.start()
    
    info( '*** Starting switches\n')
    net.get('s1').start([c0])
    net.get('s2').start([c0])
    
    info( '*** Post configure switches and hosts\n')
    
    CLI(net)
    net.stop()
    

    if name == 'main': setLogLevel( 'info' ) myNetwork()

    and the command that ı run l2_multi

    python3 ./pox.py log.level --DEBUG log --file=mylog,w openflow.discovery forwarding.l2_multi

    the result after that command

    POX 0.7.0 (gar) / Copyright 2011-2021 James McCauley, et al. DEBUG:core:POX 0.7.0 (gar) going up... DEBUG:core:Running on CPython (3.10.6/Aug 10 2022 11:40:04) DEBUG:core:Platform is Linux-5.15.0-50-generic-x86_64-with-glibc2.35 WARNING:version:POX requires one of the following versions of Python: 3.6 3.7 3.8 3.9 WARNING:version:You're running Python 3.10. WARNING:version:If you run into problems, try using a supported version. DEBUG:openflow.of_01:Listening on 0.0.0.0:6633 INFO:core:POX 0.7.0 (gar) is up . INFO:openflow.of_01:[00-00-00-00-00-01 1] connected DEBUG:openflow.discovery:Installing flow for 00-00-00-00-00-01 DEBUG:forwarding.l2_multi:Connect [00-00-00-00-00-01 1] INFO:openflow.of_01:[00-00-00-00-00-02 2] connected DEBUG:openflow.discovery:Installing flow for 00-00-00-00-00-02 DEBUG:forwarding.l2_multi:Connect [00-00-00-00-00-02 2] INFO:openflow.discovery:link detected: 00-00-00-00-00-01.1 -> 00-00-00-00-00-02.1 INFO:openflow.discovery:link detected: 00-00-00-00-00-02.1 -> 00-00-00-00-00-01.1

    then it enters infinte loop like below, even if ı send ping h1 to h2 same issue

    DEBUG:forwarding.l2_multi:Learned 52:97:c0:08:11:46 at 00-00-00-00-00-01.65534 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Learned de:89:93:80:00:45 at 00-00-00-00-00-02.65534 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Learned fe:6b:6c:db:4d:0c at 00-00-00-00-00-01.1 DEBUG:forwarding.l2_multi:Flood multicast from fe:6b:6c:db:4d:0c DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Learned 6a:ae:c2:df:b3:2f at 00-00-00-00-00-02.1 DEBUG:forwarding.l2_multi:Flood multicast from 6a:ae:c2:df:b3:2f DEBUG:forwarding.l2_multi:Flood multicast from fe:6b:6c:db:4d:0c DEBUG:forwarding.l2_multi:Learned da:15:41:67:39:22 at 00-00-00-00-00-01.2 DEBUG:forwarding.l2_multi:Flood multicast from da:15:41:67:39:22 DEBUG:forwarding.l2_multi:Learned 46:cc:6f:63:83:98 at 00-00-00-00-00-02.2 DEBUG:forwarding.l2_multi:Flood multicast from 46:cc:6f:63:83:98 DEBUG:forwarding.l2_multi:Flood multicast from 6a:ae:c2:df:b3:2f DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45 DEBUG:forwarding.l2_multi:Flood multicast from 52:97:c0:08:11:46 DEBUG:forwarding.l2_multi:Flood multicast from de:89:93:80:00:45

    if ı type h1 ping h2, gets below always

    DEBUG:forwarding.l2_multi:Flood multicast from da:15:41:67:39:22

    and destination host unreachable

    or h2 ping h1, gets below always

    DEBUG:forwarding.l2_multi:Flood multicast from 46:cc:6f:63:83:98

    and destination host unreachable

    and when ı debug packet inner while sending ping, ı see that for all my pings

    packet [00:00:00:00:00:02>ff:ff:ff:ff:ff:ff ARP]

    where am i doing wrong. Thanks

    opened by cagataykiziltan 1
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • pox/forwarding/l2_learning.py
    • pox/messenger/init.py
    • pox/openflow/flow_table.py
    • pox/openflow/of_01.py

    Fixes:

    • Should read somewhat rather than somwhat.
    • Should read received rather than receieved.
    • Should read negotiation rather than negotation.
    • Should read explicitly rather than explicitely.
    • Should read appropriate rather than appopriate.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 1
Network Automation and Programmability Abstraction Layer with Multivendor support

NAPALM NAPALM (Network Automation and Programmability Abstraction Layer with Multivendor support) is a Python library that implements a set of functio

napalm-automation 2k Dec 31, 2022
Temporal network visualization

Temporal network visualization This code is what I used to make the visualizations of SocioPatterns' primary school data here It requires the data of

Petter Holme 12 Jun 4, 2022
A python module to create random networks using network models

networkgen A python module to create random networks using network models Usage $

Serkan Demirci 3 Sep 26, 2022
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:

Latest Salt Documentation Open an issue (bug report, feature request, etc.) Salt is the world’s fastest, most intelligent and scalable automation engi

SaltStack 12.9k Jan 4, 2023
Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Source-o-grapher is a tool built with the aim to investigate software resilience aspects of Open Source Software (OSS) projects.

Aristotle University 5 Jun 28, 2022
EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

EasyBuild is a software build and installation framework that allows you to manage (scientific) software on High Performance Computing (HPC) systems in an efficient way.

EasyBuild community 87 Dec 27, 2022
GlobaLeaks is free, open source software enabling anyone to easily set up and maintain a secure whistleblowing platform.

GlobaLeaks is free, open souce software enabling anyone to easily set up and maintain a secure whistleblowing platform. Continous Integration and Test

GlobaLeaks 995 Jan 1, 2023
The Open edX platform, the software that powers edX!

This is the core repository of the Open edX software. It includes the LMS (student-facing, delivering courseware), and Studio (course authoring) compo

edX 6.2k Jan 1, 2023
Spinnaker is an open source, multi-cloud continuous delivery platform for releasing software changes with high velocity and confidence.

Welcome to the Spinnaker Project Spinnaker is an open-source continuous delivery platform for releasing software changes with high velocity and confid

null 8.8k Jan 7, 2023
Open source hardware and software platform to build a small scale self driving car.

Donkeycar is minimalist and modular self driving library for Python. It is developed for hobbyists and students with a focus on allowing fast experimentation and easy community contributions.

Autorope 2.4k Jan 4, 2023
Clinica is a software platform for clinical research studies involving patients with neurological and psychiatric diseases and the acquisition of multimodal data

Clinica Software platform for clinical neuroimaging studies Homepage | Documentation | Paper | Forum | See also: AD-ML, AD-DL ClinicaDL About The Proj

ARAMIS Lab 165 Dec 29, 2022
Nautobot is a Network Source of Truth and Network Automation Platform.

Nautobot is a Network Source of Truth and Network Automation Platform. Nautobot was initially developed as a fork of NetBox (v2.10.4). Nautobot runs as a web application atop the Django Python framework with a PostgreSQL database.

Nautobot 549 Dec 31, 2022
Cross-platform desktop synchronization client for the Nuxeo platform.

Nuxeo Drive Desktop Synchronization Client for Nuxeo This is an ongoing development project for desktop synchronization of local folders with remote N

Nuxeo 63 Dec 16, 2022
Phone Number formatting for PlaySMS Platform - BulkSMS Platform

BulkSMS-Number-Formatting Phone Number formatting for PlaySMS Platform - BulkSMS Platform. Phone Number Formatting for PlaySMS Phonebook Service This

Edwin Senunyeme 1 Nov 8, 2021
Backend for the Autocomplete platform. An AI assisted coding platform.

Introduction A custom predictor allows you to deploy your own prediction implementation, useful when the existing serving implementations don't fit yo

Tatenda Christopher Chinyamakobvu 1 Jan 31, 2022
Choice Coin 633 Dec 23, 2022
A simple software which can use to make a server in local network

home-nas it is simple software which can use to make a server in local network, it has a web site on it which can use by multipale system, i use nginx

R ansh joseph 1 Nov 10, 2021
Python3 program to control Elgato Ring Light on your local network without Elgato's Control Center software

Elgato Light Controller I'm really happy with my Elgato Key Light from an illumination perspective. However, their control software has been glitchy f

Jeff Tarr 14 Nov 16, 2022
This is a python based command line Network Scanner utility, which input as an argument for the exact IP address or the relative IP Address range you wish to do the Network Scan for and returns all the available IP addresses with their MAC addresses on your current Network.

This is a python based command line Network Scanner utility, which input as an argument for the exact IP address or the relative IP Address range you wish to do the Network Scan for and returns all the available IP addresses with their MAC addresses on your current Network.

Abhinandan Khurana 1 Feb 9, 2022