2013/2/5 OHMURA Kei <ohmura....@lab.ntt.co.jp>:
>>> +
>>> +    def close(self):
>>> +        self.is_active = False
>>> +        gevent.joinall([self.thread])
>>
>> For what?
>
> I think that it's not necessary. I'll remove it.
>
>>
>>> +    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?
>
> 'addrport' includes IP address of the switch. I'll add 'addrport'
> to the EventNetFlow class.

How about the following?

>From 32b343ae8b0e7cc45e7f0bdd9e75ca61445eefc8 Mon Sep 17 00:00:00 2001
From: OHMURA Kei <ohmura....@lab.ntt.co.jp>
Date: Tue, 5 Feb 2013 21:15:41 +0900
Subject: [PATCH] xflow: add netflow packet collector

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 <ohmura....@lab.ntt.co.jp>
---
 bin/ryu-manager                    |    1 +
 ryu/lib/xflow/netflow_collector.py |   60 ++++++++++++++++++++++++++++++++++++
 2 files changed, 61 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..1a6f4e4
--- /dev/null
+++ b/ryu/lib/xflow/netflow_collector.py
@@ -0,0 +1,60 @@
+# 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, addrport):
+        super(EventNetFlow, self).__init__()
+        self.msg = msg
+        self.addrport = addrport
+
+
+class NetFlowCollector(app_manager.RyuApp):
+    def __init__(self):
+        super(NetFlowCollector, self).__init__()
+        self.name = 'netflow_collector'
+        self._start_recv()
+
+    def _recv_loop(self):
+        while True:
+            (data, addrport) = self.sock.recvfrom(BUFSIZE)
+            msg = netflow.NetFlow.parser(data)
+            if msg:
+                self.send_event_to_observers(EventNetFlow(msg, addrport))
+
+    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))
+        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
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to