hi Kyriakos: Thank you for your reply. I have solved my problem. But the discovery component doesn't meat my requirement. I want to collect the link information dynamically. e.g. the utilization rate of bandwith. Can I get this kind of information directly? If not what can I do to fit my aim? Can you give me some davices?
thanks for advance. 2011/10/11 Kyriakos Zarifis <kyr.zari...@gmail.com> > 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