If your Intel ethernet adapter is experiencing odd connectivity problems you can update the FreeBSD kernel module for your product to avoid some common problems. Generally this only applies to 1000Mbit/s or faster Intel ethernet adapters where the code is constantly being updated by the developers. In this example the ethernet card is an Intel Pro/1000 GT requiring the if_em FreeBSD kernel module. First lets look at the version currently installed with this command.
# dmesg | grep em0
em0: <Intel(R) PRO/1000 Network Connection 6.9.6> port 0xc010-0xc017 mem 0xf0000000-0xf001ffff irq 11 at device 3.0 on pci0
em0: [FILTER]
em0: Ethernet address: 08:00:27:a3:00:ab
As you can see the version is 6.9.6. The latest available version, for FreeBSD 7.x, is 6.9.12. Your version of FreeBSD will also depend upon which source code you must compile. You can find these files here:
FreeBSD 7.x - http://downloadmirror.intel.com/17509/eng/em-6.9.12.tar.gz
FreeBSD 5.x - http://downloadmirror.intel.com/17509/eng/em-5.1.5.tar.gz
FreeBSD 4.11 - http://downloadmirror.intel.com/17509/eng/em-4.1.6.tar.gz
FreeBSD 4.0-4.4 - http://downloadmirror.intel.com/17509/eng/em-1.7.35.a.tar.gz
In this example we will be compiling the FreeBSD 7.x if_em module version 6.9.12. If you are using an earlier version of FreeBSD you will need to adjust these directions accordingly. Now fetch, extract and compile the kernel module with the following commands.
# cd /usr/src/
# fetch fetch http://downloadmirror.intel.com/17509/eng/em-6.9.12.tar.gz
# tar xvf em-6.9.12.tar.gz
# cd ./em-6.9.12/src/
# make
If there are no major errors compiling after the "make" command then we can proceed with installing with the "make install" command. This will place files "if_em.ko" and "if_em.ko.symbols" into the /boot/kernel/ directory. We can now install the module and add it to the startup configuration with the following commands.
# make install
# echo if_em_load="YES" >> /boot/loader.conf
Reboot your server with the "shutdown -r now" command and wait for it to come online. After the reboot check for the new module using the command "dmesg | grep em0" like the following.
# dmesg | grep em0
em0: <Intel(R) PRO/1000 Network Connection 6.9.12> port 0xc010-0xc017 mem 0xf0000000-0xf001ffff irq 11 at device 3.0 on pci0
em0: [FILTER]
em0: Ethernet address: 08:00:27:a3:00:ab