-
Notifications
You must be signed in to change notification settings - Fork 129
NIC Driver Quick Start
The NetFPGA-10G team develops on the Fedora 14 (x86_64) platform. The instructions in Reference Operating System will help you to set up a Fedora 14 (x86_64) development system.
To build the driver, simply enter the driver's root directory (e.g. reference_nic/sw/host/host/driver/) and type the following:
make
At the end of the build process you'll find the driver (*.ko file) in the bin/ directory. If you're interested in the intermediate outputs of the build process, you can find them in the build/$(shell date +%Y%m%d_%H%M)/ directory, named according to the time of the build.
To clean up a make, do:
make clean
Which will erase everything in the bin/ and build/ directories.
The driver comes with some other nifty stuff that you can use to do things like read and write registers from userspace. This nifty stuff, however, depends on a generic netlink library that facilitates communication with the driver. Therefore to compile the driver's tools and utilities, we must first compile and install this library (Note: in latest releases the these tools are already installed).
sudo yum install libnl3-devel
Alternatively, you can build it yourself:
cd lib/libnl-3.0/
./configure
make
sudo make install
Once this finishes successfully the libraries have been compiled and installed into /usr/local/lib on your system. To use them you need to tell software where to find them by setting the LD_LIBRARY_PATH environment variable, which you can do with the following command:
export LD_LIBRARY_PATH=/usr/local/lib
Tip: To make this automatically set every time you open a new terminal you can add that line to your ~/.bashrc file.
Once you've done this, you should be able to compile not only the driver, but also all the other nifty stuff too with the following command executed in the driver's root directory:
make
Again, to clean things up, do:
make clean
To learn how to use these extra nifty things please see their separate documentation pages.
To use the driver, first make sure that you have programmed the NetFPGA-10G hardware properly and rebooted the computer. To make sure that your computer has detected the programmed hardware after a reboot, issue the following command:
lspci | grep Xilinx
At the time of writing, you should see something like the following:
03:00.0 RAM memory: Xilinx Corporation Device 4243 (rev 02)
If you don't see anything like this then you'll want to resolve this issue first before proceeding.
Now insert the driver into the kernel with the following command:
sudo insmod nf10.ko
Then check the output messages with this command:
dmesg
At the time of writing, you should see something similar to this:
[13393.029644] nf10_eth_driver: Found NetFPGA-10G device with vendor_id: 0x10ee, device_id: 0x4243
[13393.029665] nf10_eth_driver: pci_driver 0000:03:00.0: PCI INT A -> GSI 16 (level, low) -> IRQ 16
[13393.029676] nf10_eth_driver: pci_driver 0000:03:00.0: setting latency timer to 64
[13393.036086] nf10_eth_driver: NetFPGA-10G Ethernet Driver version 1.1.9 Loaded.
If everything looks ok, bring up the interfaces with the following commands:
sudo ifconfig nf0 up
sudo ifconfig nf1 up
sudo ifconfig nf2 up
sudo ifconfig nf3 up
Alternatively you can do this for short:
for i in 0 1 2 3; do sudo ifconfig nf$i up; done
Check that the interfaces are up by looking at the output of this command:
ifconfig
You should see all the interfaces displayed there. It should look something like this:
nf0 Link encap:Ethernet HWaddr 00:4E:46:30:00:00
inet6 addr: fe80::24e:46ff:fe30:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468 (468.0 b) TX bytes:468 (468.0 b)
nf1 Link encap:Ethernet HWaddr 00:4E:46:31:00:00
inet6 addr: fe80::24e:46ff:fe31:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468 (468.0 b) TX bytes:468 (468.0 b)
nf2 Link encap:Ethernet HWaddr 00:4E:46:32:00:00
inet6 addr: fe80::24e:46ff:fe32:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468 (468.0 b) TX bytes:468 (468.0 b)
nf3 Link encap:Ethernet HWaddr 00:4E:46:33:00:00
inet6 addr: fe80::24e:46ff:fe33:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:468 (468.0 b) TX bytes:468 (468.0 b)
For the above output, the interfaces were connected like this before they were brought up: nf0<->nf1, nf2<->nf3. This is why the interfaces have received exactly the number of packets that their neighbor has sent.
If all that worked OK then you're done, you've now got a 4 port 10G NIC up and running. Congratulations! You are now free to stand up and do a little jig in celebration.