diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2013-06-24 11:06:22 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2013-06-28 22:16:53 +0900 |
commit | 58e86b188cedc105ea89bbb694cf2308197ebb0b (patch) | |
tree | 6091ce210b80b8c9bf7639c05a04a946cc5c2a62 | |
parent | 23e6b8fcb88bcd767c9b413dd489e40eac7c595d (diff) |
topology/switches: packet in handler
The logic of counting sent packet seems wrong.
Reported-by: Q Lady <holynn.q@gmail.com>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/topology/switches.py | 75 |
1 files changed, 37 insertions, 38 deletions
diff --git a/ryu/topology/switches.py b/ryu/topology/switches.py index 0995dd63..6e9acda7 100644 --- a/ryu/topology/switches.py +++ b/ryu/topology/switches.py @@ -654,47 +654,46 @@ class Switches(app_manager.RyuApp): # This handler can receive all the packtes which can be # not-LLDP packet. Ignore it silently return - else: - dst_dpid = msg.datapath.id - dst_port_no = msg.in_port - src = self._get_port(src_dpid, src_port_no) - if not src or src.dpid == dst_dpid: - return + dst_dpid = msg.datapath.id + dst_port_no = msg.in_port - dst = self._get_port(dst_dpid, dst_port_no) - if not dst: - return + src = self._get_port(src_dpid, src_port_no) + if not src or src.dpid == dst_dpid: + return + try: + self.ports.lldp_received(src) + except KeyError: + # There are races between EventOFPPacketIn and + # EventDPPortAdd. So packet-in event can happend before + # port add event. In that case key error can happend. + # LOG.debug('lldp_received: KeyError %s', e) + pass + + dst = self._get_port(dst_dpid, dst_port_no) + if not dst: + return - old_peer = self.links.get_peer(src) - # LOG.debug("Packet-In") - # LOG.debug(" src=%s", src) - # LOG.debug(" dst=%s", dst) - # LOG.debug(" old_peer=%s", old_peer) - if old_peer and old_peer != dst: - old_link = Link(src, old_peer) - self.send_event_to_observers(event.EventLinkDelete(old_link)) - - link = Link(src, dst) - if not link in self.links: - self.send_event_to_observers(event.EventLinkAdd(link)) - - if not self.links.update_link(src, dst): - # reverse link is not detected yet. - # So schedule the check early because it's very likely it's up - try: - self.ports.lldp_received(dst) - except KeyError as e: - # There are races between EventOFPPacketIn and - # EventDPPortAdd. So packet-in event can happend before - # port add event. In that case key error can happend. - # LOG.debug('lldp_received: KeyError %s', e) - pass - else: - self.ports.move_front(dst) - self.lldp_event.set() - if self.explicit_drop: - self._drop_packet(msg) + old_peer = self.links.get_peer(src) + # LOG.debug("Packet-In") + # LOG.debug(" src=%s", src) + # LOG.debug(" dst=%s", dst) + # LOG.debug(" old_peer=%s", old_peer) + if old_peer and old_peer != dst: + old_link = Link(src, old_peer) + self.send_event_to_observers(event.EventLinkDelete(old_link)) + + link = Link(src, dst) + if not link in self.links: + self.send_event_to_observers(event.EventLinkAdd(link)) + + if not self.links.update_link(src, dst): + # reverse link is not detected yet. + # So schedule the check early because it's very likely it's up + self.ports.move_front(dst) + self.lldp_event.set() + if self.explicit_drop: + self._drop_packet(msg) def send_lldp_packet(self, port): try: |