summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorViacheslav Hletenko <v.gletenko@vyos.io>2023-04-28 10:38:51 +0000
committerViacheslav Hletenko <v.gletenko@vyos.io>2023-05-02 10:43:56 +0000
commit339fcd4108870c32d5ce236d0cb2b55a507f47fa (patch)
tree33ee66ba476670ab4309e2bf050400de89ca090b /scripts
parent973421035568810e2583187c48d14054970b9806 (diff)
downloadvyatta-wanloadbalance-339fcd4108870c32d5ce236d0cb2b55a507f47fa.tar.gz
vyatta-wanloadbalance-339fcd4108870c32d5ce236d0cb2b55a507f47fa.zip
T5171: Use XML for load-balancing wan instead of old templates
Delete old templates Delete vyatta-wanloadbalance.pl as it handles via python3 Delete config templates build from Makefile
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/vyatta-wanloadbalance.init2
-rw-r--r--scripts/vyatta-wanloadbalance.pl358
-rw-r--r--scripts/vyatta-wlb-connection.pl4
3 files changed, 3 insertions, 361 deletions
diff --git a/scripts/vyatta-wanloadbalance.init b/scripts/vyatta-wanloadbalance.init
index 2f61284..986f6f8 100755
--- a/scripts/vyatta-wanloadbalance.init
+++ b/scripts/vyatta-wanloadbalance.init
@@ -10,7 +10,7 @@ test -x $bb || exit 0
start ()
{
- start-stop-daemon --background --start --quiet --oknodo --exec /opt/vyatta/sbin/wan_lb -- -f /var/run/load-balance/wlb.conf -d -i $pid
+ start-stop-daemon --background --start --quiet --oknodo --exec /opt/vyatta/sbin/wan_lb -- -f /run/load-balance/wlb.conf -d -i $pid
}
stop ()
diff --git a/scripts/vyatta-wanloadbalance.pl b/scripts/vyatta-wanloadbalance.pl
deleted file mode 100644
index f476ac2..0000000
--- a/scripts/vyatta-wanloadbalance.pl
+++ /dev/null
@@ -1,358 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Module: vyatta-wanloadbalance.pl
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 as published
-# by the Free Software Foundation.
-#
-# **** End License ****
-#
-use lib "/opt/vyatta/share/perl5/";
-use Vyatta::Config;
-use Vyatta::Misc;
-use Vyatta::TypeChecker;
-use Getopt::Long;
-
-use warnings;
-use strict;
-use POSIX;
-use File::Copy;
-
-sub write_health {
-
- #open conf
- my $config = new Vyatta::Config;
-
- my $valid = "false";
-
- if ($config->exists("load-balancing wan disable-source-nat")) {
- print FILE_LCK "disable-source-nat\n";
- }
-
- if ($config->exists("load-balancing wan enable-local-traffic")) {
- print FILE_LCK "enable-local-traffic\n";
- }
-
- if ($config->exists("load-balancing wan sticky-connections inbound")) {
- print FILE_LCK "sticky-connections inbound\n";
- }
-
- if ($config->exists("load-balancing wan flush-connections")) {
- print FILE_LCK "flush-conntrack\n";
- }
-
- my $hook = $config->returnValue("load-balancing wan hook");
- if (defined $hook) {
- print FILE_LCK "hook \"" . $hook . "\"\n";
- }
-
- print FILE_LCK "health {\n";
-
- $config->setLevel("load-balancing wan interface-health");
- my @eths = $config->listNodes();
- foreach my $ethNode (@eths) {
- $config->setLevel("load-balancing wan interface-health");
-
- print FILE_LCK "\tinterface " . $ethNode . " {\n";
-
- my $option = $config->returnValue("$ethNode failure-count");
- if (defined $option) {
- print FILE_LCK "\t\tfailure-ct " . $option . "\n";
- }
-
- $option = $config->returnValue("$ethNode success-count");
- if (defined $option) {
- print FILE_LCK "\t\tsuccess-ct " . $option . "\n";
- }
-
- $option = $config->returnValue("$ethNode nexthop");
- if (defined $option) {
- print FILE_LCK "\t\tnexthop " . $option . "\n";
- $valid = "true";
- }else {
- print "ERROR: nexthop must be specified\n";
- exit 1;
- }
-
- $config->setLevel("load-balancing wan interface-health $ethNode test");
- my @rules = $config->listNodes();
- foreach my $rule (@rules) {
- print FILE_LCK "\t\trule " . $rule . " {\n";
-
- my $test_type = $config->returnValue("$rule type");
- if ((defined $test_type) && ($test_type eq "ttl")) {
- print FILE_LCK "\t\t\ttype udp {\n";
- my $ttl_limit = $config->returnValue("$rule ttl-limit");
- if (defined $ttl_limit) {
- print FILE_LCK "\t\t\t\tttl $ttl_limit\n";
- }
- }elsif (defined($test_type) && ($test_type eq "user-defined")) {
- print FILE_LCK "\t\t\ttype user-defined {\n";
- my $test_script = $config->returnValue("$rule test-script");
- if (defined $test_script) {
- print FILE_LCK "\t\t\t\ttest-script $test_script\n";
- }else {
- print "ERROR: script must be defined for test-script\n";
- exit 1;
- }
- }else {
- print FILE_LCK "\t\t\ttype ping {\n";
- }
-
- my $option = $config->returnValue("$rule target");
- if (defined $option) {
- print FILE_LCK "\t\t\t\ttarget " . $option . "\n";
- }
-
- $option = $config->returnValue("$rule resp-time");
- if (defined $option) {
- print FILE_LCK "\t\t\t\tresp-time " . $option*1000 . "\n";
- }
- print FILE_LCK "\t\t\t}\n";
-
- print FILE_LCK "\t\t}\n";
- }
- print FILE_LCK "\t}\n";
- }
- print FILE_LCK "}\n\n";
-
- if ($valid eq "false") {
- print "WARNING: A valid WAN load-balance configuration requires an interface with a nexthop\n";
- }
- return $valid;
-}
-
-sub write_rules {
- my $config = new Vyatta::Config;
-
- my $outbound_defined = "false";
-
- $config->setLevel('load-balancing wan rule');
- my @rules = $config->listNodes();
-
- #destination
- foreach my $rule (@rules) {
- print FILE_LCK "rule " . $rule . " {\n";
-
- my $exclude = "false";
-
- $config->setLevel('load-balancing wan rule');
-
- if ($config->exists("$rule exclude")) {
- $exclude = "true";
- print FILE_LCK "\texclude\n";
- }
-
- if ($config->exists("$rule failover")) {
- print FILE_LCK "\tfailover\n";
- }
-
- if ($config->exists("$rule per-packet-balancing")) {
- print FILE_LCK "\tper-packet-balancing\n";
- }
-
- if ($config->exists("$rule failover") && $config->exists("$rule exclude")) {
- print "ERROR: failover cannot be configured with exclude\n";
- exit 1;
- }
-
- if ($config->exists("$rule limit") && $config->exists("$rule exclude")) {
- print "ERROR: limit cannot be used with exclude\n";
- exit 1;
- }
-
- if ($config->exists("$rule limit")) {
- print FILE_LCK "\tlimit {\n";
- my $limit_burst = $config->returnValue("$rule limit burst");
- if (defined $limit_burst) {
- print FILE_LCK "\t\tburst " . $limit_burst . "\n";
- }
-
- my $limit_rate = $config->returnValue("$rule limit rate");
- if (defined $limit_rate) {
- print FILE_LCK "\t\trate " . $limit_rate . "\n";
- }
-
- my $limit_period = $config->returnValue("$rule limit period");
- if (defined $limit_period) {
- print FILE_LCK "\t\tperiod " . $limit_period . "\n";
- }
-
- my $limit_thresh = $config->returnValue("$rule limit threshold");
- if (defined $limit_thresh) {
- print FILE_LCK "\t\tthresh " . $limit_thresh . "\n";
- }
- print FILE_LCK "\t}\n";
- }
-
- my $protocol = $config->returnValue("$rule protocol");
- if (defined $protocol) {
- print FILE_LCK "\tprotocol " . $protocol . "\n";
- }else {
- $protocol = "";
- }
-
- #destination
- print FILE_LCK "\tdestination {\n";
- my $daddr = $config->returnValue("$rule destination address");
- if (defined $daddr) {
- if (Vyatta::TypeChecker::validate_iptables4_addr($daddr) eq "1") {
- print FILE_LCK "\t\taddress \"" . $daddr . "\"\n";
- }else {
- print "Error in destination address configuration\n";
- exit 1;
- }
- }
-
- my $option = $config->returnValue("$rule destination port");
- if (defined $option) {
- my $can_use_port;
- my $port_str;
- my $port_err;
-
- if ($protocol eq "tcp" || $protocol eq "udp") {
- $can_use_port = "yes";
- }
- ($port_str, $port_err) = Vyatta::Misc::getPortRuleString($option, $can_use_port, "d", $protocol);
- if (defined $port_str) {
- print FILE_LCK "\t\tport-ipt \"" . $port_str . "\"\n";
- }else {
- print $port_err;
- exit 1;
- }
- }
-
- print FILE_LCK "\t}\n";
-
- #source
- $config->setLevel('load-balancing wan rule');
-
- print FILE_LCK "\tsource {\n";
- my $saddr = $config->returnValue("$rule source address");
- if (defined $saddr) {
- if (Vyatta::TypeChecker::validate_iptables4_addr($saddr) eq "1") {
- print FILE_LCK "\t\taddress \"" . $saddr . "\"\n";
- }else {
- print "Error in source address configuration\n";
- exit 1;
- }
- }
-
- $option = $config->returnValue("$rule source port");
- if (defined $option) {
- my $can_use_port;
- my $port_str;
- my $port_err;
-
- if ($protocol eq "tcp" || $protocol eq "udp") {
- $can_use_port = "yes";
- }
- ($port_str, $port_err) = Vyatta::Misc::getPortRuleString($option, $can_use_port, "s", $protocol);
- if (defined $port_str) {
- print FILE_LCK "\t\tport-ipt \"" . $port_str . "\"\n";
- }else {
- print $port_err;
- exit 1;
- }
- }
- print FILE_LCK "\t}\n";
-
- #inbound-interface
- my $inbound = $config->returnValue("$rule inbound-interface");
- if (defined $inbound) {
- print FILE_LCK "\tinbound-interface " . $inbound . "\n";
- }else {
- print "ERROR: inbound-interface must be specified\n";
- exit 1;
- }
-
- #interface
- $config->setLevel("load-balancing wan rule $rule interface");
- my @eths = $config->listNodes();
-
- if ($#eths < 0 && $exclude eq "false") {
- print "WARNING: rule $rule will be inactive because no (outbound) interfaces have been defined for this rule\n";
- }elsif ($#eths >= 0 && $exclude eq "true") {
- print "WARNING: interfaces (outbound) are not used when exclude has been defined for rule $rule\n";
- }
-
- foreach my $ethNode (@eths) {
- if ($inbound eq $ethNode) {
- print "WARNING: inbound interface is the same as the outbound interface\n";
- }
-
- if ($exclude ne "true") {
- $outbound_defined = "true";
- }
-
- print FILE_LCK "\tinterface " . $ethNode . " {\n";
-
- $option = $config->returnValue("$ethNode weight");
- if (defined $option) {
- print FILE_LCK "\t\tweight " . $option . "\n";
- }
- print FILE_LCK "\t}\n";
- }
- print FILE_LCK "}\n";
- }
-
- if ($outbound_defined eq "false") {
- print "WARNING: At least one rule with an (outbound) interface must be defined for WAN load balancing to be active\n";
-
- #allow this configuration, just generate the warning
- return "true";
- }
- return $outbound_defined;
-}
-
-my $nexthop;
-
-sub usage {
- exit 1;
-}
-
-GetOptions("valid-nexthop=s" => \$nexthop,) or usage();
-
-####main
-my $conf_file = '/var/run/load-balance/wlb.conf';
-my $conf_lck_file = '/var/run/load-balance/wlb.conf.lck';
-`sudo mkdir -p /var/run/load-balance`;
-
-# Enable conntrack counters
-`sudo sysctl -w net.netfilter.nf_conntrack_acct=1`;
-
-####are we just validating?
-if (defined $nexthop) {
- my $rc = Vyatta::TypeChecker::validateType('ipv4', $nexthop, 1);
- if (!$rc && $nexthop ne "dhcp") {
- exit 1;
- }
- exit 0;
-}
-
-#open file
-`touch $conf_file`; #creates file on first access
-open(FILE, "<$conf_file") or die "Can't open wlb config file";
-open(FILE_LCK, "+>$conf_lck_file") or die "Can't open wlb lock file";
-
-my $success = write_health();
-if ($success eq "false") {
- exit 1;
-}
-
-$success = write_rules();
-if ($success eq "false") {
- exit 1;
-}
-
-close FILE;
-close FILE_LCK;
-
-copy($conf_lck_file,$conf_file);
-unlink($conf_lck_file);
-
-#finally kick the process
-system("/opt/vyatta/sbin/vyatta-wanloadbalance.init restart $conf_file 2>/dev/null");
-
-exit 0;
diff --git a/scripts/vyatta-wlb-connection.pl b/scripts/vyatta-wlb-connection.pl
index b034821..afd8289 100644
--- a/scripts/vyatta-wlb-connection.pl
+++ b/scripts/vyatta-wlb-connection.pl
@@ -25,8 +25,8 @@
use lib "/opt/vyatta/share/perl5/";
-#examine /var/run/load-balance/wlb.conf for disable-source-nat
-if (!open($CONFFILE, "<", "/var/run/load-balance/wlb.conf")) {
+#examine //run/load-balance/wlb.conf for disable-source-nat
+if (!open($CONFFILE, "<", "/run/load-balance/wlb.conf")) {
return;
}
$nat_source_disabled = 0;