iDRAC Setting
Graphical / Web
Within the webUI of the iDRAC itself, within the iDRAC Settings, is the option to enable/disable and configure the virtual device. This screenshot shows the iDRAC9 as found in the R740xd chassis:
Using racadm
The same settings can be configured like so:
# Enable
racadm set idrac.os-bmc.AdminState Enabled
racadm set idrac.os-bmc.OSIpAddress <Host OS IP address>
# Disable
racadm set idrac.os-bmc.AdminState Disabled
Changing the setting may take 10 or more seconds (according to Dell’s docs) to reflect within the OS itself.
Device Attributes
dmesg Output
When enabled, the kernel logging (dmesg) will show it on bootup:
[ 3.231917] usb 1-14.3: Product: iDRAC Virtual NIC USB Device
[ 3.280561] usb 1-14.3: Manufacturer: Dell(TM)
ip Output
When examining with “ip a” it will show up like so:
6: idrac: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d0:94:66:13:fb:a5 brd ff:ff:ff:ff:ff:ff
lsusb Output
Following on the above, we can see the matching output of the device in lsusb:
# lsusb
Bus 001 Device 004: ID 413c:a102 Dell Computer Corp.
The colon separated value is the vendor:product ID from Dell which will show up in udev below.
udev Output
First, find the path to the device itself – it’s usually easiest to look at the symlink:
# ls -ld /sys/class/net/idrac
lrwxrwxrwx 1 root root 0 Jan 14 10:22 /sys/class/net/idrac ->
../../devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14.3/1-14.3:1.0/net/idrac
In the above, the device path is “1-14.3″ which you will note matches the dmesg output above from the kernel. Given the path, we can now examine it’s attributes as udev sees them:
# udevadm info -a -p /sys/bus/usb/devices/1-14.3
looking at device ‘/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14.3’:
KERNEL==”1-14.3″
SUBSYSTEM==”usb”
DRIVER==”usb” ATTR{authorized}==”1″
ATTR{avoid_reset_quirk}==”0″
ATTR{bConfigurationValue}==”1″
ATTR{bDeviceClass}==”02″
ATTR{bDeviceProtocol}==”00″
ATTR{bDeviceSubClass}==”00″
ATTR{bMaxPacketSize0}==”64″
ATTR{bMaxPower}==”2mA”
ATTR{bNumConfigurations}==”2″
ATTR{bNumInterfaces}==” 2″
ATTR{bcdDevice}==”0401″
ATTR{bmAttributes}==”c0″
ATTR{busnum}==”1″
ATTR{configuration}==””
ATTR{devnum}==”4″
ATTR{devpath}==”14.3″
ATTR{idProduct}==”a102″
ATTR{idVendor}==”413c”
ATTR{ltm_capable}==”no”
ATTR{manufacturer}==”Dell(TM)”
ATTR{maxchild}==”0″
ATTR{product}==”iDRAC Virtual NIC USB Device”
ATTR{quirks}==”0x0″
ATTR{removable}==”fixed”
ATTR{speed}==”480″
ATTR{urbnum}==”15″
Given this information, we can now write intelligent udev rules to control the device without having to disable it in iDRAC firmware completely.
Hiding the Device
Using udev, when the device is detected we can instruct the kernel to set it’s Authorized state to 0 (unauthorized/disabled) to trigger the kernel to simply make it disappear from the host OS userspace layer:
udev Rule
Save this as shown to /etc/udev/rules.d/01-idrac-usbnet.rules – it will trigger before the Dell OMSA software which has it’s own udev rules later:
# cat /etc/udev/rules.d/01-idrac-usbnet.rules
SUBSYSTEM!=”usb”, GOTO=”idrac_end”
ACTION==”remove”, GOTO=”idrac_end”
SUBSYSTEMS==”usb”, ACTION==”add”,
\ ATTR{product}==”iDRAC Virtual NIC USB Device”,
\ ATTR{idVendor}==”413c”, ATTR{idProduct}==”a102″,
\ ATTR{authorized}=”0″
LABEL=”idrac_end”
Test the Rule
# udevadm test /sys/bus/usb/devices/1-14.3
…
Created link configuration context.
Reading rules file: /etc/udev/rules.d/01-idrac-usbnet.rules
…
ATTR ‘/sys/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14.3/authorized’
writing ‘0’ /etc/udev/rules.d/01-idrac-usbnet.rules:8
…
Activate the Rule
The rule to hide/unhide the device can be activated without a reboot by telling udev to process an ‘add’ event on that specific device:
# udevadm -d trigger -c add -t subsystems
/sys/devices/pci0000:00/0000:00:14.0/usb1/1-14/1-14.3
calling: trigger
# ls -l /sys/class/net/idrac
ls: cannot access ‘/sys/class/net/idrac’: No such file or directory
# ip a | grep idrac
Using the Device
This section is intentionally incomplete. At this time we do not have a functional use for the USB NIC, however the Hardware Engineering team has plans for the future to try and leverage it. It is requested the iDRAC firmware be left Enabled for this feature, and if it need to be hidden use the udev rules.
The device is registered with the Linux kernel as a networking device; within the OS, use the proper networking configuration techniques which match the specific vendor networking design (NetworkManager, ifupdown, netplan, systemd-networkd, etc.) as appropriate.
References
-
- https://www.dell.com/support/article/us/en/04/sln311058/os-to-idrac-pass-through-using-idrac7?lang=en
- https://www.dell.com/support/manuals/us/en/04/idrac8-with-lc-v2.05.05.05/idrac8_2.05.05.05_ug-v1/enabling-or-disabling-os-to-idrac-pass-through?guid=guid-e44413c7-969c-4c76-91f2-f6d9076a57b7&lang=en-us