summaryrefslogtreecommitdiff
path: root/src/lbdecision.cc
diff options
context:
space:
mode:
authorslioch <slioch@eng-140.vyatta.com>2009-07-07 14:33:15 -0700
committerslioch <slioch@eng-140.vyatta.com>2009-07-07 14:33:15 -0700
commit4000b742f9eb731d40d22d6e73daef466a0e34ee (patch)
tree53a57bbb91b1f2b9b5b33f0acf2b8a35a240cb9f /src/lbdecision.cc
parent45760b0cc60d9f1f307fa3db5d420876f833a38d (diff)
downloadvyatta-wanloadbalance-4000b742f9eb731d40d22d6e73daef466a0e34ee.tar.gz
vyatta-wanloadbalance-4000b742f9eb731d40d22d6e73daef466a0e34ee.zip
added configuration hook to execute script on interface state change. configurable via conf mode. environment variables identify interface and new state.
Diffstat (limited to 'src/lbdecision.cc')
-rw-r--r--src/lbdecision.cc24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/lbdecision.cc b/src/lbdecision.cc
index a26476b..c6107d5 100644
--- a/src/lbdecision.cc
+++ b/src/lbdecision.cc
@@ -229,9 +229,31 @@ LBDecision::run(LBData &lb_data)
update_paths(lb_data);
//first determine if we need to alter the rule set
- if (!lb_data.state_changed()) {
+ map<string,string> state_changed_coll;
+ state_changed_coll = lb_data.state_changed();
+ if (state_changed_coll.empty() == true) {
return;
}
+ else {
+ //state has changed execute script now
+
+ map<string,string>::iterator iter = state_changed_coll.begin();
+ while (iter != state_changed_coll.end()) {
+ //set state
+ //set interface
+ setenv("WLB_INTERFACE_NAME",iter->first.c_str(),1);
+ setenv("WLB_INTERFACE_STATE",iter->second.c_str(),1);
+
+ syslog(LOG_WARNING, "executing script: %s",lb_data._hook.c_str());
+
+ execute(lb_data._hook, stdout);
+ //unset state
+ //unset interface
+ unsetenv("WLB_INTERFACE_NAME");
+ unsetenv("WLB_INTERFACE_STATE");
+ ++iter;
+ }
+ }
//then if we do, flush all
execute("iptables -t mangle -F PREROUTING", stdout);