-*- mode: text; -*-
$QuaggaId: Format:%an, %ai, %h$ $

Contents:

* GUIDELINES FOR HACKING ON QUAGGA
* COMPILE-TIME CONDITIONAL CODE
* COMMIT MESSAGE
* HACKING THE BUILD SYSTEM
* RELEASE PROCEDURE
* SHARED LIBRARY VERSIONING
* RELEASE PROCEDURE
* TOOL VERSIONS
* SHARED LIBRARY VERSIONING
* PATCH SUBMISSION
* PATCH APPLICATION
* STABLE PLATFORMS AND DAEMONS
* IMPORT OR UPDATE VENDOR SPECIFIC ROUTING PROTOCOLS

GUIDELINES FOR HACKING ON QUAGGA

[this is a draft in progress]

GNU coding standards apply.  Indentation follows the result of
invoking GNU indent (as of 2.2.8a) with no arguments.  Note that this
uses tabs instead of spaces where possible for leading whitespace, and
assumes that tabs are every 8 columns.  Do not attempt to redefine the
location of tab stops.  Note also that some indentation does not
follow GNU style.  This is a historical accident, and we generally
only clean up whitespace when code is unmaintainable due to whitespace
issues, as fewer changes from zebra lead to easier merges.

For GNU emacs, use indentation style "gnu".

For Vim, use the following lines (note that tabs are at 8, and that
softtabstop sets the indentation level):

set tabstop=8
set softtabstop=2
set shiftwidth=2
set noexpandtab

Be particularly careful not to break platforms/protocols that you
cannot test.

New code should have good comments, and changes to existing code
should in many cases upgrade the comments when necessary for a
reviewer to conclude that the change has no unintended consequences.

Each file in the Git repository should have a git format-placeholder (like
an RCS Id keyword), somewhere very near the top, commented out appropriately
for the file type. The placeholder used for Quagga (replacing <dollar> with
$) is:

	$QuaggaId: <dollar>Format:%an, %ai, %h<dollar> $

See line 2 of HACKING for an example;

This placeholder string will be expanded out by the 'git archive' commands,
wihch is used to generate the tar archives for snapshots and releases.

Please document fully the proper use of a new function in the header file
in which it is declared.  And please consult existing headers for
documentation on how to use existing functions.  In particular, please consult
these header files:

  lib/log.h	logging levels and usage guidance
  [more to be added]

If changing an exported interface, please try to deprecate the interface in
an orderly manner. If at all possible, try to retain the old deprecated
interface as is, or functionally equivalent. Make a note of when the
interface was deprecated and guard the deprecated interface definitions in
the header file, ie:

/* Deprecated: 20050406 */
#if !defined(QUAGGA_NO_DEPRECATED_INTERFACES)
#warning "Using deprecated <libname> (interface(s)|function(s))"
...
#endif /* QUAGGA_NO_DEPRECATED_INTERFACES */

To ensure that the core Quagga sources do not use the deprecated interfaces
(you should update Quagga sources to use new interfaces, if applicable)
while allowing external sources to continue to build. Deprecated interfaces
should be excised in the next unstable cycle.

Note: If you wish, you can test for GCC and use a function
marked with the 'deprecated' attribute. However, you must provide the
#warning for other compilers.

If changing or removing a command definition, *ensure* that you properly
deprecate it - use the _DEPRECATED form of the appropriate DEFUN macro. This
is *critical*. Even if the command can no longer function, you *must* still
implement it as a do-nothing stub. Failure to follow this causes grief for
systems administrators. Deprecated commands should be excised in the next
unstable cycle. A list of deprecated commands should be collated for each
release.

See also below regarding SHARED LIBRARY VERSIONING.

COMPILE-TIME CONDITIONAL CODE

Please think very carefully before making code conditional at compile time,
as it increases maintenance burdens and user confusion. In particular,
please avoid gratuitious --enable-.... switches to the configure script -
typically code should be good enough to be in Quagga, or it shouldn't be
there at all.

When code must be compile-time conditional, try have the compiler make it
conditional rather than the C pre-processor. I.e. this:

    if (SOME_SYMBOL)
      frobnicate();

rather than:

  #ifdef SOME_SYMBOL
  frobnicate ();
  #endif /* SOME_SYMBOL */

Note that the former approach requires ensuring that SOME_SYMBOL will be
defined (watch your AC_DEFINEs).

COMMIT MESSAGES

The commit message should provide:

* A suitable one-line summary as the very first line of the message, in the
  form:

  topic: high-level, one line summary

  Where topic would tend to be name of a subdirectory, and/or daemon, unless
  there's a more suitable topic (e.g. 'build').  This topic is used to
  organise change summaries in release announcements.

* An optional introduction, discussing the general intent of the change.
* A short description of each change made, preferably:
  * file by file
    * function by function (use of "ditto", or globs is allowed)

to provide a short description of the general intent of the patch, in terms
of the problem it solves and how it achieves it, to help reviewers
understand. 


The reason for such itemised commit messages is to encourage the author to
self-review every line of the patch, as well as provide reviewers an index
of which changes are intended, along with a short description for each. 
Some discretion is obviously required.  A C-to-english description is not
desireable.  For short patches, a per-function/file break-down may be
redundant.  For longer patches, such a break-down may be essential.

An example (where the general discussion is obviously somewhat redundant,
given the one-line summary):

zebra: Enhance frob FSM to detect loss of frob

* (general) Add a new DOWN state to the frob state machine
   to allow the barinator to detect loss of frob. 
