Import Debian changes 1.2.2-1
[quagga-debian.git] / nhrpd / README.kernel
1 LINUX KERNEL REQUIREMENTS
2 =========================
3
4 The linux kernel has had various major regressions, performance
5 issues and subtle bugs (especially in pmtu). Here is a short list
6 of some -stable kernels that have been tested (at least briefly)
7 and seem to be working well with Quagga/NHRP:
8   3.12.8 or later
9   3.14.54 or later
10   3.18.22 or later[1]
11   4.4.52 or later
12   4.9.30 or later
13
14 [1] But you need to apply the following two backported commits:
15     3cdaa5be9e ipv4: Don't increase PMTU with Datagram Too Big message
16     cb6ccf09d6 route: Use ipv4_mtu instead of raw rt_pmtu
17
18 See below for list of known issues in various kernel versions.
19
20 Kernels earlier than 3.12 need CONFIG_ARPD enabled in the configuration.
21 Many distributions do not enable it by default, and you may need to
22 compile your own kernel.
23
24 KERNEL BUGS
25 ===========
26
27 DMVPN and mGRE support in the kernel has been brittle. There are various
28 regressions in multiple kernel versions.
29
30 This list tries to collect them to one source of information:
31
32 - forward pmtu is disabled intentionally (but tunnel devices rely on it)
33   Broken since 3.14-rc1:
34     commit "ipv4: introduce ip_dst_mtu_maybe_forward and protect forwarding path against pmtu spoofing"
35   Workaround:
36     Set sysctl net.ipv4.ip_forward_use_pmtu=1
37     (Should fix kernel to have this by default on for tunnel devices)
38
39 - subtle path mtu mishandling issues
40   Broken since (uncertain)
41   Fixed in 4.1-rc2:
42     commit "ipv4: Don't increase PMTU with Datagram Too Big message."
43     commit "route: Use ipv4_mtu instead of raw rt_pmtu"
44
45 - fragmentation of large packets inside tunnel not working
46   Broken since 3.11-rc1
47     commit "ip_tunnels: Use skb-len to PMTU check."
48   Fixed in 3.14.54, 3.18.22, 4.1.9, 4.2-rc3
49     commit "ip_tunnel: fix ipv4 pmtu check to honor inner ip header df"
50
51 - ipsec will crash during xfrm gc
52   Broke since 3.15-rc1
53     commit "flowcache: Make flow cache name space aware"
54   Fixed in 3.18.10, 4.0
55     commit "flowcache: Fix kernel panic in flow_cache_flush_task"
56
57 - TSO on GRE tunnels failed, and resulted in very slow performance
58   Broke since 3.14.24, 3.18-rc3
59     commit "gre: Use inner mac length when computing tunnel length"
60   Fixed in 3.14.30, 3.18.4
61     commit "gre: fix the inner mac header in nbma tunnel xmit path"
62     commit "gre: Set inner mac header in gro complete"
63
64 - NAPI GRO handling was broken; causing immediate crash (32-bit only?)
65   Broken since 3.13-rc1
66     commit "net: gro: allow to build full sized skb"
67   Fixed 3.14.5, 3.15-rc7
68     commit "net: gro: make sure skb->cb[] initial content has not to be zero"
69
70 - ip_gre dst caching broke NBMA GRE tunnels
71   Broken since 3.14-rc1
72   Fixed in 3.14.5, 3.15-rc6
73     commit "ipv4: ip_tunnels: disable cache for nbma gre tunnels"
74
75 - Few packets can be lost when neighbor entry is in NUD_PROBE state,
76   and there is continuous traffic to it.
77   Broken since dawn of time
78   Fixed in 3.15-rc1
79     commit "neigh: probe application via netlink in NUD_PROBE"
80
81 - GRO was implemented for GRE, but the hw capabilities were not updated
82   correctly. In practice forwarding from non-GRE (physical) interface
83   to GRE interface with gro/gso/tx offloads enabled (also on the target
84   interface) does not work properly.
85   Broken around 3.9 to 3.11, need to check details.
86
87 - recvfrom() returned incorrect NBMA address, breaking NAT detection
88   Broken since 3.10-rc1
89     commit "GRE: Refactor GRE tunneling code."
90   Fixed in 3.10.27, 3.12.8, 3.13-rc7
91     commit "ip_gre: fix msg_name parsing for recvfrom/recvmsg"
92
93 - sendto() was broken causing opennhrp not work at all
94   Broken since 3.10-rc1
95     commit "GRE: Refactor GRE tunneling code."
96   Fixed in 3.10.12, 3.11-rc6
97     commit "ip_gre: fix ipgre_header to return correct offset"
98
99 - PMTU was broken due to GRE driver rewrite
100   Broken since 3.10-rc1
101     commit "GRE: Refactor GRE tunneling code."
102   Fixed in 3.11-rc1
103     commit "ip_tunnels: Use skb-len to PMTU check."
104
105 - PMTU was broken due to routing cache removal
106   Broken since 3.6-rc1
107     commit "ipv4: Cache input routes in fib_info nexthops"
108   Fixed in 3.11-rc1
109     commit "ipv4: use next hop exceptions also for input routes"
110     + 3 other commits
111     Patches exist for 3.10, but they were not approved to 3.10-stable.
112
113 - Race condition during bootup: changing ARP flag did not flush
114   existing neighbor entries, causing problems if traffic was routed
115   to gre interface before opennhrp was running.
116   Broken since dawn of time
117   Fixed in 3.11-rc1
118     commit "arp: flush arp cache on IFF_NOARP change"
119
120 - Crash in IPsec
121   Broken since 3.9-rc1
122     commit "xfrm: removes a superfluous check and add a statistic"
123   Fixed in 3.10-rc3
124     commit "xfrm: properly handle invalid states as an error"
125
126 - An incorrect ip_gre change broke NHRP traffic over GRE
127   Broken since 3.8-rc2
128     commit "ip_gre: make ipgre_tunnel_xmit() not parse network header as IP unconditionally"
129   Fixed in 3.8.5, 3.9-rc4
130     commit "Revert "ip_gre: make ipgre_tunnel_xmit() not parse network header as IP unconditionally""
131
132 - Multicast traffic over mGRE was broken.
133   Broken since 2.6.34-rc2
134     commit "gre: fix hard header destination address checking"
135   Fixed in 2.6.39-rc2
136     commit "net: gre: provide multicast mappings for ipv4 and ipv6"
137
138 - Serious performance issues causing small throughput on medium to large DMVPN networks
139   Broken since dawn of time
140   Fixed in 2.6.35
141     multiple commits rewriting ipsec caching
142
143 - Even though around 2.6.24 is the first version where opennhrp started
144   to work, there has been various PMTU, performance, and functionality
145   bugs before 2.6.34. That's one of the first version I consider stable
146   wrt. to opennhrp functionality.
147