
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: 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/stable_kernel_rules.txt 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/stable_kernel_rules.txt 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/SubmittingPatches 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/SubmittingPatches to be
   sure you are not repeating some common mistake documented there.
