That is right.
The topology API only talks to the switch. The way I did that was by
learning the hosts when the ARPs arrive. If you look at the code you'll
find it in the part who says if host is unknown.
Regarding the backup path, I don't know what is your timeline, but you
might also want to check other strategies. A friend of mine did something
similar, but he would pre-compute the backup paths. That can add a lot of
complexity, but it also adds a very interesting feature to the topology.
Flávio Castro Jr.
MSCS student at Georgia Tech
B.S.E in Networks Engineering from the University of Brasilia.
CCNA Certified
(404) 660-9373
On Fri, Jan 9, 2015 at 7:59 AM, Padma Jayasankar <[email protected]>
wrote:
> Hi,
> In Ryu, will the topology discovery find the links between the hosts and
> the switch. when i checked the gui_topology app, it displays the links in
> between the switches but doesn't show the links between the host and switch.
> Please clarify.
>
> Thanks and Regards,
> Padma V
>
> On Fri, Jan 9, 2015 at 9:39 AM, Flavio Junior <[email protected]>
> wrote:
>
>> I guess the problem is that I only add links to the graph, I don't update
>> it. So you have to figure out a way to dynamically update the graph.
>>
>> I don't understand why you are using the EventLinkAdd methods from the
>> topology class. What are you trying to do again?
>>
>> Flávio Castro Jr.
>> MSCS student at Georgia Tech
>> B.S.E in Networks Engineering from the University of Brasilia.
>> CCNA Certified
>> (404) 660-9373
>>
>> On Thu, Jan 8, 2015 at 11:01 PM, Padma Jayasankar <[email protected]>
>> wrote:
>>
>>> Hi,
>>> Now shortestpath is working with my topology..i am able to ping b/w
>>> the hosts.
>>> But, when i am trying to make a link down, the updated topology is not
>>> getting reflected in shortestpath. According to my understanding, i have to
>>> add handlers in the app for EventLinkAdd and EventLinkDelete. Is it the
>>> correct approach?Pease clarify.
>>>
>>>
>>> Thanks and Regards,
>>> Padma V
>>>
>>> On Wed, Jan 7, 2015 at 11:52 PM, Padma Jayasankar <[email protected]>
>>> wrote:
>>>
>>>> HI,
>>>> Thanks, will try with this
>>>>
>>>> On Wed, Jan 7, 2015 at 11:43 PM, Flavio Junior <[email protected]>
>>>> wrote:
>>>>
>>>>> I can't help without seeing your code because it's a KeyError.
>>>>>
>>>>> Make sure link.src is what you are looking for. I guess link.src is an
>>>>> object rather than a string, so it may be it.
>>>>>
>>>>> One thing that was really useful for me was this method to figure out
>>>>> the exact content of the given objects.
>>>>>
>>>>> def ls(self,obj):
>>>>> print("\n".join([x for x in dir(obj) if x[0] != "_"]))
>>>>>
>>>>>
>>>>>
>>>>> Flávio Castro Jr.
>>>>> MSCS student at Georgia Tech
>>>>> B.S.E in Networks Engineering from the University of Brasilia.
>>>>> CCNA Certified
>>>>> (404) 660-9373
>>>>>
>>>>> On Wed, Jan 7, 2015 at 12:27 PM, Padma Jayasankar <[email protected]
>>>>> > wrote:
>>>>>
>>>>>> Hi,
>>>>>> Now the topology discovery identifies the links and am able to ping
>>>>>> b/w two hosts..But when i am trying to down a link(link s3 s7 down), it
>>>>>> gives some error. Further if i try to ping it doesn't compute the
>>>>>> alternate
>>>>>> path. Instead it shows"destination not reachable"
>>>>>>
>>>>>> *Error:*
>>>>>> hub: uncaught exception: Traceback (most recent call last):
>>>>>> File "/usr/local/lib/python2.7/
>>>>>> dist-packages/ryu/lib/hub.py", line 52, in _launch
>>>>>> func(*args, **kwargs)
>>>>>> File
>>>>>> "/usr/local/lib/python2.7/dist-packages/ryu/topology/switches.py", line
>>>>>> 819, in link_loop
>>>>>> self.links.link_down(link)
>>>>>> File
>>>>>> "/usr/local/lib/python2.7/dist-packages/ryu/topology/switches.py", line
>>>>>> 329, in link_down
>>>>>> del self._map[link.src]
>>>>>> KeyError: <ryu.topology.switches.Port object at 0x29a2a90>
>>>>>>
>>>>>> Could u please help to solve this issue
>>>>>>
>>>>>> On Mon, Jan 5, 2015 at 12:11 AM, Flavio Junior <[email protected]
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi.
>>>>>>>
>>>>>>> Sometimes the topology discovery would not work for, apparently, no
>>>>>>> reason. Are there any known bugs there?
>>>>>>>
>>>>>>> I know it's a huge pain to debug the topology discovery but if you
>>>>>>> can't build the view of the topology then you won't be able to forward.
>>>>>>>
>>>>>>> What solved the problem was the order in which I would start
>>>>>>> mininet/ryu. So try starting ryu after mininet if you are not doing
>>>>>>> that,
>>>>>>> or the opposite if that's the case.
>>>>>>>
>>>>>>> Flavio Castro
>>>>>>>
>>>>>>> On Sun, Jan 04, 2015 at 8:27 AM, Padma Jayasankar <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>> HI,
>>>>>>> I tried shortest path code with two topologies(with loops). For the
>>>>>>> simple one with 3 switches it worked. But for the other with 9 switches
>>>>>>> it
>>>>>>> displays the "list of links" as follows and when i try to ping, i got
>>>>>>> "destination unreachable". I am not able to find the reason. Could u
>>>>>>> please
>>>>>>> help to solve the issue? I have given the topology and the o/p below.
>>>>>>>
>>>>>>> *Topology:*
>>>>>>> """Custom topology example
>>>>>>> 2 hosts and 8 switches(with loops)
>>>>>>>
>>>>>>> """
>>>>>>>
>>>>>>> from mininet.topo import Topo
>>>>>>>
>>>>>>> class MyTopo( Topo ):
>>>>>>> "Simple topology example."
>>>>>>>
>>>>>>> def __init__( self ):
>>>>>>> "Create custom topo."
>>>>>>>
>>>>>>> # Initialize topology
>>>>>>> Topo.__init__( self )
>>>>>>>
>>>>>>> # Add hosts and switches
>>>>>>> leftHost = self.addHost( 'h1' )
>>>>>>> rightHost = self.addHost( 'h2' )
>>>>>>> leftSwitch = self.addSwitch( 's3' )
>>>>>>> midSwitch1 = self.addSwitch( 's4' )
>>>>>>> midSwitch2 = self.addSwitch( 's5' )
>>>>>>> midSwitch3 = self.addSwitch( 's6' )
>>>>>>> midSwitch4 = self.addSwitch( 's7' )
>>>>>>> midSwitch5 = self.addSwitch( 's8' )
>>>>>>> midSwitch6 = self.addSwitch( 's9' )
>>>>>>> midSwitch7 = self.addSwitch( 's10' )
>>>>>>> rightSwitch = self.addSwitch( 's11' )
>>>>>>>
>>>>>>> # Add links
>>>>>>> self.addLink( leftHost, leftSwitch )
>>>>>>> self.addLink( leftSwitch, midSwitch1 )
>>>>>>> self.addLink( leftSwitch, midSwitch4 )
>>>>>>> self.addLink( midSwitch1, midSwitch2 )
>>>>>>> self.addLink( midSwitch1, midSwitch6 )
>>>>>>> self.addLink( midSwitch2, midSwitch3 )
>>>>>>> self.addLink( midSwitch3, midSwitch7 )
>>>>>>> self.addLink( midSwitch3, rightSwitch )
>>>>>>> self.addLink( midSwitch6, midSwitch4 )
>>>>>>> self.addLink( midSwitch4, midSwitch5 )
>>>>>>> self.addLink( midSwitch5, midSwitch7 )
>>>>>>> self.addLink( midSwitch5, rightSwitch )
>>>>>>> self.addLink( rightSwitch, rightHost )
>>>>>>>
>>>>>>>
>>>>>>> topos = { 'mytopo': ( lambda: MyTopo() ) }
>>>>>>>
>>>>>>> * Output*:
>>>>>>> [('1a:5a:80:13:c6:88', 3), (3, '1a:5a:80:13:c6:88'), (3, 4), (3, 5),
>>>>>>> (3, 7), (3, '7a:e0:42:3f:43:6c'), (3, '5a:ad:d3:ff:a3:bf'), (3,
>>>>>>> 'ca:3d:88:e0:9a:ae'), (3, '9e:f3:a0:76:66:4d'), (3,
>>>>>>> '5e:aa:98:96:4d:35'),
>>>>>>> (3, 'd6:c8:2f:4f:c6:0d'), (4, 3), (4, 5), (4, '0e:2a:7b:f8:01:93'), (4,
>>>>>>> '1e:8d:b2:c4:1b:4c'), (4, 9), (4, '92:a9:20:d5:53:db'), (4,
>>>>>>> '22:61:b2:eb:8e:b4'), (4, '0a:9c:68:b3:ca:bc'), (4,
>>>>>>> '7e:80:62:59:a2:bc'),
>>>>>>> (4, '3e:71:c4:4a:c7:41'), (5, 3), (5, 4), (5, 6), (5,
>>>>>>> 'f2:60:bf:5e:48:85'),
>>>>>>> (5, '06:b1:18:f4:97:c1'), (5, '06:21:a5:1e:f5:a2'), (5,
>>>>>>> '0a:be:81:3b:ff:4d'), (5, '6e:75:10:aa:61:14'), (6,
>>>>>>> '72:1d:1a:4f:6d:63'),
>>>>>>> (6, 10), (6, 5), (6, '52:72:8d:59:c9:bb'), (7, 'b2:82:29:6b:0a:f5'), (7,
>>>>>>> 3), (7, 8), (7, 9), (7, '9e:8f:84:40:03:40'), (7, '56:95:25:54:ce:02'),
>>>>>>> (8,
>>>>>>> '06:05:ce:ee:71:87'), (8, '26:11:6f:94:9d:ca'), (8,
>>>>>>> 'fa:f6:43:45:19:4d'),
>>>>>>> (8, 7), (8, 10), (8, 'de:0f:9b:2b:49:bd'), (9, 4), (9,
>>>>>>> '9a:a4:04:22:4a:75'), (9, '3e:81:2f:d8:c7:77'), (9, 7), (10, 8), (10,
>>>>>>> '42:0b:0f:4a:da:55'), (10, '2a:9e:7c:68:48:5d'), (10, 6), (10,
>>>>>>> 'e2:fd:fc:c4:06:45'), ('ca:3d:88:e0:9a:ae', 3), ('5e:aa:98:96:4d:35',
>>>>>>> 3),
>>>>>>> ('2a:9e:7c:68:48:5d', 10), ('fa:f6:43:45:19:4d', 8),
>>>>>>> ('0a:be:81:3b:ff:4d',
>>>>>>> 5), ('92:a9:20:d5:53:db', 4), ('f2:60:bf:5e:48:85', 5),
>>>>>>> ('5a:ad:d3:ff:a3:bf', 3), ('06:b1:18:f4:97:c1', 5),
>>>>>>> ('0a:9c:68:b3:ca:bc',
>>>>>>> 4), ('e2:fd:fc:c4:06:45', 10), ('3e:71:c4:4a:c7:41', 4),
>>>>>>> ('b2:82:29:6b:0a:f5', 7), ('0e:2a:7b:f8:01:93', 4),
>>>>>>> ('7a:e0:42:3f:43:6c',
>>>>>>> 3), ('7e:80:62:59:a2:bc', 4), ('9a:a4:04:22:4a:75', 9),
>>>>>>> ('9e:f3:a0:76:66:4d', 3), ('6e:75:10:aa:61:14', 5),
>>>>>>> ('06:05:ce:ee:71:87',
>>>>>>> 8), ('26:11:6f:94:9d:ca', 8), ('de:0f:9b:2b:49:bd', 8),
>>>>>>> ('3e:81:2f:d8:c7:77', 9), ('1e:8d:b2:c4:1b:4c', 4),
>>>>>>> ('9e:8f:84:40:03:40',
>>>>>>> 7), ('22:61:b2:eb:8e:b4', 4), ('42:0b:0f:4a:da:55', 10),
>>>>>>> ('06:21:a5:1e:f5:a2', 5), ('72:1d:1a:4f:6d:63', 6),
>>>>>>> ('52:72:8d:59:c9:bb',
>>>>>>> 6), ('56:95:25:54:ce:02', 7), ('d6:c8:2f:4f:c6:0d', 3)]
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Dec 31, 2014 at 10:00 PM, Flavio Junior <
>>>>>>> [email protected]> wrote:
>>>>>>>
>>>>>>>> Yes, I had a 5 nodes ring topology and it worked fine.
>>>>>>>>
>>>>>>>> But the flood actions are probably causing a flood storm.
>>>>>>>>
>>>>>>>> Spanning tree is not added to the code. It shouldn't be hard to add
>>>>>>>> it thou.
>>>>>>>>
>>>>>>>> I created this post
>>>>>>>> <http://sdn-lab.com/2014/12/25/shortest-path-forwarding-with-openflow-on-ryu/#more-108>
>>>>>>>> in my blog trying to explain the code a little better.
>>>>>>>>
>>>>>>>>
>>>>>>>> Flávio Castro Jr.
>>>>>>>> MSCS student at Georgia Tech
>>>>>>>> B.S.E in Networks Engineering from the University of Brasilia.
>>>>>>>> CCNA Certified
>>>>>>>> (404) 660-9373
>>>>>>>>
>>>>>>>> On Wed, Dec 31, 2014 at 10:16 AM, Padma Jayasankar <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> HI,
>>>>>>>>> Will this code work for the networks which have loops. If not, is
>>>>>>>>> it possible to incorporate this code with simple_switch_stp.py? Please
>>>>>>>>> clarify.
>>>>>>>>>
>>>>>>>>> Thanks and Regards,
>>>>>>>>> Padma V
>>>>>>>>>
>>>>>>>>> On Fri, Dec 19, 2014 at 6:20 AM, Flavio Junior <
>>>>>>>>> [email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> I just posted it to github here:
>>>>>>>>>> https://github.com/castroflavio/ryu
>>>>>>>>>>
>>>>>>>>>> Please take a look at the code (shortestpath.py). The most
>>>>>>>>>> important parts are the networkx SP computation and the topology
>>>>>>>>>> discovery
>>>>>>>>>> (ryu.topology). Networkx is a python library to do graph operations.
>>>>>>>>>>
>>>>>>>>>> We just finished the project, so I wasn't able to delete
>>>>>>>>>> unnecessary info there. Feel free to modify it and add your name to
>>>>>>>>>> the
>>>>>>>>>> list of collaborators. Also, if you use our code as starting point
>>>>>>>>>> I'd be
>>>>>>>>>> extremely glad if recognize it on your code.
>>>>>>>>>>
>>>>>>>>>> It's a very simple code. If you still have doubts after spending
>>>>>>>>>> some time reading I'll be glad to answer your questions.
>>>>>>>>>>
>>>>>>>>>> *Flávio Jr*
>>>>>>>>>>
>>>>>>>>>> (61) 8448-4003
>>>>>>>>>>
>>>>>>>>>> On Thu, Dec 18, 2014 at 6:35 PM, Padma Jayasankar <
>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Hi,
>>>>>>>>>>> Thanks for the info..But i haven't used networkx earlier..I have
>>>>>>>>>>> to do the shortest path calculation in openflow networks..If i ues
>>>>>>>>>>> networkx, can it be used with openflow(Am using Mininet,Ryu and
>>>>>>>>>>> OVS).
>>>>>>>>>>> Please clarify.
>>>>>>>>>>>
>>>>>>>>>>> Thanks and Regards,
>>>>>>>>>>> Padma V
>>>>>>>>>>>
>>>>>>>>>>> On Thu, Dec 18, 2014 at 10:08 PM, Flavio Junior <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> I've done shortest path forwarding using networkx. You can get
>>>>>>>>>>>> the topology using the get topology api.
>>>>>>>>>>>>
>>>>>>>>>>>> I haven't posted my code to github yet, but I'll do it asap.
>>>>>>>>>>>> Let me know if there are other solutions.
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Dec 18, 2014 at 10:41 AM, Padma Jayasankar <
>>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Hi All,
>>>>>>>>>>>> I am new to Rye. I went through ryu ebook to know the basics.
>>>>>>>>>>>> For my project , i have to find the backup path along with working
>>>>>>>>>>>> path
>>>>>>>>>>>> when a ping request comes. Am using Mininet , OVS and Ryu. Earlier
>>>>>>>>>>>> i used
>>>>>>>>>>>> POX and used the l2_multi that computes the shortest path by
>>>>>>>>>>>> accessing the
>>>>>>>>>>>> topology. Now as i want to use openflow 1.3 features , i am moving
>>>>>>>>>>>> to Ryu.
>>>>>>>>>>>> In Ryu is thee any app which is equivalent to l2_multi. If not is
>>>>>>>>>>>> it
>>>>>>>>>>>> possible to write such one..If yes, please give some guidance.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks and Regards,
>>>>>>>>>>>> Padma V
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>> Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
>>>>>>>>>> from Actuate! Instantly Supercharge Your Business Reports and
>>>>>>>>>> Dashboards
>>>>>>>>>> with Interactivity, Sharing, Native Excel Exports, App
>>>>>>>>>> Integration & more
>>>>>>>>>> Get technology previously reserved for billion-dollar
>>>>>>>>>> corporations, FREE
>>>>>>>>>>
>>>>>>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=164703151&iu=/4140/ostg.clktrk
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Ryu-devel mailing list
>>>>>>>>>> [email protected]
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/ryu-devel
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel