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 --- config/udev/network-hotplug-rename | 9 ++++++++ src/initscripts/networking/functions.network | 24 +++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/config/udev/network-hotplug-rename b/config/udev/network-hotplug-rename index 73e811e94..7c81bdb78 100644 --- a/config/udev/network-hotplug-rename +++ b/config/udev/network-hotplug-rename @@ -19,6 +19,8 @@ # # ###############################################################################
+. /etc/rc.d/init.d/networking/functions.network + # Check if all appropriate variables are set [ -n "${INTERFACE}" ] || exit 2
@@ -44,6 +46,13 @@ if [ ! -r "/var/ipfire/ethernet/settings" ]; then exit 1 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 eval $(/usr/local/bin/readhash /var/ipfire/ethernet/settings)
diff --git a/src/initscripts/networking/functions.network b/src/initscripts/networking/functions.network index 9698424fd..e8f6c28d8 100644 --- a/src/initscripts/networking/functions.network +++ b/src/initscripts/networking/functions.network @@ -179,7 +179,7 @@ qmi_find_device() { local path for path in /dev/cdc-*; do if [ -c "${path}" ]; then - _intf="$(qmicli --device="${path}" --device-open-proxy --get-wwan-iface)" + _intf="$(qmi_find_interface "${path}")"
# Check if the interface matches if [ "${intf}" = "${_intf}" ]; then @@ -193,6 +193,12 @@ qmi_find_device() { return 1 }
+qmi_find_interface() { + local device="${1}" + + qmicli --device="${device}" --device-open-proxy --get-wwan-iface +} + qmi_enable_rawip_mode() { local intf="${1}"
@@ -259,3 +265,19 @@ qmi_reset() { qmicli --device="${device}" --device-open-proxy \ --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}" +}