##
# \file
# To each interface a set of caller functions exist, that take an instance
# of an object and then in turn call the implementation for the class of
# this object. If there is none within the class it looks into its
# parent class and so forth.
#
# This is somewhat similar to late binding in real OOP languages, but
# by far not so elaborated. This is not a real object oriented language
# and will surely never ever provide all features these have.
#
# That said it has proven very usefull for me to orgnize code and prevent
# code duplication.
#
# \author Georg Hopp
#
# \copyright
# Copyright © 2014 Georg Hopp
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
##
# retrieve interfaces. I prefer using ip if it is
# available, else I fallback to ifconfig... don't know
# how to retrieve this information on other systems.
# This also exports the environment variables.
#
gather_interface_info() {
[ -z "${NINTERFACES}" ] || return
local NO=1
if [ ${IP} ]
then
gather_if_info_ip
else
if [ ${IFCONFIG} ]
then
gather_if_info_ifconfig
else
${LOGGER} -p local0.warn 'Found no way to retrieve interface information.'
fi
fi
export NINTERFACES
while [ ${NO} -le ${NINTERFACES:=0} ]
do
export IF${NO}_NAME IF${NO}_MAC IF${NO}_STATE IF${NO}_IPV4 IF${NO}_IPV6
NO=$((NO+1))
done
}
##
# get the interface information from the ip tool
#
gather_if_info_ip() {
eval $(${IP} -o link | ${AWK} '{
sub(/:/,"",$1);
ifno=$1;
sub(/:/,"",$2);
name=$2;
classes=classes "net_iface_" name " ";
for (i=3; i