Hi

Sorry that I forgot to remove comment (# this type is used for key value of
LinkState) in class Host (I copied class Link and modify it)

Should I send a new patch ?



2015-06-11 13:08 GMT+08:00 Yi Tseng <[email protected]>:

> Hi
>
> I didn't concern that host can be configured to send lldp packets.
>
> If a host can be configured to send lldp packet, there will be two
> situations:
>
> 1. Host always send lldp packets : ryu can't discover that host.
>
> 2. Host not always send lldp packet, sometimes it send normal packet : ryu
> can discover it.
>
> I think maybe I can add "--observe-hosts" option to ryu manager and send a
> new patch?
>
>
>
>
> 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
>



-- 
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