mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
network: Assign "static" MAC addresses to QMI interfaces
This is really badly hacky, but I do not know a better way to solve this with our existing "setup" program which would be a nightmare to extend. So we are using the device number to generate a static MAC address which can then be used as usual. I doubt many people will have more than one device. Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
committed by
Peter Müller
parent
8d09028b69
commit
580c249a5b
@@ -19,6 +19,8 @@
|
|||||||
# #
|
# #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
. /etc/rc.d/init.d/networking/functions.network
|
||||||
|
|
||||||
# Check if all appropriate variables are set
|
# Check if all appropriate variables are set
|
||||||
[ -n "${INTERFACE}" ] || exit 2
|
[ -n "${INTERFACE}" ] || exit 2
|
||||||
|
|
||||||
@@ -44,6 +46,13 @@ if [ ! -r "/var/ipfire/ethernet/settings" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Change MAC addresses of QMI interface
|
||||||
|
if [ -d "/sys/class/net/${INTERFACE}/qmi" ]; then
|
||||||
|
if ! qmi_assign_address "${INTERFACE}"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Read network settings
|
# Read network settings
|
||||||
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
|
eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ qmi_find_device() {
|
|||||||
local path
|
local path
|
||||||
for path in /dev/cdc-*; do
|
for path in /dev/cdc-*; do
|
||||||
if [ -c "${path}" ]; then
|
if [ -c "${path}" ]; then
|
||||||
_intf="$(qmicli --device="${path}" --device-open-proxy --get-wwan-iface)"
|
_intf="$(qmi_find_interface "${path}")"
|
||||||
|
|
||||||
# Check if the interface matches
|
# Check if the interface matches
|
||||||
if [ "${intf}" = "${_intf}" ]; then
|
if [ "${intf}" = "${_intf}" ]; then
|
||||||
@@ -193,6 +193,12 @@ qmi_find_device() {
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qmi_find_interface() {
|
||||||
|
local device="${1}"
|
||||||
|
|
||||||
|
qmicli --device="${device}" --device-open-proxy --get-wwan-iface
|
||||||
|
}
|
||||||
|
|
||||||
qmi_enable_rawip_mode() {
|
qmi_enable_rawip_mode() {
|
||||||
local intf="${1}"
|
local intf="${1}"
|
||||||
|
|
||||||
@@ -259,3 +265,19 @@ qmi_reset() {
|
|||||||
qmicli --device="${device}" --device-open-proxy \
|
qmicli --device="${device}" --device-open-proxy \
|
||||||
--wds-reset
|
--wds-reset
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Assigns a "static" MAC address
|
||||||
|
qmi_assign_address() {
|
||||||
|
local intf="${1}"
|
||||||
|
|
||||||
|
# Find the device
|
||||||
|
local device="$(qmi_find_device "${intf}")"
|
||||||
|
|
||||||
|
local address
|
||||||
|
|
||||||
|
# Generate a "random" MAC address using the device number
|
||||||
|
printf -v address "02:ff:ff:ff:ff:%02x" "${device:12}"
|
||||||
|
|
||||||
|
# Change the MAC address
|
||||||
|
ip link set "${intf}" address "${address}"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user