[pox-dev] POX supports for Mixed network elements
Murphy McCauley
murphy.mccauley at gmail.com
Thu Feb 7 21:51:30 PST 2013
On Feb 7, 2013, at 9:14 PM, S Suresh wrote:
> Does Single SDN controller(POX) supports mix of different type of
> network devices??
>
> For example , in a topology i have 2 switches , 2 routers, firewall,
> etc. I have equavelnt POX forwaridng scripts for each device. i want
> to control this topology in single POX controller.
>
> Does openflow /SDN standard defines this kind of scenario? Does POX
> support this scenario?
>
> Can some one give pointers/referece on this?
Sure. There are at least two ways to do this in POX.
The most well-reasoned way to do it is by creating multiple OpenFlowNexus objects and using the ConnectionIn event on core.OpenFlowConnectionArbiter to choose which nexus a given switch is assigned to. In practice, most existing components don't support this method (they generally just assume you want to use the core.openflow nexus).
A more practical way to do it is based on the idea that a really common pattern for components involves sort of a two step initialization. Step 1 is in their launch() (which is called when the component is specified on the commandline), where they pretty much just set a listener -- often for openflow.ConnectionUp. Step 2 happens when that event fires and they do some per-connection setup.
To make different switches act differently, you simply don't let the components do their normal Step 1. Instead, you write a new component which watches for new switches. When it sees one, it decides which other component it wants associated with that switch, and instigates the appropriate Step 2 setup itself.
If that all sounds too abstract, I've just pushed the samples.mixed_switches component which demonstrates this technique by running switches with odd numbered DPIDs as l2_pairs and even numbered DPIDs as l2_learning.
More generally speaking, there's no reason you can't or wouldn't do this as long as your components are written to work correctly with it and if they're compatible on the dataplane. For example, l2_multi uses openflow.discovery, and l2_learning will normally not pass discovery's LLDP packets, so running these two together wouldn't be ideal (though you could probably run the l2_learning switches in transparent mode and have it work...).
All of this is just software. Think about it this way: rather than assign some switches to l2_pairs and others to l2_learning, I could have just written l2_complicated, which internally did different things for different switches using an if statement. Alternatively, I could have just run two instances of POX and pointed some switches at one and some switches at the other. As long as the combinations of behavior make sense, there's nothing to stop you from doing it any number of ways.
Hope that helps.
-- Murphy
More information about the pox-dev
mailing list