Network Interface card configuration

Hello. I added Intel PRO/1000 PT Quad Port LP Svr Adapter to my Jetson TX1. After boot, when I typed ifconfig it showed me eth0 (built-in) and eth1-eth4 (from Intel Card). I havn’t install any driver for that adapter. Tried to plug ethernet device (camera) for my NIC, but it is not detected. LED’s light up shows 1000M connection, but Jetson can’t find the camera. I tried to plug camera to built-in ethernet, but surprisingly - it’s not detected either. Than I powered off Jetson and unplugged PCIe card. In this configuration everything works fine. What did I do wrong? I attach ifconfig logs.

When no NIC plugged:

eth0 Link encap:Ethernet HWaddr 00:04:4b:5a:d0:39
inet addr:169.254.150.1 Bcast:169.254.255.255 Mask:255.255.0.0
inet6 addr: fe80::204:4bff:fe5a:d039/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:8440 (8.4 KB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:220 errors:0 dropped:0 overruns:0 frame:0
TX packets:220 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:16545 (16.5 KB) TX bytes:16545 (16.5 KB)

wlan0 Link encap:Ethernet HWaddr 00:04:4b:5a:d0:37
inet addr:192.168.1.8 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::bc1b:6eaa:d83:c43a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:88 errors:0 dropped:0 overruns:0 frame:0
TX packets:131 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:8465 (8.4 KB) TX bytes:16187 (16.1 KB)

When NIC plugged:

eth0 Link encap:Ethernet HWaddr a0:36:9f:6c:37:2d
inet addr:169.254.150.1 Bcast:169.254.255.255 Mask:255.255.0.0
inet6 addr: fe80::a236:9fff:fe6c:372d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:21701 (21.7 KB)
Interrupt:112 Memory:13000000-13020000

eth1 Link encap:Ethernet HWaddr a0:36:9f:6c:37:2c
inet addr:169.254.150.2 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:112 Memory:13060000-13080000

eth2 Link encap:Ethernet HWaddr a0:36:9f:6c:37:2f
inet addr:169.254.150.3 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:112 Memory:13100000-13120000

eth3 Link encap:Ethernet HWaddr a0:36:9f:6c:37:2e
inet addr:169.254.150.4 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:112 Memory:13160000-13180000

eth4 Link encap:Ethernet HWaddr 00:04:4b:5a:d0:39
inet addr:169.254.150.5 Bcast:169.254.255.255 Mask:255.255.0.0
UP BROADCAST MULTICAST MTU:7750 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:400 errors:0 dropped:0 overruns:0 frame:0
TX packets:400 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:30769 (30.7 KB) TX bytes:30769 (30.7 KB)

wlan0 Link encap:Ethernet HWaddr 00:04:4b:5a:d0:37
inet addr:192.168.1.8 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::bc1b:6eaa:d83:c43a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:307 errors:0 dropped:0 overruns:0 frame:0
TX packets:402 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:26815 (26.8 KB) TX bytes:46288 (46.2 KB)

What does that “interrput” means? Is something incorrectly configured?

Every computer which does more than one task (a.k.a., “multitasking”) has to have a means to tell the CPU that a driver is interested in running. An interrupt tells the CPU about this, and the scheduler puts the interrupt note in its list of things to do. IRQs have numeric designations. If you were to profile or look for statistics on the driver, then you’d basically be looking for events associated with the numeric IRQ. It isn’t an error, it is just a detail should you wish to do more advanced examination of the driver.

As an example, failing to acquire run time for a driver might result in trying to find out if one IRQ is hogging the core through examination of “/proc/interrupts”. You can see a summary of interrupts at any moment from “cat /proc/interrupts” (this changes constantly). The right-most column is basically a name of a controller (in the case of multiple controllers of the same type it would be the base address, a “.”, and the name of the generic controller, e.g., “3530000.xhci” would be for a Tegra USB3 controller). Each CPU core has a column. You will find CPU0 handles most IRQs because it is the core wired to most hardware I/O (if a core is not wired to be able to talk to some physical wire, then it can’t handle the IRQ for that communications…any core can handle a software task, e.g., adding two numbers).

I see. I am trying to install drivers from: https://downloadcenter.intel.com/product/50496/Intel-PRO-1000-PT-Quad-Port-Server-Adapter. I found a problem when compiling drivers.

~sudo make install
Makefile:46: *** Kernel header files not in any of the expected locations.
Makefile:47: *** Install the appropriate kernel development package, e.g.
Makefile:48: *** kernel-devel, for building kernel modules and try again.  Stop.

Do you know how can I fix this?

EDIT: When I downloaded some kernel sources and apt-get linux-headers:

Makefile:83: *** Linux kernel source not configured - missing version header file.  Stop.

When I type “ls” in "/usr/src/ I got:

hardware  kernel  l4t-tx1-sources-28-2-ga  linux-headers-4.4.0-38  tensorrt  tx1_sources.tbz2

If you are building on the host PC (cross-compiling), then you can’t do this. “make install” is only valid if you build on the Jetson itself. From a host PC this is essentially trying to install a Jetson driver on the host…it won’t work.

I have not looked, but I would have to wonder if perhaps the source code is already present on the existing kernel and simply in need of being configured…but perhaps not since it is a quad port card. The Pro 1000 base driver does already exist without outside source.

I am going to point you to some other information first:
https://devtalk.nvidia.com/default/topic/1042851/jetson-tx1/how-can-build-install-test-the-spidev-module-at-tx1-r28-1-/post/5290074/#5290074

Realize that a missing driver does not mean the driver is not supported. Quite often (and probably true in this case) it simply means the driver has to be built, and not that someone else has to provide the source. Look at the above URL, get the existing source via the source_sync.sh script (mentioned in a URL that is within the first URL), and use that. The “/usr/src/” tends to be more for a desktop PC. Technically you could use that on a Jetson, but a Jetson has some requirements that differs from a PC (such as not having a BIOS and having U-Boot instead of GRUB) and you are better off just using source_sync.sh somewhere like “/usr/local/src/”. Those other files are not “wrong”, but you are attempting to build an outside driver out of tree, and though it might take more time, you are better off simplifying and starting with actual kernel source for the Jetson.

Save a copy of the existing system’s “/proc/config.gz” somewhere as a permanent reference config. Save a copy of the “uname -r” output as well. Then read the above URLs. Try to build without using Intel’s external source code…look for the driver with “make nconfig” in the existing kernel (such as a search for “e1000”).

I have built Kernel again, using: https://www.jetsonhacks.com/2018/04/21/build-kernel-and-modules-nvidia-jetson-tx1/. I found an option about “Intel PRO/1000 Giga Ethernet” drivers and checked that option.

But even with that, problem is still the same. No ethernet port is working correctly. When I type “sudo ethtool eth0” for e.g. I got something like this:

Settings for eth0:
        Supported ports: [ TP ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: No
        Advertised auto-negotiation: Yes
        Speed: Unknown!
        Duplex: Unknown! (255)
        Port: Twisted Pair
        PHYAD: 1
        Transceiver: internal
        Auto-negotiation: on
        MDI-X: Unknown (auto)
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: no

Even when link is connected. When Intel NIC is unplugged I got:

Settings for eth0:
        Supported ports: [ MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Link partner advertised link modes:  100baseT/Full
                                             1000baseT/Full
        Link partner advertised pause frame use: No
        Link partner advertised auto-negotiation: Yes
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 32
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: pumbg
        Wake-on: g
        Current message level: 0x00007fff (32767)
                               drv probe link timer ifdown ifup rx_err tx_err tx                                                                                                             _queued intr tx_done rx_status pktdata hw wol
        Link detected: yes

What else can be a problem? I found something looking similar in: https://docs.oracle.com/cd/E56388_01/html/E56397/gnzoi.html
But I have no idea which parameters should I add to extlinux.conf (is it grub.conf for Jetson?)

EDIT:
I discovered that when I erase all my previous configs from /etc/network/interface and put:

“allow-hotplug eth0
iface eth0 inet dhcp”

And than restart networking, it works, until I reconnect cable to another port. I am really confused about that. May it be something with IP addresses settings? It’s worth noting that NIC has 4 ports, but every time when restart Jetson, the next upper port is not recognizing anything (first time I plugged cable for highest port and it was “thinking”, after restart it doesn’t react, but “thinking port” was changed to next one and so on)

For kernel config, did you start with your existing config in “/proc/config.gz”? What is your current “uname -r”, and are all of your modules actually present at “/lib/modules/$(uname -r)/”? Did you place a new module there, or did you update the actual kernel Image file?

Normally “eth0” is the integrated NIC. What do you see from “ifconfig” (it would be good to see if there are any conflicting settings and if there are errors, drops, overruns, or collisions on all interfaces.

How are the integrated and PCIe cables connected…through a router, or just a switch?

My current “uname -r” is “4.4.38”. I didn’t build it as module, I used the option which are “built-in” into kernel. I updated kernel Image file, as shown in mentioned tutorial.

The current “ifconfig” is:

eth0      Link encap:Ethernet  HWaddr a0:36:9f:6c:37:2d
          inet addr:169.254.150.10  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:112 Memory:13000000-13020000

eth1      Link encap:Ethernet  HWaddr a0:36:9f:6c:37:2c
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:112 Memory:13060000-13080000

eth2      Link encap:Ethernet  HWaddr a0:36:9f:6c:37:2f
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:112 Memory:13100000-13120000

eth3      Link encap:Ethernet  HWaddr a0:36:9f:6c:37:2e
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:112 Memory:13160000-13180000

eth4      Link encap:Ethernet  HWaddr 00:04:4b:5a:d0:39
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:286 errors:0 dropped:0 overruns:0 frame:0
          TX packets:286 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:20697 (20.6 KB)  TX bytes:20697 (20.6 KB)

wlan0     Link encap:Ethernet  HWaddr 00:04:4b:5a:d0:37
          inet addr:192.168.1.8  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::bc1b:6eaa:d83:c43a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6345 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3352 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:9310763 (9.3 MB)  TX bytes:231443 (231.4 KB)

with interface file:

# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto eth0
iface eth0 inet static
      address 169.254.150.10
      netmask 255.255.0.0

I have to use “sudo /etc/init.d/networking restart” everytime I plug cable to port 1 (first from Intel NIC), in other case system can’t connect camera. Didn’t try other ports.

About cables: no cable connected to integrated port, one ethernet connected to NIC (port 1). Will be at least two more ethernet cables connected to NIC

If your config was otherwise the same, then an integrated feature change may not be an issue to existing modules. On the other hand, if you change the base content of the Image file, then it is usually recommended to change the “CONFIG_LOCALVERSION” and rebuild all modules due to the possibility that something changing within the kernel itself causing an incompatibility with the existing modules (if it works that’s ok, but it is much better to just build a module and copy the module for a simple case…there is less to go wrong…a simple file copy of a module won’t leave the system unbootable, a bad Image can leave the system unbootable).

The “ifconfig” looks valid and doing as the setup shows without error.

Is “port 1” from the Intel NIC connected to a router? I am guessing this is “eth1” and not “eth0”…can you confirm? Is the camera itself configured to a static address, and if so, what address?

WHen NIC is not connected to boar, eth0 is USB integrated ethernet port. But when I plug NIC, eth0 is one of the NIC ports, while integrated one change to eth4 (you can see about HWaddr). This means that in connection showed in photo, “port 1” is eth0. At least ethtool shows anything linked to that port (rest are not linked). I have no router in my meaning. I have internet connection via WiFI, integrated ethernet empty, NIC ethernets directly to cameras. No other devices. No switches, no routers. Here is photo:

At this moment camera is configurated to static IP: 169.254.38.227 if I am right

I don’t know the details of the camera itself. Is the camera powered over ethernet, or is power separate? I am guessing probably separate. Does the camera retain its network setup information after shutting down and restarting? Assuming the camera retains setup, is there a difference if the camera is connected but unpowered, and then powered up? Basically I’m wondering if being connected during power up changes things. The MAC address visibility might be at issue, and possibly it isn’t the NIC’s side at issue.

Do you know if the camera uses TCP/IP? Some cameras may choose UDP.

What is the content of the “route” command prior to a network restart when the camera does not show up, and what is the content of the “route” command after a network restart when the camera is recognized?

EDIT: Forgot to add…what is the output from this before and after the network reset with the camera connected?

sudo arp -v