#!/bin/bash # **** 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) 2007 Vyatta, Inc. # All Rights Reserved. # # Author: Tom Grennan # Description: search Vyatta config for interface name given address # # **** End License **** debug= match= attr_address=0:0:0:0:0:0 test -r /etc/default/vyatta && source /etc/default/vyatta # process command line variable overrides for arg ; do case "$arg" in --debug ) debug=echo ;; --*=* ) arg=${arg#--} eval ${arg%=*}=\"${arg#*=}\" ;; *=* ) eval ${arg%=*}=\"${arg#*=}\" ;; *:*:*:*:*:* ) attr_address=$arg ;; * ) kname=$arg ;; esac done : ${vyatta_prefix:=/opt/vyatta} : ${vyatta_sysconfdir:=${vyatta_prefix}/etc} : ${BOOTFILE:=${vyatta_sysconfdir:-/opt/vyatta/etc}/config/config.boot} shopt -s extglob nullglob # load cfg_eth_hwid array from config file as follows # interface { # ... # ethernet eth# { # ... # hw-id: XX:XX:XX:XX:XX:XX # ... # } # } # # cfg_eth_hwid=( "eth#=xx:xx:xx:xx:xx:xx" ... ) declare -a cfg_net_hwid=( $( sed -ne ' /^interfaces {/,/^}/ { /^ *ethernet eth[0-9]* {/,/^ $/ { /^ *ethernet/ { s/.* eth\([0-9]\+\) {$/ eth\1=/ # hold interface name h } /^.*hw-id:/ { # translate field name s/.*hw-id: *// # tolower hex mac address y/ABCDEF/abcdef/ # exchange hold and pattern space x # concatenate hold and pattern G s/\n//p } } }' $BOOTFILE )) for name_hwid in ${cfg_net_hwid[@]} ; do name=${name_hwid%=*} hwid=${name_hwid#*=} if [ "$hwid" == "$attr_address" ] ; then echo $name exit 0 fi [ "$name" == "$kname" ] && match=$name_hwid done # have not found matching hwid in config, see if we can use kernel name if [ -n "$kname" ] ; then # if interface missing entirely from config # or it does not yet have a recorded hwid # it is safe to use kernel name if [[ -z "$match" || -z "${match#*=}" ]] ; then echo $kname exit 0 fi # FIXME! need to figure out what to do here... # The device mac address isn't yet in the config but the config # has another hwid associated with the kernel name. This # indicates that the device may have been replaced or a new device # installed. Udev may not have scanned all devices yet so we # donot know which case. fi exit 1 # Local Variables: # mode: shell-script # sh-indentation: 4 # End: