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/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];
}