Consider the output of a typical ip addr show
on Linux:
# ip addr show
1: lo: <LOOPBACK,UP,10000> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,NOTRAILERS,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet nnn.nnn.nnn.nnn/n brd nnn.nnn.nnn.nnn scope global eth1
inet6 nnnn::nnnn:nnnn:nnnn:nnnn/nn scope link
valid_lft forever preferred_lft forever
Look at the first field of the second line of each interface output: it says "link/loopback" for the loopback interface and "link/ether" for the physical NIC.
My question is: What OTHER values can I expect in this field? "link/bluetooth"? "link/ppp"? Is there an authoritative list for these link type strings?
I think you want to simply grab the source for iproute an look at the file ll_types.c.
Here is an incomplete list.
Take a look at the ARPHRD_* entries in /usr/include/net/if_arp.h. I can't find any documentation that explicitly says this is the canonical hardware list, but it's what libpcap uses to determine the data link type for an interface.