diff options
author | Michael Larson <slioch@eng-140.vyatta.com> | 2008-01-15 11:40:47 -0800 |
---|---|---|
committer | Michael Larson <slioch@eng-140.vyatta.com> | 2008-01-15 11:40:47 -0800 |
commit | ce32d73e40ef3d1c4820d4b898daf3e432d7b692 (patch) | |
tree | fcd5f65b246a0dc99e4a534e1f42061aa9e95984 /scripts | |
parent | fca1739f1985c2ba8d6316b1882365f5e26245cd (diff) | |
download | vyatta-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.pl | 99 |
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); |