-*- mode: text; -*-
$Id: HACKING,v 1.16 2005/02/23 16:20:07 gdt 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.]

  {Manually patch redhat/quagga.spec.in to remove @CONFDATE@}
  ./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

