summaryrefslogtreecommitdiff
path: root/net.BSD/ifconfig.sh
diff options
context:
space:
mode:
Diffstat (limited to 'net.BSD/ifconfig.sh')
-rw-r--r--net.BSD/ifconfig.sh125
1 files changed, 125 insertions, 0 deletions
diff --git a/net.BSD/ifconfig.sh b/net.BSD/ifconfig.sh
new file mode 100644
index 0000000..2e88bc2
--- /dev/null
+++ b/net.BSD/ifconfig.sh
@@ -0,0 +1,125 @@
+# Copyright 2004-2007 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+ifconfig_depend() {
+ program /sbin/ifconfig
+ provide interface
+}
+
+_exists() {
+ [ -e /dev/net/"${IFACE}" ]
+}
+
+_get_mac_address() {
+ local mac=$(LC_ALL=C ifconfig "${IFACE}" | \
+ sed -n -e 's/^[[:space:]]*ether \(..:..:..:..:..:..\).*/\1/p')
+
+ case "${mac}" in
+ 00:00:00:00:00:00) ;;
+ 44:44:44:44:44:44) ;;
+ FF:FF:FF:FF:FF:FF) ;;
+ *) echo "${mac}"; return 0 ;;
+ esac
+
+ return 1
+}
+
+_up () {
+ ifconfig "${IFACE}" up
+}
+
+_down () {
+ ifconfig "${IFACE}" down
+}
+
+_ifindex() {
+ local x=
+ for x in /dev/net[0-9]* ; do
+ if [ "${x}" -ef /dev/net/"${IFACE}" ] ; then
+ echo "${x#/dev/net}"
+ return 0
+ fi
+ done
+ return 1
+}
+
+_is_wireless() {
+ LC_ALL=C ifconfig "${IFACE}" 2>/dev/null | \
+ grep -q "^[[:space:]]*media: IEEE 802.11 Wireless"
+}
+
+_get_inet_address() {
+ set -- $(LC_ALL=C ifconfig "${IFACE}" |
+ sed -n -e 's/^[[:space:]]*inet \([^ ]*\) netmask 0x\(..\)\(..\)\(..\)\(..\).*/\1 0x\2.0x\3.0x\4/p')
+ echo -n "$1"
+ shift
+
+ echo "/$(_netmask2cidr "$1")"
+}
+
+_add_address() {
+ if [ "${metric:-0}" != "0" ] ; then
+ set -- "$@" metric ${metric}
+ fi
+
+ ifconfig "${IFACE}" add "$@"
+}
+
+_add_route() {
+ if [ $# -gt 3 ] ; then
+ if [ "$3" = "gw" -o "$3" = "via" ] ; then
+ local one=$1 two=$2
+ shift ; shift; shift
+ set -- "${one}" "${two}" "$@"
+ fi
+ fi
+
+ route add "$@"
+}
+
+_delete_addresses() {
+ # We don't remove addresses from aliases
+ case "${IFACE}" in
+ *:*) return 0 ;;
+ esac
+
+ einfo "Removing addresses"
+ eindent
+ local addr=
+ for addr in $(LC_ALL=C ifconfig "${IFACE}" |
+ sed -n -e 's/^[[:space:]]*inet \([^ ]*\).*/\1/p') ; do
+ if [ "${addr}" = "127.0.0.1" ] ; then
+ # Don't delete the loopback address
+ [ "$1" = "lo" -o "$1" = "lo0" ] && continue
+ fi
+ einfo "${addr}"
+ /sbin/ifconfig "$1" delete "${addr}"
+ eend $?
+ done
+
+ # Remove IPv6 addresses
+ for addr in $(LC_ALL=C ifconfig "${IFACE}" | \
+ sed -n -e 's/^[[:space:]]*inet6 \([^ ]*\).*/\1/p') ; do
+ case "${addr}" in
+ *"%${IFACE}") continue ;;
+ ::1) continue ;;
+ esac
+ einfo "${addr}"
+ /sbin/ifconfig "${IFACE}" inet6 delete "${addr}"
+ eend $?
+ done
+
+ return 0
+}
+
+_show_address() {
+ einfo "received address $(_get_inet_address "${IFACE}")"
+}
+
+_has_carrier() {
+ local s=$(LC_ALL=C ifconfig "${IFACE}" | \
+ sed -n -e 's/^[[:space:]]status: \(.*\)$/\1/p')
+ [ -z "${s}" -o "${s}" = "active" -o "${s}" = "associated" ]
+}
+
+# vim: set ts=4 :