I'd say the right way to do it is to remove the event listeners set by one 
component, and then set them up using the other.  l2_multi wasn't really 
written with this in mind so it'd take a bit of tweaking to make it happen.  If 
you were really inclined to do so, I think the easiest way would be to add a 
boolean enable/disable flag to the l2_multi class and to your version of it.  
Then have an if statement in l2_multi._handle_ConnectionUp (and your own 
class's version) that uses the flag to decide whether it should actually call 
sw.connect().  When you want to switch between components, toggle the enabled 
flags, then iterate through all active connections, calling disconnect() on the 
switches of the old component and connect() on the switches of the new 
component.

I think there may be a far, far easier way to go about this, though.  It seems 
like the only thing you should need to change is _get_path() or _get_raw_path() 
or _calc_paths().  I'd just swap the function at runtime.  For example, if you 
put a modified _get_path() in ext/longestpath.py, you could do something like...

./pox.py forwarding.l2_multi openflow.discovery py

This will load up l2_multi and then give a Python interpreter.  You can swap 
the functions from the interpreter...
POX> import pox.forwarding.l2_multi as l2m
POX> shortest = l2m._get_path
POX> import ext.longestpath
POX> l2m._get_path = ext.longestpath._get_path

You can switch back to shortest again by doing:
POX> l2m._get_path = shortest

When you switch, you'll have to wait for existing flows to time out, or send a 
flow_mod to each connection to delete them (iterate over 
core.openflow.connections).  You might want to wrap that and the other commands 
above into a quick little toggle function, which you could then add to the 
interactive prompt.  The component would looks something like:

import pox.forwarding.l2_multi as l2m

_orig_get_path = l2m._get_path

def _my_get_path (...):
  ...
  Your longest path code here
  ...

def toggle ():
  if l2m._get_path is _orig_get_path:
    l2m._get_path = _my_get_path
  else:
    l2m._get_path = _orig_get_path

def launch ():
  core.Interactive.variables['toggle'] = toggle

Then you can just do toggle() from the POX prompt to switch.

Hope that helps.

(Excuse bugs in the above code; none of it is tested.)

-- Murphy

On May 29, 2013, at 3:13 AM, Windhya Rankothge wrote:

> 
> Hi,
> 
> I am soory if this is a stupid question, but I am new to POX and even though 
> i searched in internet i could not find an answer..
> 
> I am using two component files : l2_multi.py component which will send 
> traffic using shortest path.. and l2_multi_edited.py which will send traffic 
> using longest path..
> 
> I create a topoligy in mininet and start the POX with l2_multi.py component 
> which will send traffic using shortest path..
> 
> after sometime I want to change the componet to l2_multi_edited.py without 
> restarting POX, so that  traffic will be send with longest path..
> 
> how can I do this ? Please be kind enough to help me
> 
> 
> Best Regards,
>  
> Windhya Rankothge....

Reply via email to