base-files: add ucidef_set_network_device_path_port function
The already existing uci function ucidef_set_network_device_path can be used to specify a unique PCI address to name a network interface. However, I noticed that some NIC ports share the same PCI address but are still distinguishable by the dev_port value of the network interface's sysfs entry. This commit adds a new uci function ucidef_set_network_device_path_port, which is similar to ucidef_set_network_device_path but takes an additional argument where the user can specify the dev_port value. The internal function preinit_config_port loops through all network interfaces at the given PCI address and chooses the one where the dev_port value matches. This was tested on an x86_64 device using a Mellanox ConnectX-3 card. Signed-off-by: Til Kaiser <mail@tk154.de> Link: https://github.com/openwrt/openwrt/pull/16560 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
0a47d518df
commit
503596b8ce
2 changed files with 23 additions and 2 deletions
|
@ -122,6 +122,11 @@ ucidef_set_network_device_path() {
|
||||||
_ucidef_set_network_device_common $1 path $2
|
_ucidef_set_network_device_common $1 path $2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ucidef_set_network_device_path_port() {
|
||||||
|
_ucidef_set_network_device_common $1 path $2
|
||||||
|
_ucidef_set_network_device_common $1 port $3
|
||||||
|
}
|
||||||
|
|
||||||
ucidef_set_network_device_gro() {
|
ucidef_set_network_device_gro() {
|
||||||
_ucidef_set_network_device_common $1 gro $2
|
_ucidef_set_network_device_common $1 gro $2
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,12 +65,27 @@ preinit_config_switch() {
|
||||||
|
|
||||||
preinit_config_port() {
|
preinit_config_port() {
|
||||||
local original
|
local original
|
||||||
|
local dev_port
|
||||||
|
|
||||||
local netdev="$1"
|
local netdev="$1"
|
||||||
local path="$2"
|
local path="$2"
|
||||||
|
local port="$3"
|
||||||
|
|
||||||
[ -d "/sys/devices/$path/net" ] || return
|
[ -d "/sys/devices/$path/net" ] || return
|
||||||
|
|
||||||
|
if [ -z "$port" ]; then
|
||||||
original="$(ls "/sys/devices/$path/net" | head -1)"
|
original="$(ls "/sys/devices/$path/net" | head -1)"
|
||||||
|
else
|
||||||
|
for device in /sys/devices/$path/net/*; do
|
||||||
|
dev_port="$(cat "$device/dev_port")"
|
||||||
|
if [ "$dev_port" = "$port" ]; then
|
||||||
|
original="${device##*/}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -z "$original" ] && return
|
||||||
|
fi
|
||||||
|
|
||||||
[ "$netdev" = "$original" ] && return
|
[ "$netdev" = "$original" ] && return
|
||||||
|
|
||||||
|
@ -109,7 +124,8 @@ preinit_config_board() {
|
||||||
json_select "network_device"
|
json_select "network_device"
|
||||||
json_select "$netdev"
|
json_select "$netdev"
|
||||||
json_get_vars path path
|
json_get_vars path path
|
||||||
[ -n "$path" ] && preinit_config_port "$netdev" "$path"
|
json_get_vars port port
|
||||||
|
[ -n "$path" ] && preinit_config_port "$netdev" "$path" "$port"
|
||||||
json_select ..
|
json_select ..
|
||||||
json_select ..
|
json_select ..
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in a new issue