* frob.h: (struct frob) Add DOWN state flag.
* frob.c: (frob_change) set/clear DOWN appropriately on state change.
* bar.c: (barinate) Check frob for DOWN state.


HACKING THE BUILD SYSTEM

If you change or add to the build system (configure.ac, any Makefile.am,
etc.), try to check that the following things still work:

	- make dist
	- resulting dist tarball builds
	- out-of-tree builds 

The quagga.net site relies on make dist to work to generate snapshots. It
must work. Common problems are to forget to have some additional file
included in the dist, or to have a make rule refer to a source file without
using the srcdir variable.

RELEASE PROCEDURE

* Tag the apppropriate commit with a release tag (follow existing
  conventions).
  [This enables recreating the release, and is just good CM practice.]

* Create a fresh tar archive of the quagga.net repository, and do a test
  build:

    git-clone git:///code.quagga.net/quagga.git quagga
    git-archive --remote=git://code.quagga.net/quagga.git \
        --prefix=quagga-release/ master | tar -xf -
    cd quagga-release

    autoreconf -i
    ./configure
    make
    make dist

The tarball which 'make dist' creates is the tarball to be released! The
git-archive step ensures you're working with code corresponding to that in
the official repository, and also carries out keyword expansion. If any
errors occur, move tags as needed and start over from the fresh checkouts. 
Do not append to tarballs, as this has produced non-standards-conforming
tarballs in the past.

See also: http://wiki.quagga.net/index.php/Main/Processes

[TODO: collation of a list of deprecated commands. Possibly can be scripted
to extract from vtysh/vtysh_cmd.c]


TOOL VERSIONS

Require versions of support tools are listed in INSTALL.quagga.txt.
Required versions should only be done with due deliberation, as it can
cause environments to no longer be able to compile quagga.


SHARED LIBRARY VERSIONING

[this section is at the moment just gdt's opinion]

Quagga builds several shared libaries (lib/libzebra, ospfd/libospf,
ospfclient/libsopfapiclient).  These may be used by external programs,
e.g. a new routing protocol that works with the zebra daemon, or
ospfapi clients.  The libtool info pages (node Versioning) explain
when major and minor version numbers should be changed.  These values
are set in Makefile.am near the definition of the library.  If you
make a change that requires changing the shared library version,
please update Makefile.am.

libospf exports far more than it should, and is needed by ospfapi
clients.  Only bump libospf for changes to functions for which it is
reasonable for a user of ospfapi to call, and please err on the side
of not bumping.

There is no support intended for installing part of zebra.  The core
library libzebra and the included daemons should always be built and
installed together.


PATCH SUBMISSION

* Send a clean diff against the 'master' branch of the quagga.git
  repository, in unified diff format, preferably with the '-p' argument to 
  show C function affected by any chunk, and with the -w and -b arguments to
  minimise changes. E.g: 

    git diff -up mybranch..remotes/quagga.net/master

  Or by using git-format-patch.

*  Not doing so is a definite hindrance to patch application.

* Include NEWS entries as appropriate. 

* Please, please include an appropriate commit message with any emailed
  patches. Doing so makes it easier to review a patch, and apply it.

* Include only one semantic change or group of changes per patch.

* Do not make gratuitous changes to whitespace. See the w and b arguments
  to diff.

* State on which platforms and with what daemons the patch has been
  tested.  Understand that if the set of testing locations is small,
  and the patch might have unforeseen or hard to fix consequences that
  there may be a call for testers on quagga-dev, and that the patch
  may be blocked until test results appear.

  If there are no users for a platform on quagga-dev who are able and
  willing to verify -current occasionally, that platform may be
  dropped from the "should be checked" list.


PATCH APPLICATION

* Only apply patches that meet the submission guidelines.

* If the patch might break something, issue a call for testing on the
  mailinglist.

* Give an appropriate commit message (see above), and use the --author
  argument to git-commit, if required, to ensure proper attribution (you
  should still be listed as committer)

* Immediately after commiting, double-check (with git-log and/or gitk). If
  there's a small mistake you can easily fix it with 'git commit --amend ..'

* By committing a patch, you are responsible for fixing problems
  resulting from it (or backing it out).


STABLE PLATFORMS AND DAEMONS

The list of platforms that should be tested follow.  This is a list
derived from what quagga is thought to run on and for which
maintainers can test or there are people on quagga-dev who are able
and willing to verify that -current does or does not work correctly.

  BSD (Free, Net or Open, any platform) # without capabilities
  GNU/Linux (any distribution, i386)
  Solaris (strict alignment, any platform)
  [future: NetBSD/sparc64]

The list of daemons that are thought to be stable and that should be
tested are:

  zebra
  bgpd
  ripd
  ospfd
  ripngd

Daemons which are in a testing phase are

  ospf6d
  isisd
  watchquagga


IMPORT OR UPDATE VENDOR SPECIFIC ROUTING PROTOCOLS

The source code of Quagga is based on two vendors:

   zebra_org (http://www.zebra.org/)
   isisd_sf (http://isisd.sf.net/)

To import code from further sources, e.g. for archival purposes without
necessarily having to review and/or fix some changeset, create a branch from
'master':

	git checkout -b archive/foo master
	<apply changes>
	git commit -a "Joe Bar <joe@example.com>"
	git push quagga archive/foo

presuming 'quagga' corresponds to a file in your .git/remotes with
configuration for the appropriate Quagga.net repository.
