Hi, like you noticed, the 'discovery' component does not provide any information like that. It only does neighbor discovery. If you want to collect switch related information, you need to write your own component and collect that information programatically using NOX's API to do switch queries etc.
The 'monitoring' component (under netapps/) has some very relevant functionality, so you will find it useful to look at, or even copy code from it. What 'monitoring' does is that is periodically sends out a bunch of queries to all connected switches, collects statistics and exposes that info to other components. It sounds similar to what you want to do. One way you could go about measuring a link's utilization is to periodically see how many bytes have been sent out a port. The bytes sent over a period T divided by T will give you a rough estimate of the Tx rate. Divide that by link capacity for a rough estimate of utilization. The smaller the period, the better the estimate, but the more control traffic. 'monitoring' also does something like that, so you can take a look there. On Thu, Oct 27, 2011 at 11:48 PM, hzy <yyjianx...@gmail.com> wrote: > 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