diff options
author | slioch <slioch@eng-140.vyatta.com> | 2009-07-07 14:33:15 -0700 |
---|---|---|
committer | slioch <slioch@eng-140.vyatta.com> | 2009-07-07 14:33:15 -0700 |
commit | 4000b742f9eb731d40d22d6e73daef466a0e34ee (patch) | |
tree | 53a57bbb91b1f2b9b5b33f0acf2b8a35a240cb9f /src/lbdecision.cc | |
parent | 45760b0cc60d9f1f307fa3db5d420876f833a38d (diff) | |
download | vyatta-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.cc | 24 |
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); |