From bda02f25b7a60c75c203ad3aa316b57efbb48439 Mon Sep 17 00:00:00 2001 From: Murphy McCauley Date: Tue, 23 Jul 2013 23:11:57 -0700 Subject: [PATCH] discovery: Make Link a class This used to be a plain namedtuple, but now it extends namedtuple. --- pox/openflow/discovery.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/pox/openflow/discovery.py b/pox/openflow/discovery.py index dab609305..2588c2517 100644 --- a/pox/openflow/discovery.py +++ b/pox/openflow/discovery.py @@ -189,6 +189,31 @@ def port_for_dpid (self, dpid): return None +class Link (namedtuple("LinkBase",("dpid1","port1","dpid2","port2"))): + @property + def uni (self): + """ + Returns a "unidirectional" version of this link + + The unidirectional versions of symmetric keys will be equal + """ + pairs = list(self.end) + pairs.sort() + return Link(pairs[0][0],pairs[0][1],pairs[1][0],pairs[1][1]) + + @property + def end (self): + return ((self[0],self[1]),(self[2],self[3])) + + def __str__ (self): + return "%s.%s -> %s.%s" % (dpid_to_str(self[0]),self[1], + dpid_to_str(self[2]),self[3]) + + def __repr__ (self): + return "Link(dpid1=%s,port1=%s, dpid2=%s,port2=%s)" % (self.dpid1, + self.port1, self.dpid2, self.port2) + + class Discovery (EventMixin): """ Component that attempts to discover network toplogy. @@ -206,7 +231,7 @@ class Discovery (EventMixin): _core_name = "openflow_discovery" # we want to be core.openflow_discovery - Link = namedtuple("Link",("dpid1","port1","dpid2","port2")) + Link = Link def __init__ (self, install_flow = True, explicit_drop = True, link_timeout = None, eat_early_packets = False): @@ -270,9 +295,7 @@ def _expire_links (self): if timestamp + self._link_timeout < now] if expired: for link in expired: - log.info('link timeout: %s.%i -> %s.%i' % - (dpid_to_str(link.dpid1), link.port1, - dpid_to_str(link.dpid2), link.port2)) + log.info('link timeout: %s', link) self._delete_links(expired) @@ -395,9 +418,7 @@ def lookInSysDesc (): if link not in self.adjacency: self.adjacency[link] = time.time() - log.info('link detected: %s.%i -> %s.%i' % - (dpid_to_str(link.dpid1), link.port1, - dpid_to_str(link.dpid2), link.port2)) + log.info('link detected: %s', link) self.raiseEventNoErrors(LinkEvent, True, link) else: # Just update timestamp