struct net_device {
...
unsigned short type;
...
}
这个字段标识了设备所述的类型:Ethernet等。
定义在 include/uapi/linux/if_arp.h中:
28 /* ARP protocol HARDWARE identifiers. */
29 #define ARPHRD_NETROM 0 /* from KA9Q: NET/ROM pseudo */
30 #define ARPHRD_ETHER 1 /* Ethernet 10Mbps */
31 #define ARPHRD_EETHER 2 /* Experimental Ethernet */
32 #define ARPHRD_AX25 3 /* AX.25 Level 2 */
33 #define ARPHRD_PRONET 4 /* PROnet token ring */
34 #define ARPHRD_CHAOS 5 /* Chaosnet */
35 #define ARPHRD_IEEE802 6 /* IEEE 802.2 Ethernet/TR/TB */
36 #define ARPHRD_ARCNET 7 /* ARCnet */
37 #define ARPHRD_APPLETLK 8 /* APPLEtalk */
38 #define ARPHRD_DLCI 15 /* Frame Relay DLCI */
39 #define ARPHRD_ATM 19 /* ATM */
40 #define ARPHRD_METRICOM 23 /* Metricom STRIP (new IANA id) */
41 #define ARPHRD_IEEE1394 24 /* IEEE 1394 IPv4 - RFC 2734 */
42 #define ARPHRD_EUI64 27 /* EUI-64 */
43 #define ARPHRD_INFINIBAND 32 /* InfiniBand */
44
45 /* Dummy types for non ARP hardware */
46 #define ARPHRD_SLIP 256
47 #define ARPHRD_CSLIP 257
48 #define ARPHRD_SLIP6 258
49 #define ARPHRD_CSLIP6 259
50 #define ARPHRD_RSRVD 260 /* Notional KISS type */
51 #define ARPHRD_ADAPT 264
52 #define ARPHRD_ROSE 270
53 #define ARPHRD_X25 271 /* CCITT X.25 */
54 #define ARPHRD_HWX25 272 /* Boards with X.25 in firmware */
55 #define ARPHRD_CAN 280 /* Controller Area Network */
56 #define ARPHRD_PPP 512
57 #define ARPHRD_CISCO 513 /* Cisco HDLC */
58 #define ARPHRD_HDLC ARPHRD_CISCO
59 #define ARPHRD_LAPB 516 /* LAPB */
60 #define ARPHRD_DDCMP 517 /* Digital's DDCMP protocol */
61 #define ARPHRD_RAWHDLC 518 /* Raw HDLC */
62
63 #define ARPHRD_TUNNEL 768 /* IPIP tunnel */
64 #define ARPHRD_TUNNEL6 769 /* IP6IP6 tunnel */
65 #define ARPHRD_FRAD 770 /* Frame Relay Access Device */
66 #define ARPHRD_SKIP 771 /* SKIP vif */
67 #define ARPHRD_LOOPBACK 772 /* Loopback device */
68 #define ARPHRD_LOCALTLK 773 /* Localtalk device */
69 #define ARPHRD_FDDI 774 /* Fiber Distributed Data Interface */
70 #define ARPHRD_BIF 775 /* AP1000 BIF */
71 #define ARPHRD_SIT 776 /* sit0 device - IPv6-in-IPv4 */
72 #define ARPHRD_IPDDP 777 /* IP over DDP tunneller */
73 #define ARPHRD_IPGRE 778 /* GRE over IP */
74 #define ARPHRD_PIMREG 779 /* PIMSM register interface */
75 #define ARPHRD_HIPPI 780 /* High Performance Parallel Interface */
76 #define ARPHRD_ASH 781 /* Nexus 64Mbps Ash */
77 #define ARPHRD_ECONET 782 /* Acorn Econet */
78 #define ARPHRD_IRDA 783 /* Linux-IrDA */
79 /* ARP works differently on different FC media .. so */
80 #define ARPHRD_FCPP 784 /* Point to point fibrechannel */
81 #define ARPHRD_FCAL 785 /* Fibrechannel arbitrated loop */
82 #define ARPHRD_FCPL 786 /* Fibrechannel public loop */
83 #define ARPHRD_FCFABRIC 787 /* Fibrechannel fabric */
84 /* 787->799 reserved for fibrechannel media types */
85 #define ARPHRD_IEEE802_TR 800 /* Magic type ident for TR */
86 #define ARPHRD_IEEE80211 801 /* IEEE 802.11 */
87 #define ARPHRD_IEEE80211_PRISM 802 /* IEEE 802.11 + Prism2 header */
88 #define ARPHRD_IEEE80211_RADIOTAP 803 /* IEEE 802.11 + radiotap header */
89 #define ARPHRD_IEEE802154 804
90 #define ARPHRD_IEEE802154_MONITOR 805 /* IEEE 802.15.4 network monitor */
91
92 #define ARPHRD_PHONET 820 /* PhoNet media type */
93 #define ARPHRD_PHONET_PIPE 821 /* PhoNet pipe header */
94 #define ARPHRD_CAIF 822 /* CAIF media type */
95 #define ARPHRD_IP6GRE 823 /* GRE over IPv6 */
96 #define ARPHRD_NETLINK 824 /* Netlink header */
97
98 #define ARPHRD_VOID 0xFFFF /* Void type, nothing is known */
99 #define ARPHRD_NONE 0xFFFE /* zero header length */
我本来希望通过这个字段来识别我的网卡,如lo、eth0、eth1、virbr0等。
没想到 lo 是 772;eth0 和 eth1 是 1 也没毛病;至于 virbr0 也是 1 就是我不清楚的了;更意外的是还有一个:virbr0-nic 也是 1。
只能想其他办法来区分网卡了。
我希望找到真实的,可以收发数据的网卡转发,因为我不确定,网卡有多少个,网卡名字叫什么,所以我才要排除 lo 和 虚拟网卡等设备,避免发送失败。