summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Heim <phreak@gentoo.org>2006-04-24 14:30:20 +0000
committerChristian Heim <phreak@gentoo.org>2006-04-24 14:30:20 +0000
commitc7b10efd125522f3beeb3144b8a5b4cc511d93cf (patch)
tree09506e4c389d58f5303799712bf9dfcae8117835 /net-scripts/net/apipa.sh
parentMerging r1965 (diff)
downloadbaselayout-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.sh46
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 :