summaryrefslogtreecommitdiff
path: root/src/lbdatafactory.cc
diff options
context:
space:
mode:
authorMichael Larson <mike@vyatta.com>2011-03-30 12:09:58 -0700
committerMichael Larson <mike@vyatta.com>2011-03-30 12:09:58 -0700
commit25eef8bfb91c2c57907ab79f4ba6bcd9fe0064cb (patch)
tree53f6756f29c645fcec455bfec6a1bf8bdb53e50d /src/lbdatafactory.cc
parent55cab2fbbf2ee75d6939a9210ddcaa5c72ed6981 (diff)
downloadvyatta-wanloadbalance-25eef8bfb91c2c57907ab79f4ba6bcd9fe0064cb.tar.gz
vyatta-wanloadbalance-25eef8bfb91c2c57907ab79f4ba6bcd9fe0064cb.zip
check in for Bug 6959
Add the ability to run a user defined script to determine wan load-balancing interface health includes sample http test (scripts/http_test.pl). Configuration will look as follows: wan { interface-health eth0 { nexthop 10.3.0.1 test 1 { test-script /tmp/http_test.pl type user-defined } } interface-health eth1 { nexthop 10.3.0.1 test 1 { test-script /tmp/http_test.pl type user-defined } } With corresponding output: vyatta@vyatta# run show wan-load-balance Interface: eth0 Status: active Last Status Change: Wed Mar 30 19:03:59 2011 +Test: user Script: /tmp/http_test.pl Last Interface Success: 0s Last Interface Failure: n/a # Interface Failure(s): 0 Interface: eth1 Status: failed Last Status Change: Wed Mar 30 19:03:59 2011 -Test: user Script: /tmp/http_test.pl Last Interface Success: n/a Last Interface Failure: 0s # Interface Failure(s): 52 Scripts returns 0 for success, non-zero for failure.
Diffstat (limited to 'src/lbdatafactory.cc')
-rw-r--r--src/lbdatafactory.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/lbdatafactory.cc b/src/lbdatafactory.cc
index a9030b3..653e270 100644
--- a/src/lbdatafactory.cc
+++ b/src/lbdatafactory.cc
@@ -19,6 +19,7 @@
#include "lbdata.hh"
#include "lbtest_icmp.hh"
#include "lbtest_ttl.hh"
+#include "lbtest_user.hh"
#include "lbdatafactory.hh"
using namespace std;
@@ -173,6 +174,9 @@ LBDataFactory::process(const vector<string> &path, int depth, const string &key,
else if (depth == 4 && key == "ttl") {
process_health_interface_rule_type_udp(l_key,l_value);
}
+ else if (depth == 4 && key == "test-script") {
+ process_health_interface_rule_type_user(l_key,l_value);
+ }
}
else if (path[0] == "rule") {
if (depth > 0 && path[1] == "source") {
@@ -320,12 +324,19 @@ LBDataFactory::process_health_interface_rule_type_udp(const string &key, const s
}
void
+LBDataFactory::process_health_interface_rule_type_user(const string &key, const string &value)
+{
+ if (_test_iter != _health_iter->second._test_coll.end()) {
+ if (key == "test-script") {
+ ((LBTestUser*)_test_iter->second)->set_script((string&)value);
+ }
+ }
+}
+
+void
LBDataFactory::process_health_interface_rule_type(const string &key, const string &value)
{
if (value == "ping") {
- if (_debug) {
- cout << "LBDataFactory::process_health_interface_rule_type(): setting up icmp test" << endl;
- }
LBTestICMP *test = new LBTestICMP(_debug);
_health_iter->second._test_coll.insert(pair<int,LBTest*>(_current_test_rule_number,test));
}
@@ -333,6 +344,10 @@ LBDataFactory::process_health_interface_rule_type(const string &key, const strin
LBTestTTL *test = new LBTestTTL(_debug);
_health_iter->second._test_coll.insert(pair<int,LBTest*>(_current_test_rule_number,test));
}
+ else if (value == "user-defined") {
+ LBTestUser *test = new LBTestUser(_debug);
+ _health_iter->second._test_coll.insert(pair<int,LBTest*>(_current_test_rule_number,test));
+ }
_test_iter = _health_iter->second._test_coll.find(_current_test_rule_number);
}