On Tue, 5 Feb 2013 18:40:12 +0900 OHMURA Kei <[email protected]> wrote:
> This gets a netflow packet and sends it to the other > applications. Each application can use this to get netflow > messages as an event. > > Signed-off-by: OHMURA Kei <[email protected]> > --- > bin/ryu-manager | 1 + > ryu/lib/xflow/netflow_collector.py | 64 > ++++++++++++++++++++++++++++++++++++ > 2 files changed, 65 insertions(+) > create mode 100644 ryu/lib/xflow/netflow_collector.py > > diff --git a/bin/ryu-manager b/bin/ryu-manager > index fca9329..61c5b4d 100755 > --- a/bin/ryu-manager > +++ b/bin/ryu-manager > @@ -33,6 +33,7 @@ from ryu import utils > from ryu.app import wsgi > from ryu.base.app_manager import AppManager > from ryu.controller import controller > +from ryu.lib.xflow import netflow_collector > > # TODO: > # Right now, we have our own patched copy of ovs python bindings > diff --git a/ryu/lib/xflow/netflow_collector.py > b/ryu/lib/xflow/netflow_collector.py > new file mode 100644 > index 0000000..ad70dcc > --- /dev/null > +++ b/ryu/lib/xflow/netflow_collector.py > @@ -0,0 +1,64 @@ > +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. > +# > +# Licensed under the Apache License, Version 2.0 (the "License"); > +# you may not use this file except in compliance with the License. > +# You may obtain a copy of the License at > +# > +# http://www.apache.org/licenses/LICENSE-2.0 > +# > +# Unless required by applicable law or agreed to in writing, software > +# distributed under the License is distributed on an "AS IS" BASIS, > +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > +# implied. > +# See the License for the specific language governing permissions and > +# limitations under the License. > + > + > +import gevent > +import gflags > +import logging > + > +from gevent import socket > +from ryu.base import app_manager > +from ryu.controller import event > +from ryu.lib.xflow import netflow > + > +LOG = logging.getLogger('ryu.lib.netflow_collector') > + > +NETFLOW_EV_DISPATCHER = 'netflow' > + > +FLAGS = gflags.FLAGS > +gflags.DEFINE_string('netflow_listen_host', '', 'netflow listen host') > +gflags.DEFINE_integer('netflow_listen_port', 9996, 'netflow listen port') > + > +BUFSIZE = 8192 # Should we use flexible length? > + > + > +class EventNetFlow(event.EventBase): > + def __init__(self, msg): > + super(EventNetFlow, self).__init__() > + self.msg = msg > + > + > +class NetFlowCollector(app_manager.RyuApp): > + def __init__(self): > + super(NetFlowCollector, self).__init__() > + self.name = 'netflow_collector' > + self.is_active = True > + self._start_recv() > + > + def close(self): > + self.is_active = False > + gevent.joinall([self.thread]) For what? > + def _recv_loop(self): > + while self.is_active: > + (data, addrport) = self.sock.recvfrom(BUFSIZE) > + msg = netflow.NetFlow.parser(data) > + if msg: > + self.send_event_to_observers(EventNetFlow(msg)) A msg includes the information about which switch sent this netflow packet? > + def _start_recv(self): > + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) > + self.sock.bind((FLAGS.netflow_listen_host, > FLAGS.netflow_listen_port)) > + self.thread = gevent.spawn_later(0, self._recv_loop) > -- > 1.7.9.5 > > > ------------------------------------------------------------------------------ > Free Next-Gen Firewall Hardware Offer > Buy your Sophos next-gen firewall before the end March 2013 > and get the hardware for free! Learn more. > http://p.sf.net/sfu/sophos-d2d-feb > _______________________________________________ > Ryu-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/ryu-devel ------------------------------------------------------------------------------ Free Next-Gen Firewall Hardware Offer Buy your Sophos next-gen firewall before the end March 2013 and get the hardware for free! Learn more. http://p.sf.net/sfu/sophos-d2d-feb _______________________________________________ Ryu-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ryu-devel
