Hi there,

in order use Link_events in your python component you need to:

1) make your component aware of the Link_event object by importing it
2) register a handler for the event in your component's configure() (to make
your component respond to such events)
3) write a handler (to tell your component how it should respond to such
events)

so, in practice:

    # 1
    from nox.netapps.discovery.pylinkevent import Link_event
    ...
    # 2
    def install(self):
        ...
        self.register_handler(Link_event.static_get_name(),
self.handle_link_event)
    ....
    # 3
    def handle_link_event(self, e):
        print "Received link event:", e.__dict__    # this will show you the
contents of the event (for example: 'dport': 2, 'dpsrc': 1L, 'dpdst': 2L,
'sport': 2, 'action': 'add')
        # do something about the event here


On Tue, Oct 11, 2011 at 3:17 AM, hzy <yyjianx...@gmail.com> wrote:

> Hi murphy:
>
> yes, the results are the same.
> the NOX I am using is download from
> http://www.openflow.org/wk/index.php/OpenFlow_Tutorial.
> Never mind, the thing I concern is that how can i deal with the link_event
> in my component.
> I think I should look some codes, like core.py or something else,  I just
> don't know how to start.
> Can you give me some advice?
> best regards
>
> hzy
>
>
> 2011/10/11 Murphy McCauley <jam...@nau.edu>
>
>> I don't know anything about pytutorial (it's not one of the mainlin NOX
>> components), so I don't really know what to make of that.
>>
>> You tried implementing getInterface() like below on your my_router class?
>> def getInterface (self):
>>   return str(my_router)
>>
>> And the results were the same?
>>
>> This is unrelated, but you also seem to be using a version of NOX that's
>> over a year old.  The destiny branch in particular has many bug fixes.
>>
>> -- Murphy
>>
>> On Oct 10, 2011, at 7:40 PM, hzy wrote:
>>
>> Hi murphy:
>>
>> Thank you for your reply, but I have added these codes in my component.
>> This time I tried to invoke component pytutorial, so that you can get more
>> information in your computer.
>>
>> So I add following codes in discovery component.
>> self._pytutorial =
>> self.resolve("nox.coreapps.tutorial.pytutorial.pyturorial")
>> print self._pytutorial.mac_to_port
>>
>> 00478|pyrt|ERR:unable to invoke a Python event handler:
>> Traceback (most recent call last):
>>   File "./nox/lib/util.py", line 116, in f
>>     event.total_len, buffer_id, packet)
>>   File "./nox/netapps/discovery/discovery.py", line 166, in <lambda>
>>     discovery.lldp_input_handler(self,dp,inport,reason,len,bid,packet),
>>   File "./nox/netapps/discovery/discovery.py", line 316, in
>> lldp_input_handler
>>     print self._pytutorial.mac_to_port
>> AttributeError: 'NoneType' object has no attribute 'mac_to_port'
>>
>> I was confused.
>>
>> In other hand, I accept your advise to handle discovery's Link_even. Since
>> I am a newbie, can you give me some advice how to deal with Link_event in my
>> component?
>>
>> Best regards.
>>
>> hzy
>>
>> 2011/10/10 Murphy McCauley <jam...@nau.edu>
>>
>>> Whoops.  I meant:
>>>
>>> def getInterface (self):
>>>   return str(my_router)
>>>
>>> Sorry about that!
>>>
>>> -- Murphy
>>>
>>>
>>> On Oct 10, 2011, at 7:51 AM, Murphy McCauley wrote:
>>>
>>> So first off, maybe you have a reason, but in general, the hope is that
>>> you should have no reason to modify discovery.py.  Rather than modify
>>> discovery.py to explicitly call your component, hopefully you should be able
>>> to simply handle discovery's Link_event.
>>>
>>> If you really do need to modify discovery.py to call your component
>>> explicitly, then as for why your code doesn't work, I don't think I have
>>> enough information to say.  Assuming that your paths are right (you have a
>>> directory/package called my_experiment) and that in my_router.py you have a
>>> class/component called my_router... my best guess is that you didn't
>>> implement getInterface() in my_router in the expected way.  Try adding the
>>> following to your my_router class:
>>>
>>> def getInterface (self):
>>>   return my_router
>>>
>>> Hope that helps.
>>>
>>> -- Murphy
>>>
>>> On Oct 10, 2011, at 6:45 AM, hzy wrote:
>>>
>>> hi murpy:
>>> Thank you for your reply. it works now, but another problem comes up.
>>> This time I want the discovery component invoke the dic_all_path defined
>>> in my modle.
>>>
>>> So I add following codes in discovery component
>>> self._my_router =
>>> self.resolve("nox.coreapps.my_experiment.my_router.my_router")
>>> print self._my_router.dic_all_path
>>>
>>> I also tried these codes
>>> from nox.coreapps.my_experiment import my_router
>>> self._my_router = self.resolve(my_router.my_router
>>> print self._my_router.dic_all_path
>>>
>>> 00206|pyrt|ERR:unable to invoke a Python event handler:
>>> Traceback (most recent call last):
>>>   File "./nox/lib/util.py", line 116, in f
>>>     event.total_len, buffer_id, packet)
>>>   File "./nox/netapps/discovery/discovery.py", line 163, in <lambda>
>>>     discovery.lldp_input_handler(self,dp,inport,reason,len,bid,packet),
>>>   File "./nox/netapps/discovery/discovery.py", line 312, in
>>> lldp_input_handler
>>>     print self._my_router.dic_all_path
>>> AttributeError: 'NoneType' object has no attribute 'dic_all_path'
>>>
>>> any ideas.
>>> best regards.
>>>
>>> hzy
>>>
>>>
>>> 2011/10/9 Murphy McCauley <jam...@nau.edu>
>>>
>>>> So, the discovery component is a class named "discovery" in a module
>>>> named "discovery" in a package named "discovery".  So it's...
>>>> discovery.discovery.discovery.  You've only got discovery.discovery.  I can
>>>> see how it's a bit confusing. :)
>>>>
>>>> So try the following instead:
>>>> self._discovery = self.resolve(discovery.discovery)
>>>>
>>>> Or alternatively, do:
>>>> self._discovery =
>>>> self.resolve("nox.netapps.discovery.discovery.discovery")
>>>> (In this case, you don't even need the import statement)
>>>>
>>>> -- Murphy
>>>>
>>>> On Oct 9, 2011, at 1:21 AM, hzy wrote:
>>>>
>>>> > hi all:
>>>> >
>>>> > Inorder to find interconnected links in my topology, i would like to
>>>> use discovery.py.
>>>> > In my own component I want to check the adjacency_list which is a
>>>> public attribute in discovery module.
>>>> > How can I use discovery from my component.
>>>> >
>>>> > I add the following codes, but it doesn't work.
>>>> >
>>>> > from nox.netapps.discovery import discovery
>>>> > self._discovery = self.resolve(discovery)
>>>> > print self._discovery.adjacency_list
>>>> >
>>>> > File "./nox/coreapps/my_experiment/my_router.py", line 499, in
>>>> datapath_join_callback
>>>> >     print self._discovery.adjacency_list
>>>> > AttributeError: 'NoneType' object has no attribute 'adjacency_list'
>>>> >
>>>> > any ideas?
>>>> > thanks for advance.
>>>> > best regards
>>>> >
>>>> > hzy
>>>> > _______________________________________________
>>>> > nox-dev mailing list
>>>> > nox-dev@noxrepo.org
>>>> > http://noxrepo.org/mailman/listinfo/nox-dev
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>
> _______________________________________________
> nox-dev mailing list
> nox-dev@noxrepo.org
> http://noxrepo.org/mailman/listinfo/nox-dev
>
>
_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev

Reply via email to