]> git.ipfire.org Git - people/arne_f/network.git/blobdiff - functions.device
Fix weird device CLI command.
[people/arne_f/network.git] / functions.device
index 8ee7ca53d3c5f112a8ff90175ae0b32c58feddf3..1ddc7d2c9d9b34349dbb29fd1e3d87fdd93ec69a 100644 (file)
@@ -121,12 +121,6 @@ function device_has_virtuals() {
        grep -q "${1}$" /proc/net/vlan/config
 }
 
-function device_is_vlan() { # XXX Compat function
-       log DEBUG "Deprecated function device_is_vlan() was used."
-
-       device_is_virtual $@
-}
-
 # Check if the device is a ppp device
 function device_is_ppp() {
        local device=${1}
@@ -159,6 +153,9 @@ function device_is_real() {
        device_is_virtual ${device} && \
                return ${EXIT_ERROR}
 
+       [ "$(__device_get_file ${device} type)" != "1" ] && \
+               return ${EXIT_ERROR}
+
        return ${EXIT_OK}
 }
 
@@ -166,7 +163,7 @@ function device_is_real() {
 function device_get_type() {
        local device=$(devicify ${1})
 
-       if device_is_vlan ${device}; then
+       if device_is_virtual ${device}; then
                echo "vlan"
 
        elif device_is_bonding ${device}; then
@@ -279,6 +276,17 @@ function device_is_promisc() {
        ip link show ${device} | grep -qE "<.*PROMISC.*>"
 }
 
+function device_set_promisc() {
+       local device=${1}
+       local state=${2}
+
+       assert device_exists ${device}
+       assert isset state
+       assert isoneof state on off
+
+       ip link set ${device} promisc ${state}
+}
+
 # Check if the device is free
 function device_is_free() {
        ! device_is_used $@
@@ -298,31 +306,6 @@ function device_is_used() {
        return ${EXIT_ERROR}
 }
 
-# XXX to be removed I think
-function device_get_free() {
-       local destination=${1}
-
-       # Replace + by a valid number
-       if grep -q "+$" <<<${destination}; then
-               local number=0
-               destination=$(sed -e "s/+//" <<<$destination)
-               while [ "${number}" -le "100" ]; do
-                       if ! device_exists "${destination}${number}"; then
-                               destination="${destination}${number}"
-                               break
-                       fi
-                       number=$(($number + 1))
-               done
-       fi
-       echo "${destination}"
-}
-
-function device_rename() {
-       warning_log "Called deprecated function 'device_rename'"
-
-       device_set_name $@
-}
-
 function device_hash() {
        local device=${1}
 
@@ -336,7 +319,7 @@ function device_hash() {
 # Give the device a new name
 function device_set_name() {
        local source=$1
-       local destination=$(device_get_free ${2})
+       local destination=${2}
 
        # Check if devices exists
        if ! device_exists ${source} || device_exists ${destination}; then
@@ -378,7 +361,7 @@ function device_set_parent_up() {
        local parent
 
        if device_is_virtual ${device}; then
-               parent=$(device_virtual_get_parent ${device})
+               parent=$(virtual_get_parent ${device})
 
                device_is_up ${parent} && return ${EXIT_OK}
 
@@ -414,7 +397,7 @@ function device_set_parent_down() {
        local parent
 
        if device_is_virtual ${device}; then
-               parent=$(device_virtual_get_parent ${device})
+               parent=$(virtual_get_parent ${device})
 
                device_is_up ${parent} || return ${EXIT_OK}
 
@@ -489,35 +472,36 @@ function device_discover() {
        done
 }
 
-function device_has_ipv4() {
+function device_has_ip() {
        local device=${1}
        local addr=${2}
 
-       if ! device_exists ${device}; then
-               error "Device '${device}' does not exist."
-               return ${EXIT_ERROR}
-       fi
+       assert isset addr
+       assert device_exists ${device}
 
-       ip addr show ${device} | grep -q -e "inet " -e "${addr}"
+       # IPv6 addresses must be fully imploded
+       local protocol=$(ip_detect_protocol ${addr})
+       case "${protocol}" in
+               ipv6)
+                       addr=$(ipv6_implode ${addr})
+                       ;;
+       esac
+
+       listmatch ${addr} $(device_get_addresses ${device})
 }
 
-function device_has_ipv6() {
+function device_get_addresses() {
        local device=${1}
-       local addr=${2}
 
-       if ! device_exists ${device}; then
-               error "Device '${device}' does not exist."
-               return ${EXIT_ERROR}
-       fi
+       assert device_exists ${device}
 
-       local prefix=${addr##*/}
-       addr=$(ipv6_implode ${addr%%/*})
-
-       if [ -n "${prefix}" ]; then
-               addr="${addr}/${prefix}"
-       fi
-
-       ip addr show ${device} | grep -q "inet6 ${addr}"
+       local prot
+       local addr
+       local line
+       ip addr show ${device} | \
+               while read prot addr line; do
+                       [ "${prot:0:4}" = "inet" ] && echo "${addr}"
+               done
 }
 
 function __device_get_file() {