Merge branch 'main' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/netfilter...
[linux-block.git] / Documentation / process / maintainer-netdev.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 .. _netdev-FAQ:
4
5 =============================
6 Networking subsystem (netdev)
7 =============================
8
9 tl;dr
10 -----
11
12  - designate your patch to a tree - ``[PATCH net]`` or ``[PATCH net-next]``
13  - for fixes the ``Fixes:`` tag is required, regardless of the tree
14  - don't post large series (> 15 patches), break them up
15  - don't repost your patches within one 24h period
16  - reverse xmas tree
17
18 netdev
19 ------
20
21 netdev is a mailing list for all network-related Linux stuff.  This
22 includes anything found under net/ (i.e. core code like IPv6) and
23 drivers/net (i.e. hardware specific drivers) in the Linux source tree.
24
25 Note that some subsystems (e.g. wireless drivers) which have a high
26 volume of traffic have their own specific mailing lists and trees.
27
28 The netdev list is managed (like many other Linux mailing lists) through
29 VGER (http://vger.kernel.org/) with archives available at
30 https://lore.kernel.org/netdev/
31
32 Aside from subsystems like those mentioned above, all network-related
33 Linux development (i.e. RFC, review, comments, etc.) takes place on
34 netdev.
35
36 Development cycle
37 -----------------
38
39 Here is a bit of background information on
40 the cadence of Linux development.  Each new release starts off with a
41 two week "merge window" where the main maintainers feed their new stuff
42 to Linus for merging into the mainline tree.  After the two weeks, the
43 merge window is closed, and it is called/tagged ``-rc1``.  No new
44 features get mainlined after this -- only fixes to the rc1 content are
45 expected.  After roughly a week of collecting fixes to the rc1 content,
46 rc2 is released.  This repeats on a roughly weekly basis until rc7
47 (typically; sometimes rc6 if things are quiet, or rc8 if things are in a
48 state of churn), and a week after the last vX.Y-rcN was done, the
49 official vX.Y is released.
50
51 To find out where we are now in the cycle - load the mainline (Linus)
52 page here:
53
54   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
55
56 and note the top of the "tags" section.  If it is rc1, it is early in
57 the dev cycle.  If it was tagged rc7 a week ago, then a release is
58 probably imminent. If the most recent tag is a final release tag
59 (without an ``-rcN`` suffix) - we are most likely in a merge window
60 and ``net-next`` is closed.
61
62 git trees and patch flow
63 ------------------------
64
65 There are two networking trees (git repositories) in play.  Both are
66 driven by David Miller, the main network maintainer.  There is the
67 ``net`` tree, and the ``net-next`` tree.  As you can probably guess from
68 the names, the ``net`` tree is for fixes to existing code already in the
69 mainline tree from Linus, and ``net-next`` is where the new code goes
70 for the future release.  You can find the trees here:
71
72 - https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git
73 - https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
74
75 Relating that to kernel development: At the beginning of the 2-week
76 merge window, the ``net-next`` tree will be closed - no new changes/features.
77 The accumulated new content of the past ~10 weeks will be passed onto
78 mainline/Linus via a pull request for vX.Y -- at the same time, the
79 ``net`` tree will start accumulating fixes for this pulled content
80 relating to vX.Y
81
82 An announcement indicating when ``net-next`` has been closed is usually
83 sent to netdev, but knowing the above, you can predict that in advance.
84
85 .. warning::
86   Do not send new ``net-next`` content to netdev during the
87   period during which ``net-next`` tree is closed.
88
89 RFC patches sent for review only are obviously welcome at any time
90 (use ``--subject-prefix='RFC net-next'`` with ``git format-patch``).
91
92 Shortly after the two weeks have passed (and vX.Y-rc1 is released), the
93 tree for ``net-next`` reopens to collect content for the next (vX.Y+1)
94 release.
95
96 If you aren't subscribed to netdev and/or are simply unsure if
97 ``net-next`` has re-opened yet, simply check the ``net-next`` git
98 repository link above for any new networking-related commits.  You may
99 also check the following website for the current status:
100
101   http://vger.kernel.org/~davem/net-next.html
102
103 The ``net`` tree continues to collect fixes for the vX.Y content, and is
104 fed back to Linus at regular (~weekly) intervals.  Meaning that the
105 focus for ``net`` is on stabilization and bug fixes.
106
107 Finally, the vX.Y gets released, and the whole cycle starts over.
108
109 netdev patch review
110 -------------------
111
112 .. _patch_status:
113
114 Patch status
115 ~~~~~~~~~~~~
116
117 Status of a patch can be checked by looking at the main patchwork
118 queue for netdev:
119
120   https://patchwork.kernel.org/project/netdevbpf/list/
121
122 The "State" field will tell you exactly where things are at with your
123 patch. Patches are indexed by the ``Message-ID`` header of the emails
124 which carried them so if you have trouble finding your patch append
125 the value of ``Message-ID`` to the URL above.
126
127 Updating patch status
128 ~~~~~~~~~~~~~~~~~~~~~
129
130 It may be tempting to help the maintainers and update the state of your
131 own patches when you post a new version or spot a bug. Please **do not**
132 do that.
133 Interfering with the patch status on patchwork will only cause confusion. Leave
134 it to the maintainer to figure out what is the most recent and current
135 version that should be applied. If there is any doubt, the maintainer
136 will reply and ask what should be done.
137
138 Review timelines
139 ~~~~~~~~~~~~~~~~
140
141 Generally speaking, the patches get triaged quickly (in less than
142 48h). But be patient, if your patch is active in patchwork (i.e. it's
143 listed on the project's patch list) the chances it was missed are close to zero.
144 Asking the maintainer for status updates on your
145 patch is a good way to ensure your patch is ignored or pushed to the
146 bottom of the priority list.
147
148 Changes requested
149 ~~~~~~~~~~~~~~~~~
150
151 Patches :ref:`marked<patch_status>` as ``Changes Requested`` need
152 to be revised. The new version should come with a change log,
153 preferably including links to previous postings, for example::
154
155   [PATCH net-next v3] net: make cows go moo
156
157   Even users who don't drink milk appreciate hearing the cows go "moo".
158
159   The amount of mooing will depend on packet rate so should match
160   the diurnal cycle quite well.
161
162   Signed-of-by: Joe Defarmer <joe@barn.org>
163   ---
164   v3:
165     - add a note about time-of-day mooing fluctuation to the commit message
166   v2: https://lore.kernel.org/netdev/123themessageid@barn.org/
167     - fix missing argument in kernel doc for netif_is_bovine()
168     - fix memory leak in netdev_register_cow()
169   v1: https://lore.kernel.org/netdev/456getstheclicks@barn.org/
170
171 The commit message should be revised to answer any questions reviewers
172 had to ask in previous discussions. Occasionally the update of
173 the commit message will be the only change in the new version.
174
175 Partial resends
176 ~~~~~~~~~~~~~~~
177
178 Please always resend the entire patch series and make sure you do number your
179 patches such that it is clear this is the latest and greatest set of patches
180 that can be applied. Do not try to resend just the patches which changed.
181
182 Handling misapplied patches
183 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
184
185 Occasionally a patch series gets applied before receiving critical feedback,
186 or the wrong version of a series gets applied.
187 There is no revert possible, once it is pushed out, it stays like that.
188 Please send incremental versions on top of what has been merged in order to fix
189 the patches the way they would look like if your latest patch series was to be
190 merged.
191
192 Stable tree
193 ~~~~~~~~~~~
194
195 While it used to be the case that netdev submissions were not supposed
196 to carry explicit ``CC: stable@vger.kernel.org`` tags that is no longer
197 the case today. Please follow the standard stable rules in
198 :ref:`Documentation/process/stable-kernel-rules.rst <stable_kernel_rules>`,
199 and make sure you include appropriate Fixes tags!
200
201 Security fixes
202 ~~~~~~~~~~~~~~
203
204 Do not email netdev maintainers directly if you think you discovered
205 a bug that might have possible security implications.
206 The current netdev maintainer has consistently requested that
207 people use the mailing lists and not reach out directly.  If you aren't
208 OK with that, then perhaps consider mailing security@kernel.org or
209 reading about http://oss-security.openwall.org/wiki/mailing-lists/distros
210 as possible alternative mechanisms.
211
212
213 Co-posting changes to user space components
214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215
216 User space code exercising kernel features should be posted
217 alongside kernel patches. This gives reviewers a chance to see
218 how any new interface is used and how well it works.
219
220 When user space tools reside in the kernel repo itself all changes
221 should generally come as one series. If series becomes too large
222 or the user space project is not reviewed on netdev include a link
223 to a public repo where user space patches can be seen.
224
225 In case user space tooling lives in a separate repository but is
226 reviewed on netdev  (e.g. patches to ``iproute2`` tools) kernel and
227 user space patches should form separate series (threads) when posted
228 to the mailing list, e.g.::
229
230   [PATCH net-next 0/3] net: some feature cover letter
231    └─ [PATCH net-next 1/3] net: some feature prep
232    └─ [PATCH net-next 2/3] net: some feature do it
233    └─ [PATCH net-next 3/3] selftest: net: some feature
234
235   [PATCH iproute2-next] ip: add support for some feature
236
237 Posting as one thread is discouraged because it confuses patchwork
238 (as of patchwork 2.2.2).
239
240 Preparing changes
241 -----------------
242
243 Attention to detail is important.  Re-read your own work as if you were the
244 reviewer.  You can start with using ``checkpatch.pl``, perhaps even with
245 the ``--strict`` flag.  But do not be mindlessly robotic in doing so.
246 If your change is a bug fix, make sure your commit log indicates the
247 end-user visible symptom, the underlying reason as to why it happens,
248 and then if necessary, explain why the fix proposed is the best way to
249 get things done.  Don't mangle whitespace, and as is common, don't
250 mis-indent function arguments that span multiple lines.  If it is your
251 first patch, mail it to yourself so you can test apply it to an
252 unpatched tree to confirm infrastructure didn't mangle it.
253
254 Finally, go back and read
255 :ref:`Documentation/process/submitting-patches.rst <submittingpatches>`
256 to be sure you are not repeating some common mistake documented there.
257
258 Indicating target tree
259 ~~~~~~~~~~~~~~~~~~~~~~
260
261 To help maintainers and CI bots you should explicitly mark which tree
262 your patch is targeting. Assuming that you use git, use the prefix
263 flag::
264
265   git format-patch --subject-prefix='PATCH net-next' start..finish
266
267 Use ``net`` instead of ``net-next`` (always lower case) in the above for
268 bug-fix ``net`` content.
269
270 Dividing work into patches
271 ~~~~~~~~~~~~~~~~~~~~~~~~~~
272
273 Put yourself in the shoes of the reviewer. Each patch is read separately
274 and therefore should constitute a comprehensible step towards your stated
275 goal.
276
277 Avoid sending series longer than 15 patches. Larger series takes longer
278 to review as reviewers will defer looking at it until they find a large
279 chunk of time. A small series can be reviewed in a short time, so Maintainers
280 just do it. As a result, a sequence of smaller series gets merged quicker and
281 with better review coverage. Re-posting large series also increases the mailing
282 list traffic.
283
284 Multi-line comments
285 ~~~~~~~~~~~~~~~~~~~
286
287 Comment style convention is slightly different for networking and most of
288 the tree.  Instead of this::
289
290   /*
291    * foobar blah blah blah
292    * another line of text
293    */
294
295 it is requested that you make it look like this::
296
297   /* foobar blah blah blah
298    * another line of text
299    */
300
301 Local variable ordering ("reverse xmas tree", "RCS")
302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
303
304 Netdev has a convention for ordering local variables in functions.
305 Order the variable declaration lines longest to shortest, e.g.::
306
307   struct scatterlist *sg;
308   struct sk_buff *skb;
309   int err, i;
310
311 If there are dependencies between the variables preventing the ordering
312 move the initialization out of line.
313
314 Format precedence
315 ~~~~~~~~~~~~~~~~~
316
317 When working in existing code which uses nonstandard formatting make
318 your code follow the most recent guidelines, so that eventually all code
319 in the domain of netdev is in the preferred format.
320
321 Resending after review
322 ~~~~~~~~~~~~~~~~~~~~~~
323
324 Allow at least 24 hours to pass between postings. This will ensure reviewers
325 from all geographical locations have a chance to chime in. Do not wait
326 too long (weeks) between postings either as it will make it harder for reviewers
327 to recall all the context.
328
329 Make sure you address all the feedback in your new posting. Do not post a new
330 version of the code if the discussion about the previous version is still
331 ongoing, unless directly instructed by a reviewer.
332
333 Testing
334 -------
335
336 Expected level of testing
337 ~~~~~~~~~~~~~~~~~~~~~~~~~
338
339 At the very minimum your changes must survive an ``allyesconfig`` and an
340 ``allmodconfig`` build with ``W=1`` set without new warnings or failures.
341
342 Ideally you will have done run-time testing specific to your change,
343 and the patch series contains a set of kernel selftest for
344 ``tools/testing/selftests/net`` or using the KUnit framework.
345
346 You are expected to test your changes on top of the relevant networking
347 tree (``net`` or ``net-next``) and not e.g. a stable tree or ``linux-next``.
348
349 patchwork checks
350 ~~~~~~~~~~~~~~~~
351
352 Checks in patchwork are mostly simple wrappers around existing kernel
353 scripts, the sources are available at:
354
355 https://github.com/kuba-moo/nipa/tree/master/tests
356
357 **Do not** post your patches just to run them through the checks.
358 You must ensure that your patches are ready by testing them locally
359 before posting to the mailing list. The patchwork build bot instance
360 gets overloaded very easily and netdev@vger really doesn't need more
361 traffic if we can help it.
362
363 netdevsim
364 ~~~~~~~~~
365
366 ``netdevsim`` is a test driver which can be used to exercise driver
367 configuration APIs without requiring capable hardware.
368 Mock-ups and tests based on ``netdevsim`` are strongly encouraged when
369 adding new APIs, but ``netdevsim`` in itself is **not** considered
370 a use case/user. You must also implement the new APIs in a real driver.
371
372 We give no guarantees that ``netdevsim`` won't change in the future
373 in a way which would break what would normally be considered uAPI.
374
375 ``netdevsim`` is reserved for use by upstream tests only, so any
376 new ``netdevsim`` features must be accompanied by selftests under
377 ``tools/testing/selftests/``.
378
379 Testimonials / feedback
380 -----------------------
381
382 Some companies use peer feedback in employee performance reviews.
383 Please feel free to request feedback from netdev maintainers,
384 especially if you spend significant amount of time reviewing code
385 and go out of your way to improve shared infrastructure.
386
387 The feedback must be requested by you, the contributor, and will always
388 be shared with you (even if you request for it to be submitted to your
389 manager).