diff --git a/scripts/base/frameworks/openflow/plugins/broker.bro b/scripts/base/frameworks/openflow/plugins/broker.bro index 9d0f55ad40..8e550b0642 100644 --- a/scripts/base/frameworks/openflow/plugins/broker.bro +++ b/scripts/base/frameworks/openflow/plugins/broker.bro @@ -1,4 +1,5 @@ @load base/frameworks/openflow +@load base/frameworks/broker module OpenFlow; @@ -13,10 +14,12 @@ export { ## ## host_port: Controller listen port. ## + ## topic: broker topic to send messages to. + ## ## dpid: OpenFlow switch datapath id. ## ## Returns: OpenFlow::Controller record - global broker_new: function(host: addr, host_port: port, dpid: count): OpenFlow::Controller; + global broker_new: function(host: addr, host_port: port, topic: string, dpid: count): OpenFlow::Controller; redef record ControllerState += { ## Controller ip. @@ -25,6 +28,8 @@ export { broker_port: port &optional; ## OpenFlow switch datapath id. broker_dpid: count &optional; + ## Topic to sent events for this controller to + broker_topic: string &optional; }; global broker_flow_mod: event(dpid: count, match: ofp_match, flow_mod: ofp_flow_mod); @@ -38,27 +43,25 @@ function broker_describe(state: ControllerState): string function broker_flow_mod_fun(state: ControllerState, match: ofp_match, flow_mod: OpenFlow::ofp_flow_mod): bool { - event OpenFlow::broker_flow_mod(state$broker_dpid, match, flow_mod); + BrokerComm::event(state$broker_topic, BrokerComm::event_args(broker_flow_mod, state$broker_dpid, match, flow_mod)); return T; } function broker_flow_clear_fun(state: OpenFlow::ControllerState): bool { - event OpenFlow::broker_flow_clear(state$broker_dpid); + BrokerComm::event(state$broker_topic, BrokerComm::event_args(broker_flow_clear, state$broker_dpid)); return T; } # broker controller constructor -function broker_new(host: addr, host_port: port, dpid: count): OpenFlow::Controller +function broker_new(host: addr, host_port: port, topic: string, dpid: count): OpenFlow::Controller { BrokerComm::enable(); - BrokerComm::auto_event("bro/event/openflow", broker_flow_mod); - BrokerComm::auto_event("bro/event/openflow", broker_flow_clear); BrokerComm::connect(cat(host), host_port, 1sec); - return [$state=[$broker_host=host, $broker_port=host_port, $broker_dpid=dpid, $_plugin=OpenFlow::BROKER], + return [$state=[$broker_host=host, $broker_port=host_port, $broker_dpid=dpid, $broker_topic=topic, $_plugin=OpenFlow::BROKER], $flow_mod=broker_flow_mod_fun, $flow_clear=broker_flow_clear_fun, $describe=broker_describe]; } diff --git a/testing/btest/scripts/base/frameworks/openflow/broker-basic.bro b/testing/btest/scripts/base/frameworks/openflow/broker-basic.bro index 3874d46f5a..b31e47f2c1 100644 --- a/testing/btest/scripts/base/frameworks/openflow/broker-basic.bro +++ b/testing/btest/scripts/base/frameworks/openflow/broker-basic.bro @@ -20,7 +20,7 @@ global of_controller: OpenFlow::Controller; event bro_init() { suspend_processing(); - of_controller = OpenFlow::broker_new(127.0.0.1, broker_port, 42); + of_controller = OpenFlow::broker_new(127.0.0.1, broker_port, "bro/event/openflow", 42); } event BrokerComm::outgoing_connection_established(peer_address: string, @@ -72,7 +72,6 @@ event bro_init() { BrokerComm::enable(); BrokerComm::subscribe_to_events("bro/event/openflow"); - BrokerComm::subscribe_to_events("bro/event/test_event"); BrokerComm::listen(broker_port, "127.0.0.1"); }