From 0a11bf61ba5a719088e6d6e3081a241f0c986a53 Mon Sep 17 00:00:00 2001 From: FUJITA Tomonori Date: Wed, 8 May 2013 11:43:06 -0700 Subject: [PATCH] get all of events Signed-off-by: FUJITA Tomonori --- ryu/controller/api.py | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/ryu/controller/api.py b/ryu/controller/api.py index cf9ffe4c..7dfc08dd 100644 --- a/ryu/controller/api.py +++ b/ryu/controller/api.py @@ -41,7 +41,7 @@ class OFWireRpcSession(object): if type(v) == dict: self._ofp_handle_params(dp, v) clses = self._find_ofp_cls(dp.ofproto.OFP_VERSION, k) - if clses not None: + if clses is not None: if issubclass(clses, MsgBase): ins = clses(dp, **v) else: @@ -69,13 +69,13 @@ class OFWireRpcSession(object): dp = self.dpset.get(int(dpid)) if dp is None: print self.dpset.get_all() - r = self.session.create_response(msg[1], 0, 0) + r = self.session.create_response(msg[1], 1, 0) self.socket.sendall(r) + return - for i in params: - self._ofp_handle_params(dp, i) - for k, v in i.items(): - dp.send_msg(v) + self._ofp_handle_params(dp, params) + for k, v in params.items(): + dp.send_msg(v) r = self.session.create_response(msg[1], 0, 0) self.socket.sendall(r) @@ -84,15 +84,12 @@ class OFWireRpcSession(object): while True: ret = self.socket.recv(4096) if len(ret) == 0: - print "client disconnected" break messages = self.session.get_messages(ret) for m in messages: if m[0] == RpcMessage.REQUEST: - if m[2] == 0: + if m[2] == 'ofp': self.ofp_handle_request(m) - r = self.session.create_response(m[1], 0, 0) - self.socket.sendall(r) elif m[0] == RpcMessage.RESPONSE: pass elif m[0] == RpcMessage.NOTIFY: @@ -109,18 +106,26 @@ class RpcApi(app_manager.RyuApp): def __init__(self, *args, **kwargs): self.dpset = kwargs['dpset'] super(RpcApi, self).__init__(*args, **kwargs) - self.server = eventlet.listen(('127.0.0.1', 6000)) + self.server = eventlet.listen(('', 50000)) self.pool = eventlet.GreenPool() self.pool.spawn_n(self.serve) + self.sessions = [] def serve(self): while True: sock, address = self.server.accept() - print "accepted", address session = OFWireRpcSession(sock, self.dpset) + self.sessions.append(session) self.pool.spawn_n(session.serve) - @handler.set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - print "join", ev.dp.id + @handler.observe_all_events('ofp_event') + def handler(self, ev): + if hasattr(ev, 'msg'): + params = {} + params[type(ev.msg).__name__] = {} + for m in inspect.getmembers(ev.msg): + if not m[0].startswith('__'): + # we need a mechnism to get _only_ OFP defined members. + params[type(ev.msg).__name__][m[0]] = m[1] + + # send this to all sessions as a notification.