diff --git a/kvmapp/system/init.d/S03usbdev b/kvmapp/system/init.d/S03usbdev index e4a2c83..3e4c318 100755 --- a/kvmapp/system/init.d/S03usbdev +++ b/kvmapp/system/init.d/S03usbdev @@ -39,15 +39,30 @@ start_usb_dev(){ mkdir configs/c.1/strings/0x409 echo "NanoKVM" > configs/c.1/strings/0x409/configuration + # Deterministic gadget MACs from the chip UID so the host-side RNDIS/NCM + # interface keeps a STABLE MAC across re-enumeration/reboot. Without this + # the kernel assigns a random dev_addr/host_addr on every bind, so the + # attached PC sees a brand-new network adapter (and MAC) each time. + usb_uid=$(sha512sum /sys/class/cvi-base/base_uid | head -c 4) + if [ -n "$usb_uid" ] + then + usb_dev_mac="48:da:35:6e:${usb_uid%??}:${usb_uid#??}" + usb_host_mac="48:da:35:6d:${usb_uid%??}:${usb_uid#??}" + fi + if [ -e /boot/usb.ncm ] then mkdir functions/ncm.usb0 + [ -n "$usb_dev_mac" ] && echo "$usb_dev_mac" > functions/ncm.usb0/dev_addr + [ -n "$usb_host_mac" ] && echo "$usb_host_mac" > functions/ncm.usb0/host_addr echo WINNCM > functions/ncm.usb0/os_desc/interface.ncm/compatible_id ln -s functions/ncm.usb0 configs/c.1/ else if [ -e /boot/usb.rndis0 ] then mkdir functions/rndis.usb0 + [ -n "$usb_dev_mac" ] && echo "$usb_dev_mac" > functions/rndis.usb0/dev_addr + [ -n "$usb_host_mac" ] && echo "$usb_host_mac" > functions/rndis.usb0/host_addr echo e0 > functions/rndis.usb0/class echo 01 > functions/rndis.usb0/subclass echo 03 > functions/rndis.usb0/protocol