traceroute works via expiring TTLs, which won't happen in OpenFlow switches without some extra work.
I don't know of a better way than just running a bunch of tcpdump/wireshark instances on all the intermediate switches. -- Murphy On May 29, 2013, at 7:25 AM, Windhya Rankothge wrote: > Sorry trouble you again Murphy.. > > Is there any way that I can trace the packet, so that I can check the > correctness of my algorithms ? > > I tried traceroute, but looks like its not working as expected in Mininet > > > On Wed, May 29, 2013 at 2:13 PM, Windhya Rankothge <windys...@gmail.com> > wrote: > Thanks Murphy.. It worked correctly.. > > > On Wed, May 29, 2013 at 12:52 PM, Murphy McCauley <murphy.mccau...@gmail.com> > wrote: > 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.... > > > > > -- > Best Regards, > > Windhya Rankothge..... (WINDY) > > > > -- > Best Regards, > > Windhya Rankothge..... (WINDY)