
Information you need to know about netdev
-----------------------------------------

Q: What is netdev?

A: It is a mailing list for all network-related Linux stuff.  This includes
   anything found under net/  (i.e. core code like IPv6) and drivers/net
   (i.e. hardware specific drivers) in the Linux source tree.

   Note that some subsystems (e.g. wireless drivers) which have a high volume
   of traffic have their own specific mailing lists.

   The netdev list is managed (like many other Linux mailing lists) through
   VGER ( http://vger.kernel.org/ ) and archives can be found below:

	http://marc.info/?l=linux-netdev
	http://www.spinics.net/lists/netdev/

   Aside from subsystems like that mentioned above, all network-related Linux
   development (i.e. RFC, review, comments, etc.) takes place on netdev.

Q: How do the changes posted to netdev make their way into Linux?

A: There are always two trees (git repositories) in play.  Both are driven
   by David Miller, the main network maintainer.  There is the "net" tree,
   and the "net-next" tree.  As you can probably guess from the names, the
   net tree is for fixes to existing code already in the mainline tree from
   Linus, and net-next is where the new code goes for the future release.
   You can find the trees here:

        https://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
        https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git

Q: How often do changes from these trees make it to the mainline Linus tree?

A: To understand this, you need to know a bit of background information
   on the cadence of Linux development.  Each new release starts off with
   a two week "merge window" where the main maintainers feed their new
   stuff to Linus for merging into the mainline tree.  After the two weeks,
   the merge window is closed, and it is called/tagged "-rc1".  No new
   features get mainlined after this -- only fixes to the rc1 content
   are expected.  After roughly a week of collecting fixes to the rc1
   content, rc2 is released.  This repeats on a roughly weekly basis
   until rc7 (typically; sometimes rc6 if things are quiet, or rc8 if
   things are in a state of churn), and a week after the last vX.Y-rcN
   was done, the official "vX.Y" is released.

   Relating that to netdev:  At the beginning of the 2-week merge window,
   the net-next tree will be closed - no new changes/features.  The
   accumulated new content of the past ~10 weeks will be passed onto
   mainline/Linus via a pull request for vX.Y -- at the same time,
   the "net" tree will start accumulating fixes for this pulled content
   relating to vX.Y

   An announcement indicating when net-next has been closed is usually
   sent to netdev, but knowing the above, you can predict that in advance.

   IMPORTANT:  Do not send new net-next content to netdev during the
   period during which net-next tree is closed.

   Shortly after the two weeks have passed (and vX.Y-rc1 is released), the
   tree for net-next reopens to collect content for the next (vX.Y+1) release.

   If you aren't subscribed to netdev and/or are simply unsure if net-next
   has re-opened yet, simply check the net-next git repository link above for
   any new networking-related commits.

   The "net" tree continues to collect fixes for the vX.Y content, and
   is fed back to Linus at regular (~weekly) intervals.  Meaning that the
   focus for "net" is on stabilization and bugfixes.

   Finally, the vX.Y gets released, and the whole cycle starts over.

Q: So where are we now in this cycle?

A: Load the mainline (Linus) page here:

	https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

   and note the top of the "tags" section.  If it is rc1, it is early
   in the dev cycle.  If it was tagged rc7 a week ago, then a release
   is probably imminent.

Q: How do I indicate which tree (net vs. net-next) my patch should be in?

A: Firstly, think whether you have a bug fix or new "next-like" content.
   Then once decided, assuming that you use git, use the prefix flag, i.e.

	git format-patch --subject-prefix='PATCH net-next' start..finish

   Use "net" instead of "net-next" (always lower case) in the above for
   bug-fix net content.  If you don't use git, then note the only magic in
   the above is just the subject text of the outgoing e-mail, and you can
   manually change it yourself with whatever MUA you are comfortable with.

Q: I sent a patch and I'm wondering what happened to it.  How can I tell
   whether it got merged?

A: Start by looking at the main patchworks queue for netdev:

	http://patchwork.ozlabs.org/project/netdev/list/

   The "State" field will tell you exactly where things are at with
   your patch.

Q: The above only says "Under Review".  How can I find out more?

A: Generally speaking, the patches get triaged quickly (in less than 48h).
   So be patient.  Asking the maintainer for status updates on your
   patch is a good way to ensure your patch is ignored or pushed to
   the bottom of the priority list.

Q: I submitted multiple versions of the patch series, should I directly update
   patchwork for the previous versions of these patch series?

A: No, please don't interfere with the patch status on patchwork, leave it to
   the maintainer to figure out what is the most recent and current version that
   should be applied. If there is any doubt, the maintainer will reply and ask
   what should be done.

Q: How can I tell what patches are queued up for backporting to the
   various stable releases?

A: Normally Greg Kroah-Hartman collects stable commits himself, but
   for networking, Dave collects up patches he deems critical for the
   networking subsystem, and then hands them off to Greg.

   There is a patchworks queue that you can see here:
	http://patchwork.ozlabs.org/bundle/davem/stable/?state=*

   It contains the patches which Dave has selected, but not yet handed
   off to Greg.  If Greg already has the patch, then it will be here:
	https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git

   A quick way to find whether the patch is in this stable-queue is
   to simply clone the repo, and then git grep the mainline commit ID, e.g.

	stable-queue$ git grep -l 284041ef21fdf2e
	releases/3.0.84/ipv6-fix-possible-crashes-in-ip6_cork_release.patch
	releases/3.4.51/ipv6-fix-possible-crashes-in-ip6_cork_release.patch
	releases/3.9.8/ipv6-fix-possible-crashes-in-ip6_cork_release.patch
	stable/stable-queue$

Q: I see a network patch and I think it should be backported to stable.
   Should I request it via "stable@vger.kernel.org" like the references in
   the kernel's Documentation/process/stable-kernel-rules.rst file say?

A: No, not for networking.  Check the stable queues as per above 1st to see
   if it is already queued.  If not, then send a mail to netdev, listing
   the upstream commit ID and why you think it should be a stable candidate.

   Before you jump to go do the above, do note that the normal stable rules
   in Documentation/process/stable-kernel-rules.rst still apply.  So you need to
   explicitly indicate why it is a critical fix and exactly what users are
   impacted.  In addition, you need to convince yourself that you _really_
   think it has been overlooked, vs. having been considered and rejected.

   Generally speaking, the longer it has had a chance to "soak" in mainline,
   the better the odds that it is an OK candidate for stable.  So scrambling
   to request a commit be added the day after it appears should be avoided.

Q: I have created a network patch and I think it should be backported to
   stable.  Should I add a "Cc: stable@vger.kernel.org" like the references
   in the kernel's Documentation/ directory say?

A: No.  See above answer.  In short, if you think it really belongs in
   stable, then ensure you write a decent commit log that describes who
   gets impacted by the bugfix and how it manifests itself, and when the
   bug was introduced.  If you do that properly, then the commit will
   get handled appropriately and most likely get put in the patchworks
   stable queue if it really warrants it.

   If you think there is some valid information relating to it being in
   stable that does _not_ belong in the commit log, then use the three
   dash marker line as described in Documentation/process/submitting-patches.rst to
   temporarily embed that information into the patch that you send.

Q: Someone said that the comment style and coding convention is different
   for the networking content.  Is this true?

A: Yes, in a largely trivial way.  Instead of this:

	/*
	 * foobar blah blah blah
	 * another line of text
	 */

   it is requested that you make it look like this:

	/* foobar blah blah blah
	 * another line of text
	 */

Q: I am working in existing code that has the former comment style and not the
   latter.  Should I submit new code in the former style or the latter?

A: Make it the latter style, so that eventually all code in the domain of
   netdev is of this format.

Q: I found a bug that might have possible security implications or similar.
   Should I mail the main netdev maintainer off-list?

A: No. The current netdev maintainer has consistently requested that people
   use the mailing lists and not reach out directly.  If you aren't OK with
   that, then perhaps consider mailing "security@kernel.org" or reading about
   http://oss-security.openwall.org/wiki/mailing-lists/distros
   as possible alternative mechanisms.

Q: What level of testing is expected before I submit my change?

A: If your changes are against net-next, the expectation is that you
   have tested by layering your changes on top of net-next.  Ideally you
   will have done run-time testing specific to your change, but at a
   minimum, your changes should survive an "allyesconfig" and an
   "allmodconfig" build without new warnings or failures.

Q: Any other tips to help ensure my net/net-next patch gets OK'd?

A: Attention to detail.  Re-read your own work as if you were the
   reviewer.  You can start with using checkpatch.pl, perhaps even
   with the "--strict" flag.  But do not be mindlessly robotic in
   doing so.  If your change is a bug-fix, make sure your commit log
   indicates the end-user visible symptom, the underlying reason as
   to why it happens, and then if necessary, explain why the fix proposed
   is the best way to get things done.   Don't mangle whitespace, and as
   is common, don't mis-indent function arguments that span multiple lines.
   If it is your first patch, mail it to yourself so you can test apply
   it to an unpatched tree to confirm infrastructure didn't mangle it.

   Finally, go back and read Documentation/process/submitting-patches.rst to be
   sure you are not repeating some common mistake documented there.
