You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A USB-Ethernet class (CDC-ECM) device plugged into a Systemcore USB-A port gets 172.27.0.1/24 on usb0 correctly only if it's attached before Systemcore powers on.
If it's hot-plugged into an already-running Systemcore, or its link drops and reconnects for any reason mid-session, cdc_ether re-registers usb0 cleanly at the kernel level, but the static IP/admin-up is never reapplied — usb0 is left as <BROADCAST,MULTICAST>, state DOWN, no inet line, for the rest of that boot. Only a full Systemcore power cycle recovers it; replugging the device does not.
Is this intended behavior?
If not, then hopefully the findings below help
If it is, then do you have any guidance for how to handle hot-plug events for devices like this?
Environment
Systemcore OS: limelightosr-2027.0.0-alpha13
device: a CDC-ECM class USB-Ethernet device, ex. RP2350
Root cause (confirmed via SSH)
limelight_gadget.service (Type=simple, ordered after network-online.target, no Restart=) runs its gadget --systemcore binary exactly once at boot. Confirmed directly from the journal that it executes:
sudo /usr/sbin/ifconfig usb0 up 172.27.0.1 netmask 255.255.255.0
sudo /usr/sbin/ifconfig usb1 up 172.26.0.1 netmask 255.255.255.0
matched by interface name, disregarding which physical device holds that name. Nothing else re-triggers this step. If usb0/usb1 disappear and reappear after boot for any reason, the kernel re-registers them cleanly but the static IP is never reapplied.
Steps To Reproduce
Power on Systemcore with the device already attached → usb0 gets 172.27.0.1/24, up. Reliable across all 4 USB-A ports, with or without a second USB device attached (ex. CANivore).
With Systemcore still running, disconnect/reconnect the device's USB link (replug or A driver-level unbind/rebind).
dmesg shows a clean unregister/register of usb0 with the same MAC. ip addr afterward:
usb0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
No inet line. Persists until a full power cycle.
Attempted Fix
Added a udev rule that re-runs the same ifconfig commands on every usb0/usb1 add event (not just the first) resolves it:
# /etc/udev/rules.d/99-usb-gadget-hotplug-fix.rules
SUBSYSTEM=="net", ACTION=="add", KERNEL=="usb0", RUN+="/usr/sbin/ifconfig usb0 up 172.27.0.1 netmask 255.255.255.0"
SUBSYSTEM=="net", ACTION=="add", KERNEL=="usb1", RUN+="/usr/sbin/ifconfig usb1 up 172.26.0.1 netmask 255.255.255.0"
Verified across multiple simulated hot-plug cycles: without the rule, usb0 comes back unconfigured every time; with it, usb0 comes back UP with 172.27.0.1/24 and is reachable (ping succeeds) every time. It's additive-only (one new file, nothing existing modified) and idempotent with the boot-time step, so it doesn't change normal boot behavior.
Two small scripts are attached to apply/roll back this exact rule over SSH.
That gadget service isn't actually intended for devices plugged into the USB-A port, it's intended to set the addresses of the USB-C port (you can see these addresses match the addresses in the Systemcore Quick Start table). This device should never disappear, so hotplugging isn't really a thing to consider.
Which means this is also pointing out a related bug that the USB-C port does not work when this type of device is plugged into one of the USB-A ports at boot.
Seems like there are two related issues to solve here:
Ensure the gadget service is assigning the IP addresses to the correct device
Create a pathway for teams to use the type of device you're looking to use
Makes sense. The observed behavior didn't feel right.
I'm attempting to use a RP2350 over USB Ethernet. It's an odd use case. I can provide a minimal example repo if desired.
Activity
Kevin-OConnor commentedon Aug 31, 2026
That gadget service isn't actually intended for devices plugged into the USB-A port, it's intended to set the addresses of the USB-C port (you can see these addresses match the addresses in the Systemcore Quick Start table). This device should never disappear, so hotplugging isn't really a thing to consider.
Which means this is also pointing out a related bug that the USB-C port does not work when this type of device is plugged into one of the USB-A ports at boot.
Seems like there are two related issues to solve here:
j0n5m1th commentedon Aug 31, 2026
Makes sense. The observed behavior didn't feel right.
I'm attempting to use a RP2350 over USB Ethernet. It's an odd use case. I can provide a minimal example repo if desired.
auscompgeek commentedon Sep 1, 2026
Hopefully systemd should be able to assign a network interface name so that kernel ordering isn't a concern. I presume they can be uniquely matched by systemd?