Kernel-Log – Was 3.2 bringt (1): Netzwerk
Der TCP-Stack passt die Datenrate jetzt schneller an die Leitungskapazität an. Die Treiber für einige WLAN-Bausteine von Atheros und Broadcom sind erheblich gereift; andere Treiber unterstützen ab 3.2 mehr LAN- und WLAN-Hardware als zuvor.
- Thorsten Leemhuis
Nach der Freigabe der ersten Vorabversion von Linux 3.2 und dem damit beendeten Merge Window flossen keine größeren Änderungen mehr in den Hauptentwicklungszweig von Linux ein. In Kürze dürfte Linus Torvalds vermutlich den zweiten RC der Anfang bis Mitte Januar erwarteten Kernel-Version freigegeben; wie schon in den vergangenen Tagen nimmt er bis dahin vornehmlich Korrekturen und kleine, ungefährliche Verbesserungen auf.
Das Kernel-Log kann daher bereits jetzt einen umfassenden Überblick über die wichtigsten Neuerungen von Linux 3.2 bieten. Der erfolgt wie gewohnt mit einer Artikelserie "Was 3.2 bringt", die sich den unterschiedlichen Funktionsbereichen des Kernels annimmt. Den Anfang der Serie macht die folgende Beschreibung der wichtigsten Änderungen am Netzwerk-Stack und an den Treibern für LAN- oder WLAN-Hardware. In den kommenden Wochen folgen Artikel zu Storage, Dateisystemen, Architektur-Code, Infrastruktur sowie zu Treibern für sonstige Hardware.
Kapazitätsanpassung
Die Kernel-Entwickler haben den TCP-Stack von Linux 3.2 um Unterstützung für "Proportional Rate Reduction" (PRR) erweitert. Der von einem Google-Mitarbeiter eingebrachte und einem IETF Draft beschriebene Algorithmus soll die Sendegeschwindigkeit besser an die Kapazität anpassen, welche die Gegenstelle und die auf dem Weg dorthin passierten Router verarbeiten können; speziell nach einer Drosselung aufgrund drohender Überlastung soll der Algorithmus auf der Sendeseite wieder schneller zur maximalen Transferrate hochschalten als der bisher genutzte Ansatz, den RFC 3517 ("A Conservative Selective Acknowledgment (SACK)-based Loss Recovery Algorithm for TCP") beschreibt.
Laut Messungen des Entwicklers soll der Algorithmus die HTTP-Antwortzeiten um drei bis zehn Prozent reduzieren. Details zur Arbeitsweise liefern der Commit-Kommentar, ein LWN.net-Artikel, ein Paper zum Thema sowie PDF-Dokumente von zwei IETF-Präsentationen (1, 2).
Reifeprozess
In der zeitweise etwas verfahrenen Situation um zwei Treiber für neuere WLAN-Chips von Broadcom haben die von Broadcom selbst vorangetriebenen Brcm80211-Treiber Brcmsmac und Brcmfmac jetzt das Rennen gemacht und zogen in das Netzwerk-Subsystem ein. Der vor über einem Jahr veröffentlichte Treibercode wurde bislang im Staging-Bereich gepflegt, wo Code liegt, der den Qualitätsansprüchen seiner Entwickler oder der Kernel-Hacker nicht genügt; einzelne Distributionen lassen Staging-Treiber daher außen vor.
Die meisten Mängel haben die Broadcom-Entwickler im vergangenen Jahr unter Anleitung erfahrener Kernel-Entwickler beseitigt. Der schon länger im Kernel enthaltene B43-Treiber, der auch ältere WLAN-Chips von Broadcom anspricht, unterstützt fürs Erste weiter einige der WLAN-Bausteine, welche auch die Brcm80211-Treiber ansprechen; vermutlich wird der Kernel langfristig aber letztgenannte Treiber bevorzugen. Wer die Brcm80211-Treiber nutzen will, darf derzeit allerdings den Treiber Bcma nicht einkonfigurieren, auf den B43 zum Zugriff auf einige der neueren WLAN-Bausteine von Broadcom angewiesen ist.
In das Netzwerk-Subsystem zog auch der WLAN-Treiber Ath6kl für den AR6003 von Atheros ein. Er basiert auf dem gleichnamigen Staging-Treiber, der parallel entfernt wurde. Die verbesserte und dabei erheblich geschrumpfte Version des Treibers wurde unabhängig vom Staging-Bereich entwickelt; sie ist erheblich kleiner und beherrscht laut Commit-Kommentar nicht alle Funktionen, die der Staging-Treiber bot.
Die teils umfangreichen Aufräumarbeiten an den beiden Treibern und ihre Umzüge sind mitverantwortlich für die große Zahl neuer und entfernter Zeilen Quellcode, die ein Diffstat für Linux 3.2 ausweist. Dazu beigetragen hat auch der Austausch des Staging-WLAN-Treibers Rtl8192e gegen eine erheblich überarbeitete Code-Variante, die zwar noch Mängel aufweist, aber deutlich bessere Chancen hat, irgendwann vom Staging-Bereich in das Netzwerk-Subsystem umzuziehen (u. a. 1, 2, 3).
Verschiedenes, kleine Perlen
Verschiedenes
- Durch Verbesserungen an verschiedenen Treibern unterstützt Linux jetzt die WLAN-Chips Atheros AR946/8x, Atheros AR9580, Marvell 88W8766P sowie Intels WLAN-Bausteine 2000D Series 2x2 BGN und Centrino(R) Advanced-N 6205S AGN.
- Jeff Kirsher hat einige Umstrukturierungen im Linux-Quellcode unterhalb von drivers/net/ vorgenommen (u. a. 1, 2); dadurch liegen nun beispielsweise alle Treiber für Ethernet-Hardware in Hersteller-spezifischen Verzeichnissen unterhalb von drivers/net/ethernet/. Er hat dabei sehr viel Code bewegt – ein weiterer Grund für die große Zahl neuer und entfernter Zeilen Quellcode.
- Der Treiber für Gigabit-Ethernet-Chips von Realtek spricht jetzt den Baustein RTL8111F an, der Treiber Ixgbe auch Intels 82599-Chip. Einen ganzen Schwung Änderungen gab es am Treiber Bna für 10G-PCIe-Ethernet-Adapter von Brocade, dessen Versionsnummer in dem Zug einen großen Sprung auf 3.0.2.1 macht; durch einige der Patches unterstützt der Treiber nun auch das Modell 1860.
- Der Code für die Kommunikation über ein CAN (Controller Area Network) bietet nun Funktionen, um via Netlink ein Gateway oder einen Router zu konfigurieren.
- Neu ist auch Basis-Unterstützung für IPv6 over Low power Wireless Personal Area Networks (6LoWPAN/IEEE 802.15.4).
- Das bei Linux 3.1 eingeführte Subsystem für NFC (Near Field Communication) beherrscht nun das zur Kommunikation zwischen Controller und Device Host (DH) eingesetzte NFC Controller Interface (NCI).
- Netzwerk-Subsystem-Verwalter David Miller hebt in seinem Haup-Git-Pull-Request noch einige interne Optimierungen hervor (u. a. 1, 2).
Die kleinen Perlen
Viele kleinere, aber keineswegs unbedeutende Neuerungen finden sich in der folgenden Liste mit den englischen Commit-Überschriften der jeweiligen Änderung. Die Einträge verlinken genau wie viele der Verweise im vorangegangenen Text auf das Webfrontend des von Linus Torvalds gepflegten Git-Zweigs auf Kernel.org, der die gemeinhin als "offiziell" bezeichneten Kernel-Quellen enthält. Der über diese Links angezeigte Commit-Kommentar und der darunter ausgegebene Patch liefern zahlreiche weitere Informationen zur jeweiligen Änderung.
Vor jedem Link finden sich in eckigen Klammern einige Buchstaben und Zahlen. Ein "C" kennzeichnet Patches mit Änderungen an Kconfig-Dateien; diese enthalten die Konfigurationsoptionen samt der zugehörigen Hilfetexte, die bei der Kernel-Konfiguration über "make menuconfig" oder "make xconfig" angezeigt werden. Ein "D" steht bei Patches, die die Dokumentation verändern, die im Kernel-Zweig unterhalb von Documentation/ liegt. Ein "N" weist Änderungen aus, die eine neue Datei anlegen. Die Zahl vermittelt einen groben Eindruck zur Größe des Patches: eine "1" kennzeichnet Änderungen, die inklusive Kommentar zwischen 10 und 20 KByte groß sind, eine "2" für solche, die zwischen 20 und 30 KByte Umfang haben; Änderungen ohne Zahl sind kleiner als 10 KByte, Patches mit einer "9" hingegen 90 KByte oder größer.
LAN
- [
] Add ethtool -g support to virtio_net - [
2] af_iucv: add HiperSockets transport - [
1] be2net: add support for flashing Teranetics PHY firmware - [
N1] bna: Add New HW Defs - [
1] bna: Brocade 1860 IOC PLL, Reg Defs and ASIC Mode Changes - [
9] bna: ENET and Tx Rx Redesign Enablement - [
N7] bna: Introduce ENET as New Driver and FW Interface - [
N2] bna: MSGQ Implementation - [
N9] bna: Tx and Rx Redesign - [
] bnx2x: Add new PHY BCM54616 - [
] bnx2x: update driver version to 1.70.30-0 - [
] bnx2x: use FW 7.0.29.0 - [
C] dm9000: define debug level as a module parameter - [
] dp83640: enable six external events and one periodic output - [
C 1] drivers/net: Kconfig & Makefile cleanup - [
1] e1000: convert hardware management from timers to threads - [
] ehea: Add GRO support - [
] ehea: Add vlan_features - [
] ehea: Remove num_tx_qps module option - [
] enic: Add SRIOV support - [
2] enic: Add support for port profile association on a enic SRIOV VF - [
1] IB/mlx4: Add support for XRC domains - [
] igb: Loopback functionality supports for i350 devices - [
] igb: Version bump. - [
] ixgbe add thermal sensor support for x540 hardware - [
] ll_temac: Add support for ethtool - [
C N] net/ethernet: sc92031 is not Realtek - [
C] net/fec: add imx6q enet support - [
] net/phy: add IC+ IP101A and support APS. - [
DN] net/smsc911x: add device tree probe support - [
] netxen: add vlan LRO support - [
] PCI: Add Solarflare vendor ID and SFC4000 device IDs - [
] qlcnic: add beacon test support. - [
C N2] stmmac: add CHAINED descriptor mode support (V4) - [
D] stmmac: update the doc with new info about the driver's debug (v3) - [
D] stmmac: update the driver version and doc (V4) - [
] tg3: Add external loopback support to selftest - [
] tg3: Update version to 3.121
WLAN
- [
1] ath6kl: Add beginning of AR6004 initialisation support - [
1] ath6kl: Add functionality for starting AP mode - [
1] ath6kl: Add new WMI commands and events for P2P - [
N1] ath6kl: add testmode support - [
] ath6kl: Allow enabling of P2P support - [
] ath9k: add AR9580 support - [
1] ath9k: Add debugfs support for mac/baseband samples - [
] ath9k_htc: add AVM FRITZ!WLAN 11N v2 support - [
1] ath9k_hw: add a new API for setting tx descriptors - [
N9] ath9k_hw: Add initvals and register definitions for AR946/8x chipsets. - [
] ath9k_hw: Add support to reuse Carrier leak calibration - [
] ath9k_hw: Add support to reuse TxIQ cal measurements - [
1] ath9k_hw: Improve fast channel change for AR9003 chips - [
] ath9k_hw: Support fast channel change on 5GHz for AR9003 chips - [
1] ath9k_hw: Updated AR9003 tx gain table for 5GHz - [
5] ath9k: Rename AR9480 into AR9462 - [
C] b43: drop Kconfig option of forcing PIO mode - [
1] b43: LCN-PHY: add init tables - [
] b43: LCN-PHY: add very basic PHY ops - [
] b43: LCN-PHY: init 0x2064 radio - [
C] b43: make HT-PHY support experimental - [
] b43: N-PHY: report signal to mac80211 - [
C] b43: Remove EXPERIMENTAL designation from LP PHY selection - [
D] batman-adv: implement AP-isolation on the receiver side - [
D] batman-adv: update README (date & ap isolation sysfs file) - [
C] carl9170: export HW random number generator - [
] iwlagn: bump firmware API for some devices - [
] iwlagn: default smps mode for 1000 series device - [
] iwlagn: enable 11n aggregation without checking traffic load - [
] iwlagn: enable 11n support for "_d" sku - [
] iwlagn: move sysfs files to debugfs - [
] iwlagn: New SKU for 6005 SFF - [
CD] iwlagn: rename iwlagn module iwlwifi and alias to iwlagn. - [
C 2] iwlagn: support new P2P implementation - [
C] iwlwifi: update comments on how to enable debug flag - [
1] libertas: disable functionality when interface is down - [
] mac80211: disable powersave for broken APs - [
D] mac80211: document client powersave - [
C 1] mac80211: handle TDLS high-level commands and frames - [
2] mac80211: implement uAPSD - [
3] mac80211: optimise station flags - [
] mac80211: Start implementing QoS support for mesh interfaces - [
D] mac80211: Update injection documentation - [
] nl80211/cfg80211: Add extra IE configuration to AP mode setup - [
] nl80211/cfg80211: Add support to disable CCK rate for management frame - [
] rt2x00: Add new chipset support - [
] rtlwifi: add module parameter to set global debug level - [
] rtlwifi: Change debug parameter to apply to individual drivers - [
] rtlwifi: rtl8192ce: Add new chip revisions - [
] rtlwifi: rtl8192de: Updates from latest Reaktek driver - Part III - [
] rtlwifi: rtl8192se: Updates from latest Realtek driver version - Part II - [
] rtlwifi: Update to new Realtek version - Part I - [
] wl12xx: add module_param to trigger BUG() on recovery - [
] wl12xx: allow 11a AP-mode for wl127x devices - [
] wl12xx: AP-mode - set STA HT capabilities when adding a STA - [
] wl12xx: enable AP advanced functionality - [
] wl12xx: support p2p interfaces - [
] wl12xx: support up to 8 stations in AP-mode
Various
- [
] Bluetooth: Add mgmt command for fast connectable mode - [
] Bluetooth: Add mgmt events for blacklisting - [
] Bluetooth: Add support for pairing via mgmt over LE - [
] Bluetooth: make use of connection number to optimize the scheduler - [
] bridge: allow forwarding some link local frames - [
] btusb: add device entry for Broadcom SoftSailing - [
C N1] can/sja1000: add driver for EMS PCMCIA card - [
C N1] can/sja1000: driver for PEAK PCAN PCI/PCIe cards - [
C] flexcan: Add flexcan device support for p1010rdb. - [
D] flexcan: Fix up fsl-flexcan device tree binding. - [
D] flexcan: Prefer device tree clock frequency if available. - [
D] ipv6: Send ICMPv6 RSes only when RAs are accepted - [
D] ipvs: Add documentation for new sysctl entries - [
D] ipvs: secure_tcp does provide alternate state timeouts - [
] macvlan: receive multicast with local address - [
] neigh: reduce arp latency - [
9] net: add skb frag size accessors - [
] net: more accurate skb truesize - [
] net-netlink: Add a new attribute to expose TOS values via netlink - [
D] net: remove ndo_set_multicast_list callback - [
] net: rps: support 802.1Q - [
] net: rps: support PPPOE session messages - [
C N1] NFC: driver for TI shared transport - [
C N1] ppp: Move the PPP drivers - [
] rps: support IPIP encapsulation
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 den Identi.ca- und Twitter-Konten "@kernellog" erwähnt; die englischen, bei den Kollegen von "The H" erscheinenden Übersetzungen auf den Identi.ca- und Twitter-Konten "@kernellog2". Gelegentlich zwitschert der Autor des Kernel-Logs unabhängig davon über einige Kernel-Log-Themen bei Identi.ca und Twitter als "@kernellogauthor". (thl) (thl)