Da unterschiedliche Hardware zur Vernetzung von Rechnern eingesetzt werden kann, gibt es in Linux eine abstrakte Schnittstelle zur Netzwerkhardware. Dadurch können die oberen Netzwerkschichten unabhängig von der eingesetzten Hardware implementiert werden. Die Datenstruktr struct net_device verwaltet solch ein abstraktes Netzwerkgerät [include/linux/netdevice.h]. Diese Datenstruktur enthält neben dem Namen (z.B. eth0) und Angaben zur Ansteuerung wie IRQ und IO-Adresse, auch Adressen wie die Broadcast-Adresse, Hardware-Adresse (MAC-Adresse bei Ethernet-Karten) und Multicast-MAC-Adressen sowie etliche statistische Angaben (Anzahl empfangender/gesandter Pakete).
struct net_device enthält weiterhin Pointer auf die Funktionen mit denen man das Gerät ansprechen kann. Die wichtigsten sind:
Diese Funktionen werden von den hardwareunabhägingen API Funktionen in [net/core/dev.c] benutzt. Zum Beispiel die Funktion void dev_queue_xmit(struct sk_buff *skb, struct net_device *dev) überprüft ob das Netzwerkgerät gerade beschäftigt ist und überträgt das Paket dann entweder sofort per hard_start_xmit() oder trägt es in eine Liste der noch zu sendenden Pakete innerhalb des struct net_device ein.