summaryrefslogtreecommitdiff
path: root/scripts/system/vyatta_interface_rescan
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/system/vyatta_interface_rescan')
-rwxr-xr-xscripts/system/vyatta_interface_rescan168
1 files changed, 0 insertions, 168 deletions
diff --git a/scripts/system/vyatta_interface_rescan b/scripts/system/vyatta_interface_rescan
deleted file mode 100755
index 2e8ad8ca..00000000
--- a/scripts/system/vyatta_interface_rescan
+++ /dev/null
@@ -1,168 +0,0 @@
-#! /usr/bin/perl
-
-# 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.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# This code was originally developed by Vyatta, Inc.
-# Portions created by Vyatta are Copyright (C) 2010 Vyatta, Inc.
-# All Rights Reserved.
-
-# Thus updates the configuration to add new interfaces.
-# It is run on boot after udev and before vyatta configuration.
-
-use strict;
-use lib "/opt/vyatta/share/perl5/";
-use Sys::Syslog qw(:standard :macros);
-use XorpConfigParser;
-use File::Copy;
-
-my $TMPFILE = "/tmp/config.boot.$$";
-
-# These vendors are known to violate the local MAC address assignment convention
-my %whitelist = (
- '02:07:01' => 'Interlan',
- '02:60:60' => '3Com',
- '02:60:8c' => '3Com',
- '02:a0:c9' => 'Intel',
- '02:aa:3c' => 'Olivetti',
- '02:cf:1f' => 'CMC',
- '02:e0:3b' => 'Prominet',
- '02:e6:d3' => 'BTI',
- '52:54:00' => 'Realtek',
- '52:54:4c' => 'Novell 2000',
- '52:54:ab' => 'Realtec',
- 'e2:0c:0f' => 'Kingston Technologies',
-);
-
-# Ignore devices with local assigned or invalid mac address,
-# these devices don't have a persistent address
-sub persistent_address {
- my $mac = shift;
-
- return if ($mac eq '00:00:00:00:00:00'); # zero address is reserved
-
- # get first octet
- return unless ($mac =~ /^([0-9a-f][0-9a-f]):/);
- my $oct0 = hex($1);
-
- return if ($oct0 & 0x1); # skip it is a multicast address
-
- return 1 unless ($oct0 & 0x2); # this is good, not locally assigned
-
- return 1 if ( -d '/proc/xen' ); # workaround Xen breakage
-
- # unless it is in whitelist, it is non persistent
- $mac =~ /^([0-9a-f][0-9a-f]:[0-9a-f][0-9a-f]:[0-9a-f][0-9a-f])/;
- return $whitelist{$1};
-}
-
-# Map from eth0 to ethernet
-# TODO make smarter if more types
-sub interface_type {
- my $ifname = shift;
-
- return "ethernet" if ($ifname =~ /^eth/);
- return "wireless" if ($ifname =~ /^wlan/);
-
- die "unknown interface name %s\n", $ifname;
-}
-
-sub get_hwid {
- my $name = shift;
-
- open (my $f, '<', $name)
- or die "Can't open $name : $!";
-
- my $hwaddr = <$f>;
- chomp $hwaddr;
- close $f;
-
- return $hwaddr;
-}
-
-# Determine phy for wlan device
-# (This is ugly)
-sub get_phy {
- my $wlan = shift;
- my $phypath = "/sys/class/net/$wlan/phy80211";
-
- # link should be: ../../ieee80211/phy0
- return unless (readlink($phypath) =~ m!../../ieee80211/(phy[0-9]+)$!);
-
- return $1;
-}
-
-# vyatta_net_name leaves files in /run/udev/vyatta
-# the filename is the interface and the contents are the hardware id
-sub interface_rescan {
- my ($VYATTAUDEV, $BOOTFILE) = @_;
-
- # parse existing config
- my $xcp = new XorpConfigParser();
- $xcp->parse($BOOTFILE);
-
- # get list of changed interfaces
- opendir( my $dir, $VYATTAUDEV )
- or die "Can't open $VYATTAUDEV : $!";
- my @interfaces = grep { ! /^\./ } readdir($dir);
- close $dir;
-
- foreach my $ifname (sort @interfaces) {
- my $hwaddr = get_hwid("$VYATTAUDEV/$ifname");
-
- # Ignore devices that disappear (or get renamed)
- unless (-d "/sys/class/net/$ifname") {
- syslog(LOG_INFO, "%s: does not exist", $ifname);
- next;
- }
-
- unless (persistent_address($hwaddr)) {
- syslog(LOG_NOTICE, "%s: skipping address %s is not persistent",
- $ifname, $hwaddr);
- next;
- }
-
- # Add new entry to config
- my $ifpath = interface_type($ifname) . " $ifname";
-
- syslog(LOG_INFO, "add config for %s hw-id %s", $ifname, $hwaddr);
- $xcp->create_node(['interfaces',$ifpath,"hw-id $hwaddr"]);
-
- # Add existing phy entry for wireless
- if ($ifname =~ /^wlan/) {
- my $phy = get_phy($ifname);
- $xcp->create_node(['interfaces',$ifpath,"physical-device $phy"]) if $phy;
- }
-
- }
-
- # Rewrite new config file
- open (my $tmp, '>', $TMPFILE)
- or die "Can't open $TMPFILE : $!";
-
- select $tmp;
- $xcp->output(0);
- select STDOUT;
- close $tmp;
-
- copy($TMPFILE, $BOOTFILE)
- or die "Can't copy $TMPFILE to $BOOTFILE : $!";
-
- unlink($TMPFILE);
-}
-
-# main
-die "vyatta_interface_rescan called with wrong args"
- unless ($#ARGV == 1);
-
-openlog("vyatta-interface-rescan", "", LOG_DAEMON);
-
-interface_rescan(@ARGV);
-exit 0;
-