23

I am searching for an explanation what exactly the output of the commands ip link and ip addr means on a linux box.

# ip link
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:a1:ba:51:4c:11 brd ff:ff:ff:ff:ff:ff
4: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 00:a1:ba:51:4c:12 brd ff:ff:ff:ff:ff:ff

What exactly are the LOWER_UP, NO-CARRIER and other flags? I have found a reference at http://download.vikis.lt/doc/iproute-doc-2.6.32/ip-cref.ps but it does not contain complete information and man pages are not detailed enough.

2
  • Looks like swlx01.hs-esslingen.de is down, so the linked reference is not reachable :-( Jan 14 '20 at 19:07
  • 1
    The broken link is updated. Nevertheless the man page referenced in the answer is better source of information. Jan 14 '20 at 22:26
27

Those are interface's flags. They are documented in the netdevice(7) man-page. Below is the relevant part (reordered alphabetically):

IFF_ALLMULTI      Receive all multicast packets.
IFF_AUTOMEDIA     Auto media selection active.
IFF_BROADCAST     Valid broadcast address set.
IFF_DEBUG         Internal debugging flag.
IFF_DORMANT       Driver signals dormant (since Linux 2.6.17)
IFF_DYNAMIC       The addresses are lost when the interface goes down.
IFF_ECHO          Echo sent packets (since Linux 2.6.25)
IFF_LOOPBACK      Interface is a loopback interface.
IFF_LOWER_UP      Driver signals L1 up (since Linux 2.6.17)
IFF_MASTER        Master of a load balancing bundle.
IFF_MULTICAST     Supports multicast
IFF_NOARP         No arp protocol, L2 destination address not set.
IFF_NOTRAILERS    Avoid use of trailers.
IFF_POINTOPOINT   Interface is a point-to-point link.
IFF_PORTSEL       Is able to select media type via ifmap.
IFF_PROMISC       Interface is in promiscuous mode. 
IFF_RUNNING       Resources allocated.
IFF_SLAVE         Slave of a load balancing bundle.
IFF_UP            Interface is running.

So, LOWER_UP means there is a signal at the physical level (i.e. something active is plugged in the network interface). NO-CARRIER, is the exact opposite: no signal is detected at the physical level.

7
  • 3
    Interesting how NO-CARRIER is not documented in netdevice(7)... Nov 20 '18 at 14:28
  • 3
    This is because NO-CARRIER is not an actual flag that you can get or set. It is defined as a combination of IFF_UP and not IFF_RUNNING.
    – xhienne
    Dec 28 '18 at 17:06
  • Hm, most NIC interfaces under Linux never seem to reach UP and stay at LOWER_UP it seems. And this doesn't seem to indicate a real problem. May 29 at 20:13
  • 1
    @xhienne, no, you didn't. But the short description you quoted can be read that way. I mean since IFF_UP is described as Interface is running this can be understood as: since I don't see it on my interface -> it isn't running, so this is bad?!? But it is running, because traffic goes over it ... So, it would interesting to get more information what it really means since (at least some) drivers don't set it even when the interface is up and running. May 30 at 20:31
  • 1
    @maxschlepzig Agreed my answer may seem too concise but I'll hardly do better (most descriptions seem self-explanatory to me and I don't have the knowledge to write more on them). I think what you are missing is that most of the flags are configuration flags, not a diagnostic reported by the lower layers like the hardware. In particular, IFF_UP is like your car engine: it is either turned on or off. UP just means you did ifconfig ... up or ip link ... up and if it's reported as !UP, your interface won't work but it's not necessarily a problem, it depends on what you intend it to be.
    – xhienne
    May 31 at 0:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.