Change openflow plugin for broker and allow specification of topics per

instance.
This commit is contained in:
Johanna Amann 2015-05-13 16:23:24 -07:00
parent 73d22a2dbd
commit 208d150a0e
2 changed files with 11 additions and 9 deletions

View file

@ -1,4 +1,5 @@
@load base/frameworks/openflow @load base/frameworks/openflow
@load base/frameworks/broker
module OpenFlow; module OpenFlow;
@ -13,10 +14,12 @@ export {
## ##
## host_port: Controller listen port. ## host_port: Controller listen port.
## ##
## topic: broker topic to send messages to.
##
## dpid: OpenFlow switch datapath id. ## dpid: OpenFlow switch datapath id.
## ##
## Returns: OpenFlow::Controller record ## 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 += { redef record ControllerState += {
## Controller ip. ## Controller ip.
@ -25,6 +28,8 @@ export {
broker_port: port &optional; broker_port: port &optional;
## OpenFlow switch datapath id. ## OpenFlow switch datapath id.
broker_dpid: count &optional; 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); 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 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; return T;
} }
function broker_flow_clear_fun(state: OpenFlow::ControllerState): bool 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; return T;
} }
# broker controller constructor # 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::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); 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]; $flow_mod=broker_flow_mod_fun, $flow_clear=broker_flow_clear_fun, $describe=broker_describe];
} }

View file

@ -20,7 +20,7 @@ global of_controller: OpenFlow::Controller;
event bro_init() event bro_init()
{ {
suspend_processing(); 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, event BrokerComm::outgoing_connection_established(peer_address: string,
@ -72,7 +72,6 @@ event bro_init()
{ {
BrokerComm::enable(); BrokerComm::enable();
BrokerComm::subscribe_to_events("bro/event/openflow"); BrokerComm::subscribe_to_events("bro/event/openflow");
BrokerComm::subscribe_to_events("bro/event/test_event");
BrokerComm::listen(broker_port, "127.0.0.1"); BrokerComm::listen(broker_port, "127.0.0.1");
} }