[pox-dev] Installing SPF in Switches
Muhammad Furqan Gagan
furqan.gagan at gmail.com
Mon Nov 11 22:04:53 PST 2013
Yeah I check them ..
they are using core discovery module to learn the topology..
And I am learning the topolopgy in a table via sending and receiving lldp packets.. a switch send to its every port after connecting
On Nov 11, 2013, at 10:54 PM, Murphy McCauley <murphy.mccauley at gmail.com> wrote:
> Have you taken a look at the l2_multi and topo_proactive components? Both of them compute and install shortest paths.
>
> -- Murphy
>
> On Nov 11, 2013, at 9:48 PM, Muhammad Furqan Gagan <furqan.gagan at gmail.com> wrote:
>
>> Hello …
>>
>> I am working on a controller which calculate shrtest path from a function i have made and returns an array of switches in between source and destination switches... When a packet is received i calculate their source and dpids and calculate their shotest path. for example: for switch 1 and switch 7 there is a shortest path [2,3,4,7]
>> Now i want to install flows for them
>>
>>
>> Currently I am doing this… It is sending the packet and installing flows but I cant ping … I am new to POX so if you can explain it in bit easier way !! Thanks
>>
>>
>> def _handle_PacketIn (self, event):
>>
>> def flood(): #floods the packet
>>
>> msg = of.ofp_packet_out()
>> msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD))
>> msg.data = packet_in.data
>> msg.in_port = in_port
>> self.connection.send(msg)
>>
>>
>> def drop():# drops the message
>>
>> if packet_in.buffer_id is not None:
>>
>> msg = of.ofp_packet_out()
>> msg.buffer_id = packet_in.buffer_id
>>
>> msg.in_port = in_port
>> self.connection.send(msg)
>>
>>
>>
>> packet = event.parsed
>> packet_in = event.ofp
>> in_port = event.port
>> #print in_port
>> dpid = event.dpid
>>
>>
>>
>> if packet.type == packet.LLDP_TYPE:
>> self.receive_topology_packet(dpid,in_port,packet)
>>
>> return
>>
>>
>>
>> self.host_table[packet.src] = in_port
>>
>>
>> if packet.dst.is_multicast:
>> flood()
>> return
>>
>> if packet.dst not in self.host_table: # check for unknown destination
>>
>> flood()
>> return
>>
>> else:
>>
>> print "%s" %(packet.src)
>> print "%s" %(packet.dst)
>> p_s = str(packet.src)
>> p_d = str(packet.dst)
>>
>> dpid_src = dpid
>> print "src dpid",dpid_src
>> for s in range(len(switch)):
>>
>>
>> if p_d[-1:] == str(switch[s]):
>> dpid_dst = switch[s]
>> print "dest dpid",dpid_dst
>>
>> best_route = []
>> best_route = spf.shortest_path(dpid_src,dpid_dst)
>> best_route.reverse()
>> print best_route
>>
>> print " known"
>>
>>
>> msg = of.ofp_flow_mod()
>>
>> if not packet.type == packet.VLAN_TYPE:
>> print "attaching a vlan id"
>> msg.actions.append(of.ofp_action_vlan_vid(vlan_vid = dpid_dst))
>>
>> elif dpid_src == dpid_dst:
>> print "arived at destination striping vtag"
>> msg.actions.append(of.ofp_action_strip_vlan())
>>
>>
>> if best_route:
>> if not best_route[0] == dpid_dst:
>> next_hop = best_route[0]
>>
>>
>> if not dpid_src== dpid_dst:
>> for p in topo[dpid_src]:
>> temp = topo[dpid_src][p]
>> if temp [0]== next_hop: # in topo[dpid_src][p]:
>> print"yes"
>> print"p",p
>> #dp,op = topo[dpid][p]
>> op = p
>> print "outport",op
>> else:
>> print"we r at destination"
>> op = self.host_table[packet.dst]
>> print "op"
>>
>>
>> print"sending flow"
>> msg = of.ofp_flow_mod() # installing flow
>> msg.match = of.ofp_match.from_packet(packet, in_port)
>> msg.idle_timeout = 10
>> msg.hard_timeout = 30
>>
>> msg.actions.append(of.ofp_action_output(port = op))
>> msg.data = packet_in
>>
>> self.connection.send(msg)
>>
>> msg = of.ofp_packet_out()
>> msg.actions.append(of.ofp_action_output(port = op))
>> msg.data = packet_in.data
>> msg.in_port = in_port
>> self.connection.send(msg)
>> print "flow sent"
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.noxrepo.org/pipermail/pox-dev-noxrepo.org/attachments/20131111/9c1b4d49/attachment-0002.htm>
More information about the pox-dev
mailing list