Kernel-Log – Was 3.13 bringt (2): Netzwerk
Der Kernel 3.13 enthält die neue Firewall-Infrastruktur Nftables, die mittelfristig Iptables und Co. ersetzen soll.
- Thorsten Leemhuis
Die wohl größte Neuerungen des im Januar erwarteten Linux-Kernel 3.13 ist das Netzwerk-Paketfilter-Subsystem Nftables. Mittelfristig soll diese Firewall-Technik die existierenden Paketfilter Iptables, Ip6tables, Arptables und Ebtables ablösen, bei denen die Unterstützung für IPv4, IPV6, ARP und Ethernet Bridging direkt im Kernel-Code steckt. Das Nftables-Subsystem hingegen ist protokollunabhängig, denn es ist im wesentlichen eine simple virtuelle Machine, bei der Bytecode die Filterarbeiten erledigt.
Dieser Bytecode wird durch Userspace-Software wie dem Nftables-Programm Nftables-Tool nft erstellt und über ein Netlink-API in den Kernel geladen. Statt im Kernel steckt die Unterstützung für IPv4 und Co. so in nft, das allerdings eine andere Syntax aufweist als iptables und ip6tables, die bislang zur Konfiguration von Linux-Firewalls dienen. Um Abwärtskompatibilität zu bieten und den Übergang auf Nftables zu erleichtern, haben die Entwickler Varianten dieser beiden Programme erstellt, die aus bestehen Filterregeln Bytecode für das Nftables-Subsystem generieren.
In der Nacht von Sonntag auf Montag hat Linus Torvalds die vier Vorabversion von Linux 3.13 veröffentlicht. In der Freigabe-Mail zeigt er sich leicht ungehalten über die Vielzahl von Änderungen, die den RC4 verhältnismäßig groß gemacht haben.
Die Protokoll-Implementierung im Userspace soll die Wartung des Kernel-Codes erleichtern und einige Beschränkungen beseitigen, die mit dem bisherigen Ansatz nur schwer zu lösen waren. Dadurch soll mit Nftables etwa das Ändern von Filter-Regeln im Betrieb nicht nur zuverlässiger, sondern auch erheblich schneller funktionieren; das soll insbesondere für Firewalls mit einem großen Regelsatz von Vorteil sein.
Wie die bisherigen Paketfilter und deren Userland-Tools stammt auch Nftables von den Entwicklern des Netfilter-Projekts. Die Integration in den Kernel wurde maßgeblich von Pablo Neira Ayuso vorangetrieben; er hat bei seiner Arbeit auf Code von Patrick McHardy zurück gegriffen, der Nftables 2009 gestartet hat. Es konkurrierte eine Weile mit Xtables2, dessen Entwicklung allerdings eingestellt wurde, als sich abzeichnete, dass Nftables mehr Unterstützer hatte.
Weitere Details zu Nftables liefert dessen Homepage und ein LWN.net-Artikel. Einen anderen Blick liefern Präsentationsfolien und Videoaufzeichnung eines Nftables-Vortrags, den Netfilter-Entwickler Eric Leblond vor wenigen Monaten gegeben hat. Von ihm stammt auch das "nftables quick howto", das die Grundfunktionen von Nftables erläutert.
Verschiedenes
Der Netzwerk-Stack von Linux 3.13 nutzt nun standardmäßig TCP Fast Open (TFO). Die TCP-Erweiterung, die den HTTP-Verbindungsaufbau beschleunigen kann und beim IETF noch Draft-Status hat, wird Client-seitig seit Linux 3.6 unterstützt; der Server-Code folgte bei 3.7. Auch Chromium und der von ihm abgeleitete Browser Chrome beherrschen die TCP-Erweiterung.
Der Tg3-Treiber unterstützt jetzt die Broadcoms Tigon3-Chips 57764, 57765, 57787, 57782 und 57786. Linux 3.11 spricht auch Intels WLAN-Module der Serie Wireless N 7265.
Der Linux-Kernel 3.13 beherrscht das Protokoll High-availability Seamless Redundancy (HSR), mit dem sich ein hochverfügbare Netzwerk-Verbindung einrichten lässt, und bietet IPsec Virtual Tunnel Interfaces (VTI), die die Datenströme via IPv6 tunneln.
Ipset unterstützt nun Netzwerk-Namespaces; zudem kann es die Parameter von Netzwerken mit IPv4- und IPv6-Adressen als Paar speichern (1, 2).
Der Kernel-Code für Near field communication (NFC) beherrscht jetzt nicht nur NFC-A-Übertragungen mit 106 Kbit/s, sondern auch das im Zahlungsverkehr genutzte Secure Element IO API.
Über die neue Socket-Option SO_MAX_PACING_RATE können Anwendungen das Tempo vorgeben, mit der der Kernel die Daten überträgt; das funktioniert allerdings nur mit dem bei Linux 3.12 intergrierten Fair Queue (FQ) Packet Scheduler.
Die über das Userspace-Werkzeug tc ("Traffic Control") konfigurierte Kernel-Infrastruktur zur Regelung des Netzwerkverkehrs kann Pakete jetzt mit Hilfe des Berkeley Packet Filter und seinem Just in Time Compiler klassifizieren, die Linux seit 3.0 mitbringt; das soll flexibler sein als mit dem weiterhin unterstützten "ematch".
Einige weitere Änderungen finden Sie auf der nächsten Seite oder über die drei Merge-Commits, mit denen die wesentlichsten Neuerungen am Netzwerkcode zum Kernel stießen (1, 2, 3).
Die kleinen Perlen
Die folgenden Links führen zu einigen kleineren, aber keineswegs unbedeutende Änderungen:
Networking
- Pull networking updates from David Miller
- Pull networking fixes from David Miller
- Pull networking fixes from David Miller
- [
] Bluetooth: Add support creating virtual AMP controllers - [
] Bluetooth: Introduce new HCI socket channel for user operation - [
] Bluetooth: btmrvl: add calibration data download support - [
C 1] NFC Digital: Add NFC-A technology support - [
C] NFC Digital: Add NFC-F technology support - [
N1] NFC Digital: Add initiator NFC-DEP support - [
2] NFC Digital: Add target NFC-DEP support - [
N1] NFC Digital: Implement driver commands mechanism - [
] NFC: Define secure element IO API and commands - [
C N1] NFC: Digital Protocol stack implementation - [
CI N] NFC: Sony Port-100 Series driver - [
] NFC: netlink: SE API implementation - [
1] NFC: port100: Add target mode support - [
D] bonding: document the new packets_per_slave option - [
] bonding: extend round-robin mode with packets_per_slave - [
D 1] can: add broadcast manager documentation - [
5] genetlink: make multicast groups const, prevent abuse - [
] inet: convert inet_ehash_secret and ipv6_hash_secret to net_get_random_once - [
] inet: split syncookie keys for ipv4 and ipv6 and initialize with net_get_random_once - [
] ipip: add GSO/TSO support - [
C N2] ipv6: Add support for IPsec virtual tunnel interfaces - [
C 1] ipv6: Remove privacy config option. - [
] ipv6: sit: add GSO/TSO support - [
] ipv6: split inet6_hash_frag for netfilter and initialize secrets with net_get_random_once - [
C N6] net/hsr: Add support for the High-availability Seamless Redundancy protocol (HSRv0) - [
] net/phy: Add VSC8574 support - [
] net/phy: Add VSC8662 support - [
1] net: Add layer 2 hardware acceleration operations for macvlan devices - [
1] net: add adj_list to save only neighbours - [
D] net: extend net_device allocation to vmalloc() - [
C N] net: huawei_cdc_ncm: Introduce the huawei_cdc_ncm driver - [
] net: initialize hashrnd in flow_dissector with net_get_random_once - [
] net: introduce SO_MAX_PACING_RATE - [
] net: introduce new macro net_get_random_once - [
C N1] net: sched: cls_bpf: add BPF-based classifier - [
3] netfiler: ipset: Add net namespace for ipset - [
C N9] netfilter: add nftables - [
] netfilter: bridge: nf_tables: add filter chain type - [
] netfilter: ip6t_REJECT: skip checksum verification for outgoing ipv6 packets - [
C N2] netfilter: ipset: Add hash:net,net module to kernel. - [
C N1] netfilter: ipset: Add hash:net,port,net module to kernel. - [
3] netfilter: ipset: Generalize extensions support - [
] netfilter: ipset: Introduce new operation to get both setname and family - [
1] netfilter: ipset: Prepare ipset to support multiple networks for hash types - [
N] netfilter: ipset: Support comments for ipset entries in the core. - [
] netfilter: ipset: Support comments in hash-type ipsets. - [
] netfilter: ipset: Support package fragments for IPv4 protos without ports - [
C N2] netfilter: nf_tables: Add support for IPv6 NAT - [
C N] netfilter: nf_tables: add ARP filtering support - [
C N5] netfilter: nf_tables: add compatibility layer for x_tables - [
] netfilter: nf_tables: add insert operation - [
C N7] netfilter: nf_tables: add netlink set API - [
] netfilter: nf_tables: add optimized data comparison for small values - [
] netfilter: nf_tables: add support for dormant tables - [
] netfilter: nf_tables: add trace support - [
2] netfilter: nfnetlink: add batch support and use it from nf_tables - [
] netfilter: nft_payload: add optimized payload implementation for small loads - [
] openvswitch: Enable all GSO features on internal port. - [
] openvswitch: TCP flags matching support. - [
C N] phy: Add MOXA MDIO driver - [
C] random32: add test cases for taus113 implementation - [
2] tcp/dccp: remove twchain - [
D] tcp: enable sockets to use MSG_FASTOPEN by default - [
] tcp: fix dynamic right sizing - [
D 1] tcp: properly handle stretch acks in slow start - [
] tcp: sndbuf autotuning improvements - [
] tcp: switch tcp_fastopen key generation to net_get_random_once - [
D] tcp: tsq: restore minimal amount of queueing - [
1] tipc: make bearer and media naming consistent - [
] udp: ipv4: Add udp early demux - [
] veth: extend features to support tunneling - [
] vxlan: Have the NIC drivers do less work for offloads
Ethernet
- [
] b44: add support for Byte Queue Limits - [
] bgmac: add support for Byte Queue Limits - [
] bnx2x: add TSO support for SIT tunnels - [
C DN] drivers: net: cpsw-phy-sel: Add new driver for phy mode selection for cpsw - [
2] ixgbe: enable l2 forwarding acceleration for macvlans - [
C 2] net/ethernet: Drop H8/300 Ethernet driver - [
] phy: Add Vitesse 8514 phy ID - [
] qlcnic: Enable multiple Tx queue support for 83xx/84xx Series adapters. - [
] qlge: Enhance nested VLAN (Q-in-Q) handling. - [
] sfc: Implement firmware-assisted TSO for EF10 - [
I] tg3: Add support for new 577xx device ids - [
] xen-netback: add support for IPv6 checksum offload to guest - [
] xen-netback: enable IPv6 TCP GSO to the guest
Wifi
- [
] ar5523: Add USB ID of D-Link WUA-2340 rev A1 - [
] ath10k: add support for HTT 3.0 - [
] ath10k: implement firmware IE container support - [
] ath10k: implement host memory chunks - [
2] ath10k: introduce dynamic WMI structures - [
I] ath9k: Add DELL 1707 to supported card table - [
] ath9k: Add and use initvals for channel 14 - [
] ath9k: Add support for AR9565 v1.0.1 LNA diversity - [
I] ath9k: Enable antenna diversity for WB335 - [
C 2] ath9k: add TX99 support - [
C] ath: add support for proper dynamic regulatory hints - [
N2] batman-adv: Receive fragmented packets and merge - [
1] batman-adv: add per VLAN interface attribute framework - [
1] batman-adv: add sysfs framework for VLAN - [
D] batman-adv: make the AP isolation attribute VLAN specific - [
D 5] batman-adv: remove vis functionality - [
I] bcma: add PCI id 0x4313 - [
D] bonding: document the new xmit policy modes and update the changed ones - [
] brcmfmac: add BCM4339 SDIO interface support - [
] brcmsmac: add support for a BCM4313 with PCI id 0x4313 - [
I] iwlwifi: Support 7265 devices - [
1] iwlwifi: mvm: Add device wide power command - [
1] iwlwifi: mvm: add IBSS support - [
N] iwlwifi: mvm: implement NoA testing using testmode cmd - [
] iwlwifi: mvm: implement new IPv6 offload API - [
3] iwlwifi: mvm: support VHT in rs - [
2] iwlwifi: mvm: support sched scan if supported by the fw - [
] iwlwifi: support Signed firmware image and Dual CPUs - [
2] mac80211: add support for CSA in IBSS mode - [
] mac80211: enable DFS for IBSS mode - [
2] mac80211: implement SMPS for AP - [
C 1] mac80211: port CCMP to cryptoapi's CCM driver - [
C] mac80211: process the CSA frame for mesh accordingly - [
] nl80211/cfg80211: enable DFS for IBSS mode - [
] rt2800: add support for radio chip RF3070 - [
C N] rt2x00: create a new module for rt2800 MMIO code - [
] rt2x00: rt2800lib: autodetect 5GHz band support - [
C N1] rt2x00: rt2800pci: move SoC specific code into a separate module - [
C N9] wcn36xx: mac80211 driver for Qualcomm WCN3660/WCN3680 hardware - [
] wlcore: fwlog dynamic mem_block control - [
] {nl,cfg,mac}80211: enable the triggering of CSA frame in mesh - [
] {nl,cfg,mac}80211: implement mesh channel switch userspace API
Ein "C" im Bereich "[ ]" kennzeichnet Commits mit Änderungen an Kconfig-Dateien, welche die Konfigurationsoptionen samt der zugehörigen Hilfetexte enthalten. Mit "I" ausgezeichneten Patches rüsten neue PCI- oder USB-IDs nach; jene mit "D" verändern die dem Kernel beiliegende Dokumentation; Commits mit "N" legen neue Dateien an. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: Eine "1" kennzeichnet Patches, die inklusive Kommentar zwischen 10 und 20 KByte groß sind; Patches mit einer "9" sind 90 KByte oder größer.
Das Kernel-Log kann bereits jetzt einen Überblick über die wichtigsten Neuerungen der Linux-Version 3.13 geben, da alle größeren Änderungen bereits in den ersten drei Entwicklungswochen integriert wurden; das im Januar erwartete Linux 3.13 befindet sich seit dem in der Stabilisierungsphase, in der die Kernel-Hacker nur selten größere Umbauten vornehmen.
Über einige der Neuerungen von Linux 3.13 hat das Kernel-Log bereits im Rahmen der Artikelserie "Was 3.13 bringt" berichtet:
In den kommenden Wochen erscheinen noch Artikel zu den Änderungen an Infrastruktur und Treibern.
Weitere Hintergründe und Informationen rund um Entwicklungen im Linux-Kernel und dessen Umfeld finden sich in den vorangegangenen Kernel-Logs auf heise open. Neue Ausgaben des Kernel-Logs werden auf dem Twitter-Konto "@kernellog" erwähnt. (thl)