summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorMichael Larson <slioch@eng-140.vyatta.com>2008-01-15 11:40:47 -0800
committerMichael Larson <slioch@eng-140.vyatta.com>2008-01-15 11:40:47 -0800
commitce32d73e40ef3d1c4820d4b898daf3e432d7b692 (patch)
treefcd5f65b246a0dc99e4a534e1f42061aa9e95984 /scripts
parentfca1739f1985c2ba8d6316b1882365f5e26245cd (diff)
downloadvyatta-cfg-quagga-ce32d73e40ef3d1c4820d4b898daf3e432d7b692.tar.gz
vyatta-cfg-quagga-ce32d73e40ef3d1c4820d4b898daf3e432d7b692.zip
wired up link detect to cli. writes to exlusion file. note that link-detect is enabled by default for all interfaces.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/vyatta-linkstatus.pl99
1 files changed, 99 insertions, 0 deletions
diff --git a/scripts/vyatta-linkstatus.pl b/scripts/vyatta-linkstatus.pl
new file mode 100644
index 00000000..d6756cbb
--- /dev/null
+++ b/scripts/vyatta-linkstatus.pl
@@ -0,0 +1,99 @@
+#!/usr/bin/perl -w
+#
+# Module: vyatta-linkstatus.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 warnings;
+use strict;
+use POSIX;
+use File::Copy;
+
+my $exclude_file = '/var/linkstatus/exclude';
+my $exclude_lck_file = '/var/linkstatus/exclude.lck';
+my $action = 0;
+my $iface;
+
+
+foreach my $arg (@ARGV) {
+ if (substr($arg, 0, 5) eq "--add") {
+ $action = 0;
+ next;
+ }
+ elsif (substr($arg, 0, 5) eq "--del") {
+ $action = 1;
+ next;
+ }
+ else {
+ #must be interface then...
+ $iface = $arg;
+ }
+}
+
+open FILE, "<$exclude_file";
+open FILE_LCK, "+>$exclude_lck_file";
+my $newline = "";
+my @excl;
+
+while (<FILE>) {
+ @excl = split ',', $_;
+
+ foreach my $elem (@excl)
+ {
+ if ($elem ne $iface) {
+ if ($newline ne '') {
+ $newline = "$newline,$elem";
+ }
+ else {
+ $newline = $elem;
+ }
+ }
+ }
+}
+
+close FILE;
+
+#if add new now add to end of list
+if ($action==0) {
+ if ($newline ne '') {
+ $newline = "$newline,$iface";
+ }
+ else {
+ $newline = $iface;
+ }
+}
+
+print FILE_LCK "$newline";
+close FILE_LCK;
+
+copy ($exclude_lck_file,$exclude_file);
+unlink($exclude_lck_file);
+
+
+#finally kick the process
+open(PID, "< /var/run/vyatta/quagga/watchlink.pid") || die "could not open '/var/run/vyatta/quagga/watchlink.pid'";
+my $foo = <PID>;
+system "kill -10 $foo";
+close(PID);