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

Reply via email to