]> git.ipfire.org Git - people/ms/network.git/blobdiff - src/functions/functions.device
device: Refactor check for device type
[people/ms/network.git] / src / functions / functions.device
index 8384273d057d775ec9cbdda30d867bf1ce688eab..d1f60c436572fee5c48ea825967959631efb3f3c 100644 (file)
@@ -30,22 +30,19 @@ declare -A DEVICE_LINK_SPEEDS=(
 )
 
 device_list() {
-       local devices
-
        # Add all interfaces
        local device
        for device in $(list_directory ${SYS_CLASS_NET}); do
-               list_append_one devices "${device}"
+               if device_exists "${device}"; then
+                       print "${device}"
+               fi
        done
 
-       # Add all PHYs
-       list_append devices $(phy_list)
-
-       # Add all serial devices
-       list_append devices $(serial_list)
+       # List all PHYs
+       phy_list
 
-       # Return a sorted result
-       list_sort ${devices}
+       # List all serial devices
+       serial_list
 }
 
 # Check if the device exists
@@ -153,6 +150,13 @@ device_get_ifindex() {
        print "$(<${path})"
 }
 
+device_get_driver() {
+       local device="${1}"
+       assert isset device
+
+       get_driver_from_path "${SYS_CLASS_NET}/${device}/device/driver/module"
+}
+
 # Check if the device is a bonding device
 device_is_bonding() {
        [ -d "/sys/class/net/${1}/bonding" ]
@@ -244,13 +248,25 @@ device_get_vlans() {
        done < ${PROC_NET_VLAN_CONFIG}
 }
 
+__device_type_matches() {
+       local device="${1}"
+       local type="${2}"
+
+       local _type="$(__device_get_file "${device}" "type")"
+
+       if [ "${type}" = "${_type}" ]; then
+               return ${EXIT_TRUE}
+       fi
+
+       return ${EXIT_FALSE}
+}
+
 # Check if the device is a ppp device
 device_is_ppp() {
-       local device=${1}
-
-       local type=$(__device_get_file ${device} type)
+       local device="${1}"
+       assert isset device
 
-       [ "${type}" = "512" ] && return ${EXIT_OK} || return ${EXIT_ERROR}
+       __device_type_matches "${device}" 512
 }
 
 # Check if the device is a pointopoint device.
@@ -289,19 +305,17 @@ device_is_wireless() {
 }
 
 device_is_vti() {
-       local device=${1}
-
-       local type=$(__device_get_file ${device} type)
+       local device="${1}"
+       assert isset device
 
-       [ "${type}" = "768" ] && return ${EXIT_OK} || return ${EXIT_ERROR}
+       __device_type_matches "${device}" 768
 }
 
 device_is_vti6() {
-       local device=${1}
-
-       local type=$(__device_get_file ${device} type)
+       local device="${1}"
+       assert isset device
 
-       [ "${type}" = "769" ] && return ${EXIT_OK} || return ${EXIT_ERROR}
+       __device_type_matches "${device}" 769
 }
 
 device_get_phy() {