diff --git a/rfproxy.py b/rfproxy.py index 01df621..2ccbb15 100755 --- a/rfproxy.py +++ b/rfproxy.py @@ -119,7 +119,16 @@ def process(self, from_, to, channel, msg): msg.get_id()) if type_ == DATA_PLANE_MAP: table.update_dp_port(msg.get_dp_id(), msg.get_dp_port(), - msg.get_vs_id(), msg.get_vs_port()) + msg.get_vs_id(), msg.get_vs_port()) + if type_ == ELECT_MASTER: + host = msg.get_ct_addr() + port = msg.get_ct_port() + if (CONF.ofp_listen_host == host and + CONF.ofp_tcp_listen_port == port): + CONF.ofp_role = 'master' + for dp in datapaths.dps.values(): + ofp_role = parse_role_request('master', dp) + send_role_request(ofp_role, dp) return True @@ -134,14 +143,25 @@ def __init__(self, *args, **kwargs): ID = 0 self.role = CONF.ofp_role + if not CONF.ofp_listen_host: + CONF.ofp_listen_host = '127.0.0.1' self.ipc = MongoIPC.MongoIPCMessageService(MONGO_ADDRESS, MONGO_DB_NAME, str(ID), hub_thread_wrapper, hub.sleep) self.ipc.listen(RFSERVER_RFPROXY_CHANNEL, RFProtocolFactory(), RFProcessor(), False) + self.ipc.listen(RFMONITOR_RFPROXY_CHANNEL, RFProtocolFactory(), + RFProcessor(), False) log.info("RFProxy running.") + def register_controller(self): + '''Register controller with RFMonitor''' + msg = ControllerRegister(ct_addr=CONF.ofp_listen_host, + ct_port=CONF.ofp_tcp_listen_port, + ct_role=self.role) + self.ipc.send(RFMONITOR_RFPROXY_CHANNEL, RFMONITOR_ID, msg) + #Event handlers @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) def handler_datapath(self, ev): @@ -151,6 +171,7 @@ def handler_datapath(self, ev): ofp_role = parse_role_request(self.role, dp) send_role_request(ofp_role, dp) if ev.enter: + self.register_controller() log.info("Datapath is up (dp_id=%s)", dpid_to_str(dpid)) datapaths.register(dp) for port in ports: