diff options
author | Christian Heim <phreak@gentoo.org> | 2006-04-24 14:30:20 +0000 |
---|---|---|
committer | Christian Heim <phreak@gentoo.org> | 2006-04-24 14:30:20 +0000 |
commit | c7b10efd125522f3beeb3144b8a5b4cc511d93cf (patch) | |
tree | 09506e4c389d58f5303799712bf9dfcae8117835 /net-scripts/net/apipa.sh | |
parent | Merging r1965 (diff) | |
download | baselayout-vserver-c7b10efd125522f3beeb3144b8a5b4cc511d93cf.tar.gz baselayout-vserver-c7b10efd125522f3beeb3144b8a5b4cc511d93cf.tar.bz2 baselayout-vserver-c7b10efd125522f3beeb3144b8a5b4cc511d93cf.zip |
Merging r2014
svn path=/baselayout-vserver/trunk/; revision=341
Diffstat (limited to 'net-scripts/net/apipa.sh')
-rw-r--r-- | net-scripts/net/apipa.sh | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/net-scripts/net/apipa.sh b/net-scripts/net/apipa.sh new file mode 100644 index 0000000..5ccdc18 --- /dev/null +++ b/net-scripts/net/apipa.sh @@ -0,0 +1,46 @@ +# Copyright (c) 2004-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# Contributed by Roy Marples (uberlord@gentoo.org) + +# void apipa_depend(void) +# +# Sets up the dependancies for the module +apipa_depend() { + installed arping + functions interface_exists +} + +# bool apipa_start(char *iface) +# +# Tries to detect a config based on arpinging things +apipa_start() { + local iface="$1" i1 i2 addr i=0 + + interface_exists "$1" true || return 1 + + einfo "Searching for free addresses in 169.254.0.0/16" + eindent + + while [[ ${i} -lt 64516 ]]; do + (( i1=${RANDOM}%255 )) + (( i2=${RANDOM}%255 )) + + addr="169.254.${i1}.${i2}" + vebegin "${addr}/16" + if ! arping_address_exists "${iface}" "${addr}" ; then + config[config_counter]="${addr}/16 broadcast 169.254.255.255" + (( config_counter-- )) + veend 0 + eoutdent + return 0 + fi + + (( i++ )) + done + + eerror "No free address found!" + eoutdent + return 1 +} + +# vim: set ts=4 : |