Changing NICs (SOLVED)

OS: Devuan ASCII
kernel: 4.9.0-15-amd64

Recently I’ve swapped the mainboard in my file server. The old board was an Asus F1A75, the “new” board is the Asus F1A75-M. The former uses an RTL8111E NIC, while the new board has an Atheros NIC. The problem now is that on boot, the NIC doesn’t activate as the kernel reports it can’t find the device eth0 (the onboard NIC). I’ve manually updated the /etc/network/interfaces file to include an eth1 stance and I’m able to activate it with ifup eth1. So, clearly the kernel knows about the Atheros NIC and has the kernel module for it at the ready, but it’s apparently not loaded and/or correctly assigned. The main issue is mostly that it doesn’t survive a reboot, for some unknown reason.

So, any suggestions on fixing this or am I looking at a re-install on the new mainboard? (the system has a separate OS disk, which is an SSD so while not preferred nor ideal, is manageable time-wise)

TIA!

Can you check your loaded modules? lsmod

You may need to add the module to your /etc/modules-load.d so it loads at boot time.

Tried lsmod, but there’s nothing that indicates NIC driver to me. Several related to usb, disk access, raid, etc.

can you try some combo of lspci -v | grep -i net or lspci -v | grep -i eth

and list what you get?

Kernel can enumerate pci devices and read basic information about devices from the base address registers without having a driver loaded even.

Normally, udev would load the correct module based on /lib/modules/<version>/modules.alias .

If your atheros driver is not mentioned there, or if it’s built using a different way and doesn’t come with the kernel, it won’t be loaded using that mechanism and you’d have to load it another way. (e.g. deal with modules.conf or modules.load.d)


Once you setup the driver to be always loaded , you should also make sure the network interface has a correct name in your configs , ideally something that doesn’t randomly change on every boot: NetworkInterfaceNames - Debian Wiki

Do you use network-manager to manage the ip address / interface?

Maybe check with nmtui or nmcli whother the profile is matching to address (eth0) or MAC.
Then maybe give it the MAC address?

By which I mean, does the system see the device, but fail to configure it; or does the system not even recognise the PCI device as a NIC… then I read post 3/reply 2…

# lspci -v | grep -i net**
results in:
03:00.0 Ethernet controller: Qualcomm Atheros AR8151 v2.0 Gigabit Ethernet (rev c0) Subsystem: ASUSTeK Computer Inc. AR8151 v2.0 Gigabit Ethernet

It appears the modules.alias file has no reference to Atheros or AR8151. (yes, I did use lower case :stuck_out_tongue: )

For reference, the interfaces file contains the following:
allow-hotplug eth0 \ iface eth0 inet static \ address 192.168.1.10 \ netmask 255.255.255.0 \ network 192.168.1.0 \ gateway 192.168.1.1 \ iface eth1 inet dhcp
Formatting goes a bit haywire here, but it’s fine in the actual file.

For clarity, the NIC now uses eth1, whereas it should use eth0. Eth1 is now up, so the kernel knows about it and has a driver to use it. Or does it use a generic driver for stuff it has no dedicated driver for?

I installed the firmware-atheros package, but apparently that’s only for wireless NIC’s. I’m considering purging the Realtek network related packages, but that poses a risk of disabling the NIC outright.

Thanks so far for the help folks, much appreciated!

I dont think you need to purge any of the Realtek stuff. I am still trying to find the right combo of search terms to see if anyone else has similar issues.

lspci -vv | grep -i net

will give you Very Verbose, which might provide more detail.

Unfortunately, it didn’t add anything new. I’m inclined to just do a re-install. Although that may wait until the weekend, perhaps someone comes up with the magic oneliner :wink:

Sounds like what you want is:
rm /etc/udev/rules.d/*persist*

I had a look at that .rules file and it might very well be the root cause of the issue. I’ll investigate further and do some experimenting to see if it solves the problem.

That can wreck your udev rules if there are any other files with persist in the name.

I recommend to just edit the /etc/udev/rules.d/{somenumber}-persistent-net.rules and clean the existing rules or edit the NAME parameter of the network cards.

Right, that was an “easy” fix! I moved /etc/udev/rules.d/70-persitent-net.rules out of the way (just renamed it with .bak at the end), commented out the eth1 stance in /etc/network/interfaces and rebooted. And a short time later, I was able to log in, both via ssh as well as the Webmin interface, so obviously it works. A quick look in /etc/udev/rules.d revealed: nothing. Only the persistent-net file I had renamed. I’ll leave it for now, well under 512 bytes so very, very little space gained if removed :stuck_out_tongue:

Thanks to anyone who contributed, much appreciated!