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

\documentclass[oneside]{article}
\usepackage{parskip}
\usepackage[bookmarks,colorlinks=true]{hyperref}

\title{Conventions for working on Quagga}

\begin{document}
\maketitle

This is a living document. Suggestions for updates, via the
\href{http://lists.quagga.net/mailman/listinfo/quagga-dev}{quagga-dev list},
are welcome.

\tableofcontents

\section{GUIDELINES FOR HACKING ON QUAGGA}
\label{sec:guidelines}


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, to minimise merging conflicts.

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, which explain why the code is correct.
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:

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

See line 2 of HACKING.tex, the source for this document, 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:

\begin{description}
  \item{lib/log.h}	logging levels and usage guidance
  \item{[more to be added]}
\end{description}

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:

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

This is 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, \emph{ensure} that you
properly deprecate it - use the \_DEPRECATED form of the appropriate DEFUN
macro.  This is \emph{critical}.  Even if the command can no longer
function, you \emph{MUST} still implement it as a do-nothing stub. 

Failure to follow this causes grief for systems administrators, as an
upgrade may cause daemons to fail to start because of unrecognised commands. 
Deprecated commands should be excised in the next unstable cycle.  A list of
deprecated commands should be collated for each release.

See also section~\ref{sec:dll-versioning} below regarding SHARED LIBRARY
VERSIONING.


\section{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-\ldots 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 - so that it will still be
checked by the compiler, even if disabled. I.e.  this:

\begin{verbatim}
    if (SOME_SYMBOL)
      frobnicate();
\end{verbatim}

rather than:

\begin{verbatim}
  #ifdef SOME_SYMBOL
  frobnicate ();
  #endif /* SOME_SYMBOL */
\end{verbatim}

Note that the former approach requires ensuring that SOME\_SYMBOL will be
defined (watch your AC\_DEFINEs).


\section{COMMIT MESSAGES}

The commit message requirements are:

\begin{itemize}

\item The message \emph{MUST} provide a suitable one-line summary followed
      by a blank line as the very first line of the message, in the form:

  \verb|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.

\item It should have a suitable "body", which tries  to address the
      following areas, so as to help reviewers and future browsers of the
      code-base understand why the change is correct (note also the code
      comment requirements):

  \begin{itemize}
  
  \item The motivation for the change (does it fix a bug, if so which? 
        add a feature?)
  
  \item The general approach taken, and trade-offs versus any other
        approaches.
  
  \item Any testing undertaken or other information affecting the confidence
        that can be had in the change.
  
  \item Information to allow reviewers to be able to tell which specific
        changes to the code are intended (and hence be able to spot any accidental
        unintended changes).

  \end{itemize}
\end{itemize}

The one-line summary must be limited to 54 characters, and all other
lines to 72 characters.

Commit message bodies in the Quagga project have typically taken the
following form:

\begin{itemize}
\item An optional introduction, describing the change generally.
\item A short description of each specific change made, preferably:
  \begin{itemize} \item file by file
    \begin{itemize} \item function by function (use of "ditto", or globs is
                          allowed)
    \end{itemize}
  \end{itemize}
\end{itemize}

Contributors are strongly encouraged to follow this form.

This itemised commit messages allows reviewers to have confidence that the
author has self-reviewed every line of the patch, as well as providing
reviewers a clear index of which changes are intended, and descriptions for
them (C-to-english descriptions are not desireable - some discretion is
useful).  For short patches, a per-function/file break-down may be
redundant.  For longer patches, such a break-down may be essential.  A
contrived example (where the general discussion is obviously somewhat
redundant, given the one-line summary):

\begin{quote}\begin{verbatim}
zebra: Enhance frob FSM to detect loss of frob

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.
\end{verbatim}\end{quote}

Please have a look at the git commit logs to get a feel for what the norms
are.

Note that the commit message format follows git norms, so that ``git
log --oneline'' will have useful output.

\section{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:

\begin{itemize}
\item make dist
\item resulting dist tarball builds
\item out-of-tree builds
\end{itemize}

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.


\section{RELEASE PROCEDURE}

\begin{itemize}
\item Tag the apppropriate commit with a release tag (follow existing
  conventions).
  
  [This enables recreating the release, and is just good CM practice.]

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

  \begin{verbatim}
    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
  \end{verbatim}
\end{itemize}

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: \url{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]


\section{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.


\section{SHARED LIBRARY VERSIONING}
\label{sec:dll-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.


\section{GIT COMMIT SUBMISSION}
\label{sec:git-submission}

The preferred method for submitting changes is to provide git commits via a
publically-accessible git repository, which the maintainers can easily pull.

The commits should be in a branch based off the Quagga.net master - a
"feature branch".  Ideally there should be no commits to this branch other
than those in master, and those intended to be submitted.  However, merge
commits to this branch from the Quagga master are permitted, though strongly
discouraged - use another (potentially local and throw-away) branch to test
merge with the latest Quagga master.

Recommended practice is to keep different logical sets of changes on
separate branches - "topic" or "feature" branches.  This allows you to still
merge them together to one branch (potentially local and/or "throw-away")
for testing or use, while retaining smaller, independent branches that are
easier to merge.

All content guidelines in section \ref{sec:patch-submission}, PATCH
SUBMISSION apply.


\section{PATCH SUBMISSION}
\label{sec:patch-submission}

\begin{itemize}

\item For complex changes, contributors are strongly encouraged to first
      start a design discussion on the quagga-dev list \emph{before}
      starting any coding.

\item 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

     It is preferable to use git format-patch, and even more preferred to
     publish a git repository (see GIT COMMIT SUBMISSION, section
     \ref{sec:git-submission}).

     If not using git format-patch, Include the commit message in the email.

\item After a commit, code should have comments explaining to the reviewer
      why it is correct, without reference to history.  The commit message
      should explain why the change is correct.

\item Include NEWS entries as appropriate.

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

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

\item Changes should be arranged so that the least contraversial and most
      trivial are first, and the most complex or more contraversial are
      last.  This will maximise how many the Quagga maintainers can merge,
      even if some other commits need further work.

\item Providing a unit-test is strongly encouraged. Doing so will make it
      much easier for maintainers to have confidence that they will be able
      to support your change.

\item New code should be arranged so that it easy to verify and test. E.g. 
      stateful logic should be separated out from functional logic as much as
      possible: wherever possible, move complex logic out to smaller helper
      functions which access no state other than their arguments.

\item 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.

\end{itemize}

\section{PATCH APPLICATION}

\begin{itemize}

\item Only apply patches that meet the submission guidelines.

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

\item 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)

\item 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 ..'

\item When merging a branch, always use an explicit merge commit. Giving
      --no-ff ensures a merge commit is created which documents ``this human
      decided to merge this branch at this time''.
\end{itemize}

\section{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.

\begin{itemize}
  \item BSD (Free, Net or Open, any platform)
  \item GNU/Linux (any distribution, i386)
  \item Solaris (strict alignment, any platform)
  \item future: NetBSD/sparc64
\end{itemize}

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

\begin{itemize}
  \item zebra
  \item bgpd
  \item ripd
  \item ospfd
  \item ripngd
\end{itemize}
Daemons which are in a testing phase are

\begin{itemize}
  \item ospf6d
  \item isisd
  \item watchquagga
\end{itemize}

\section{IMPORT OR UPDATE VENDOR SPECIFIC ROUTING PROTOCOLS}

The source code of Quagga is based on two vendors:

   \verb|zebra_org| (\url{http://www.zebra.org/})
   \verb|isisd_sf| (\url{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':

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

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

\end{document}
