diff --git a/package/base-files/files/lib/functions/network.sh b/package/base-files/files/lib/functions/network.sh
index 159da09a0d61617682663bd2718a52f46df826f2..e038c94e1c45596edb8d41cfe067a3a9222d72b2 100644
--- a/package/base-files/files/lib/functions/network.sh
+++ b/package/base-files/files/lib/functions/network.sh
@@ -41,16 +41,18 @@ network_get_subnet()  { __network_ipaddr "$1" "$2" 4 1; }
 network_get_subnet6() { __network_ipaddr "$1" "$2" 6 1; }
 
 
-network_get_device()
+__network_device()
 {
 	local __var="$1"
 	local __iface="$2"
+	local __field="$3"
 
 	local __tmp="$(ubus call network.interface."$__iface" status 2>/dev/null)"
 	[ -n "$__tmp" ] || return 1
 
 	json_load "$__tmp"
-	json_get_var "$__var" device
-
-	return 0
+	json_get_var "$__var" "$__field"
 }
+
+network_get_device()  { __network_device "$1" "$2" l3_device; }
+network_get_physdev() { __network_device "$1" "$2" device;    }