Hi Thanks for your explanation.
I think it's not necessary to keep __eq__ and hash, I'll remove it. And maybe we can discuss this feature and add this patch later :) By the way, is it possible that we can add ip address list in the host? 2015-06-15 16:19 GMT+08:00 IWAMOTO Toshihiro <[email protected]>: > At Thu, 11 Jun 2015 13:13:49 +0800, > Yi Tseng wrote: > > > > [1 <multipart/alternative (7bit)>] > > [1.1 <text/plain; UTF-8 (7bit)>] > > Hi > > > > I think the mac address are unique in computer networks. > > > > So I only compare mac address between hosts. > > Sorry for late reply. > Computers can move over ports, or can use some form of link > aggregation. These can give two Host objects which differ only in > self.port. > > Also, are you planning to use the _eq_ operator or the hash operator? > If not, you don't need to implement them. > > > 2015-06-11 12:33 GMT+08:00 IWAMOTO Toshihiro <[email protected]>: > > > > > At Thu, 11 Jun 2015 02:30:40 +0800, > > > Yi Tseng wrote: > > > > > > > > Signed-off-by: Takeshi <[email protected]> > > > > --- > > > > ryu/topology/api.py | 7 +++++ > > > > ryu/topology/event.py | 23 +++++++++++++++++ > > > > ryu/topology/switches.py | 66 > > > > +++++++++++++++++++++++++++++++++++++++++++++++- > > > > 3 files changed, 95 insertions(+), 1 deletion(-) > > > > > > > diff --git a/ryu/topology/switches.py b/ryu/topology/switches.py > > > > index 63335f2..ab7f9f6 100644 > > > > --- a/ryu/topology/switches.py > > > > +++ b/ryu/topology/switches.py > > > > @@ -157,6 +157,35 @@ class Link(object): > > > > def __str__(self): > > > > return 'Link: %s to %s' % (self.src, self.dst) > > > > > > > > +class Host(object): > > > > + # This is data class passed by EventHostXXXX > > > > + def __init__(self, dpid, port, mac): > > > > + super(Host, self).__init__() > > > > + self.dpid = dpid > > > > + self.port = port > > > > + self.mac = mac > > > > + > > > > + def to_dict(self): > > > > + d = { > > > > + 'dpid': self.dpid, > > > > + 'port': self.port, > > > > + 'mac': self.mac > > > > + } > > > > + return d > > > > + > > > > + # this type is used for key value of LinkState > > > > > > Really? And why are you ignoring dpid and port in comparison > > > operators? > > > > > > > + def __eq__(self, other): > > > > + return self.mac == other.mac > > > > + > > > > + def __ne__(self, other): > > > > + return not self.__eq__(other) > > > > + > > > > + def __hash__(self): > > > > + return hash(self.mac) > > > > + > > > > + def __str__(self): > > > > + return 'Host<Mac address=%s>' % (self.mac, ) > > > > + > > > > > > > > class PortState(dict): > > > > # dict: int port_no -> OFPPort port > > > > @@ -451,6 +480,7 @@ class Switches(app_manager.RyuApp): > > > > self.port_state = {} # datapath_id => ports > > > > self.ports = PortDataState() # Port class -> PortData class > > > > self.links = LinkState() # Link class -> timestamp > > > > + self.hosts = {} > > > > self.is_active = True > > > > > > > > self.link_discovery = self.CONF.observe_links > > > > @@ -689,7 +719,25 @@ class Switches(app_manager.RyuApp): > > > > src_dpid, src_port_no = LLDPPacket.lldp_parse(msg.data) > > > > except LLDPPacket.LLDPUnknownFormat as e: > > > > # This handler can receive all the packtes which can be > > > > - # not-LLDP packet. Ignore it silently > > > > + # not-LLDP packet. > > > > + # Check if it's new host > > > > + > > > > + dpid = msg.datapath.id > > > > + port = -1 > > > > + > > > > + if msg.datapath.ofproto.OFP_VERSION == > > > > ofproto_v1_0.OFP_VERSION: > > > > + port = msg.in_port > > > > + elif msg.datapath.ofproto.OFP_VERSION >= > > > > ofproto_v1_2.OFP_VERSION: > > > > + port = msg.match['in_port'] > > > > + > > > > + pkt = packet.Packet(msg.data) > > > > + eth = pkt.get_protocols(ethernet.ethernet)[0] > > > > + mac = eth.src > > > > + > > > > + if mac not in self.hosts and port != -1: > > > > + LOG.debug('Found host(mac=%s) from dpid=%d, > port=%d', > > > mac, > > > > dpid, port) > > > > + self.hosts[mac] = Host(dpid, port, mac) > > > > + > > > > return > > > > > > > > dst_dpid = msg.datapath.id > > -- > IWAMOTO Toshihiro > -- Yi Tseng (a.k.a Takeshi) Taiwan National Chiao Tung University Department of Computer Science W2CNLab
------------------------------------------------------------------------------
_______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
