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

Reply via email to