diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/vyatta-wanloadbalance.pl | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/scripts/vyatta-wanloadbalance.pl b/scripts/vyatta-wanloadbalance.pl new file mode 100644 index 0000000..c65c1f0 --- /dev/null +++ b/scripts/vyatta-wanloadbalance.pl @@ -0,0 +1,180 @@ +#!/usr/bin/perl -w +# +# Module: vyatta-wanloadbalance.pl +# +# **** License **** +# Version: VPL 1.0 +# +# The contents of this file are subject to the Vyatta Public License +# Version 1.0 ("License"); you may not use this file except in +# compliance with the License. You may obtain a copy of the License at +# http://www.vyatta.com/vpl +# +# Software distributed under the License is distributed on an "AS IS" +# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +# the License for the specific language governing rights and limitations +# under the License. +# +# This code was originally developed by Vyatta, Inc. +# Portions created by Vyatta are Copyright (C) 2008 Vyatta, Inc. +# All Rights Reserved. +# +# Author: Michael Larson +# Date: January 2008 +# Description: Writes exclusion list for linkstatus +# +# **** End License **** +# +use lib "/opt/vyatta/share/perl5/"; +use VyattaConfig; +use VyattaMisc; + +use warnings; +use strict; +use POSIX; +use File::Copy; + +sub write_health { +#open conf + my $config = new VyattaConfig; + + $config->setLevel("load-balancing wan interface-health"); + my @eths = $config->listNodes(); + + print FILE_LCK "health {\n"; + + foreach my $ethNode (@eths) { + + 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 ping"); + if (defined $option) { + print FILE_LCK "\t\ttarget " . $option . "\n"; + } + + $option = $config->returnValue("$ethNode resp-time"); + if (defined $option) { + print FILE_LCK "\t\tping-resp " . $option . "\n"; + } + + $option = $config->returnValue("$ethNode success-count"); + if (defined $option) { + print FILE_LCK "\t\tsuccess-ct " . $option . "\n"; + } + print FILE_LCK "\t}\n"; + } + print FILE_LCK "}\n\n"; +} + +sub write_rules { + my $config = new VyattaConfig; + + $config->setLevel("load-balancing wan rule"); + my @rules = $config->listNodes(); + + #destination + foreach my $rule (@rules) { + print FILE_LCK "rule " . $rule . " {\n"; + + my $option = $config->returnValue("$rule protocol"); + if (defined $option) { + print FILE_LCK "\tprotocol " . $option . "\n" + } + + #destination + print FILE_LCK "\tdestination {\n"; + $option = $config->returnValue("$rule destination address"); + if (defined $option) { + print FILE_LCK "\t\taddress " . $option . "\n"; + } + + $option = $config->returnValue("$rule destination network"); + if (defined $option) { + print FILE_LCK "\t\tnetwork " . $option . "\n"; + } + + $config->setLevel("load-balancing wan rule $rule destination port-number"); + my @dport_nums = $config->listNodes(); + foreach my $dport_num (@dport_nums) { + print FILE_LCK "\t\tport-number " . $dport_num . "\n"; + } + + $config->setLevel("load-balancing wan rule $rule destination port-name"); + my @dport_names = $config->listNodes(); + foreach my $dport_name (@dport_names) { + print FILE_LCK "\t\tport-number " . $dport_name . "\n"; + } + print FILE_LCK "\t}\n"; + + #source + print FILE_LCK "\tsource {\n"; + $option = $config->returnValue("$rule source address"); + if (defined $option) { + print FILE_LCK "\t\taddress " . $option . "\n"; + } + + $option = $config->returnValue("$rule source network"); + if (defined $option) { + print FILE_LCK "\t\tnetwork " . $option . "\n"; + } + + $config->setLevel("load-balancing wan rule $rule source port-number"); + my @sport_nums = $config->listNodes(); + foreach my $sport_num (@sport_nums) { + print FILE_LCK "\t\tport-number " . $sport_num . "\n"; + } + + $config->setLevel("load-balancing wan rule $rule source port-name"); + my @sport_names = $config->listNodes(); + foreach my $sport_name (@sport_names) { + print FILE_LCK "\t\tport-number " . $sport_name . "\n"; + } + print FILE_LCK "\t}\n"; + + #interface + $config->setLevel("load-balancing wan rule $rule interface"); + my @eths = $config->listNodes(); + + foreach my $ethNode (@eths) { + 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"; + } +} + + + +####main +my $conf_file = '/var/load-balance/wlb.conf'; +my $conf_lck_file = '/var/load-balance/wlb.conf.lck'; + +#open file +open FILE, "<$conf_file"; +open FILE_LCK, "+>$conf_lck_file"; + +write_health(); + +write_rules(); + +close FILE; +close FILE_LCK; + +copy ($conf_lck_file,$conf_file); +unlink($conf_lck_file); + + +#finally kick the process +#system "/etc/init.d/vyatta-wanloadbalance restart"; + +exit 0; |