aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2007-12-04 14:19:47 +0000
committerRoy Marples <roy@marples.name>2007-12-04 14:19:47 +0000
commit09f949de5e6990786a01acf5b3e1262e8ac846eb (patch)
tree83be5551c39e48dcac60b867a624e8aeec21015e
parentba3248e6d23f80f03bed9093891fdfdaf736b2b8 (diff)
Remove our reliance on sed and grep
-rw-r--r--net.BSD/ifconfig.sh112
1 files changed, 60 insertions, 52 deletions
diff --git a/net.BSD/ifconfig.sh b/net.BSD/ifconfig.sh
index 4f16b586..ff8b68d6 100644
--- a/net.BSD/ifconfig.sh
+++ b/net.BSD/ifconfig.sh
@@ -39,17 +39,20 @@ _exists() {
}
_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
+ local proto= address= foo=
+ LC_ALL=C ifconfig "${IFACE}" | while read proto address foo; do
+ case "${proto}" in
+ ether)
+ case "${address}" in
+ 00:00:00:00:00:00);;
+ 44:44:44:44:44:44);;
+ FF:FF:FF:FF:FF:FF);;
+ *) echo "${address}";;
+ esac
+ return 0
+ ;;
+ esac
+ done
}
_up () {
@@ -73,7 +76,7 @@ _ifindex() {
done
;;
default)
- for x in $(ifconfig -a | sed -n -e 's/^\([^[:space:]]*\):.*/\1/p'); do
+ for x in $(ifconfig -l); do
if [ "${x}" = "${IFACE}" ]; then
echo "${i}"
return 0
@@ -88,19 +91,29 @@ _ifindex() {
return 1
}
+_ifconfig_ent() {
+ LC_ALL=C ifconfig "${IFACE}" 2>/dev/null | while read ent rest; do
+ case "${ent}" in
+ "$1") echo "${rest}";;
+ esac
+ done
+}
+
_is_wireless() {
- LC_ALL=C ifconfig "${IFACE}" 2>/dev/null | \
- grep -q "^[[:space:]]*media: IEEE 802.11 Wireless"
+ case "$(_ifconfig_ent "media:")" in
+ "IEEE 802.11 Wireless"*) return 0;;
+ *) return 1;;
+ esac
}
_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')
- [ -z "$1" ] && return 1
-
- echo -n "$1"
- shift
- echo "/$(_netmask2cidr "$1")"
+ local inet= address= n= netmask= rest=
+ LC_ALL=C ifconfig "${IFACE}" | while read inet address n netmask rest; do
+ if [ "${inet}" = "inet" ]; then
+ echo "${address}/$(_netmask2cidr "${netmask}")"
+ return 0
+ fi
+ done
}
_add_address() {
@@ -145,38 +158,22 @@ _add_route() {
}
_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}"
- ifconfig "$1" "${addr}" -alias
- 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;;
+ LC_ALL=C ifconfig "${IFACE}" | while read inet address rest; do
+ case "${inet}" in
+ inet|inet6)
+ case "${address}" in
+ *"%${IFACE}"|::1) continue;;
+ 127.0.0.1) [ "${IFACE}" = "lo0" ] && continue;;
+ esac
+ einfo "${address}"
+ ifconfig "${IFACE}" "${inet}" "${address}" -alias
+ eend $?
+ ;;
esac
- einfo "${addr}"
- ifconfig "${IFACE}" inet6 "${addr}" -alias
- eend $?
done
eoutdent
-
return 0
}
@@ -185,9 +182,10 @@ _show_address() {
}
_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" ]
+ case "$(_ifconfig_ent "status:")" in
+ ""|active|associated) return 0;;
+ *) return 1;;
+ esac
}
ifconfig_pre_start() {
@@ -223,7 +221,17 @@ ifconfig_pre_start() {
}
_ifconfig_ipv6_tentative() {
- LC_ALL=C ifconfig "${IFACE}" | grep -q "^[[:space:]]*inet6 .* tentative"
+ local inet= address= rest=
+ LC_ALL=C ifconfig "${IFACE}" | while read inet address rest; do
+ case "${inet}" in
+ inet6)
+ case "${rest}" in
+ *" "tentative*) return 2;;
+ esac
+ ;;
+ esac
+ done
+ [ $? = 2 ]
}
ifconfig_post_start() {