-*- mode: text; -*-
$Id: HACKING,v 1.17 2005/04/05 10:10:06 paul Exp $

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 CVS should have the RCS keyword Id, somewhere very near
the top, commented out appropriately for the file type.  Just add
<dollar>Id:<dollar>, replacing <dollar> with $.  See line 2 of HACKING
for an example; on checkout :$ is expanded to include the value.

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]


CHANGELOG

Add a ChangeLog entry whenever changing code, except for minor fixes
to a commit (with a ChangeLog entry) within the last few days.

Most directories have a ChangeLog file; changes to code in that
directory should go in the per-directory ChangeLog.  Global or
structural changes should also be mentioned in the top-level
ChangeLog.

Certain directories do not contain project code, but contain project
meta-data, eg packaging information, changes to files in these directory may
not require the global ChangeLog to be updated (at the discretion of the
maintainer who usually maintains that meta-data). Also, CVS meta-data such
as cvsignore files do not require ChangeLog updates, just a sane commit
message.

RELEASE PROCEDURE

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

  Check out the tag, and do a test build.

  In an empty directory, do a fresh checkout with -r <release-tag>
  [This makes the dates in the tarball be the modified dates in CVS.]

  ./configure
  make dist

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.

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 head of CVS in unified diff format, eg by:
  cvs <cvs opts> diff -upwb ....

* Include ChangeLog and NEWS entries as appropriate before the patch
  (or in it if you are 100% up to date).

* 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 TO CVS

* Only apply patches that meet the submission guidelines.

* If a patch is large (perhaps more than 100 new/changed lines), tag
  the repository before and after the change with e.g. before-foo-fix
  and after-foo-fix.

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

* Give an appropriate commit message, eg the ChangeLog entry should suffice,
  if it does not, then the ChangeLog entry itself needs to be corrected. The
  commit message text should be identical to that added to the ChangeLog
  message. (One suggestion: when commiting, use your editor to read in the
  ChangeLog and delete all previous ChangeLogs.)

* 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/)

[20041105: Is isisd.sf.netf still where isisd word is happening, or is
the quagga repo now the canonical place?  The last tarball on sf is
two years old.  --gdt]

In order to import source code, the following procedure should be used:

* Tag the Current Quagga CVS repository:

    cvs tag import_isisd_sf_20031223

* Import the source code into the Quagga's framework. You must not modified
  this source code. It will be merged later.

    cd dir_isisd
    export CVSROOT=:pserver:LOGIN@anoncvs.quagga.net:/var/cvsroot 
    cvs import quagga/isisd isisd_sf isisd_sf_20031223
  ---COMMENTS---
    Vendor: [isisd_sf] Sampo's ISISd from Sourceforge
    Tag: [isisd_sf_20031217] Current CVS release
  ---

* Update your Quagga's directory:

    cd dir_quagga
    cvs update -dP

  or

    cvs co -d quagga_isisd quagga

* Merge the code, then commit:

    cvs commit

