This file contains pointers to work done on quagga that is not in the
quagga git repository or quagga bugzilla.

* bug/patch trackers

** diac24 patchwork instance

David Lamparter <equinox@diac24.net> runs a patchwork instance at

  http://patchwork.diac24.net/project/quagga/list/

which contains about 225 patches to quagga.  Many of these are
collected in his git repository.

* public git repositories

** git remote add equinox git://git.spaceboyz.net/equinox/quagga.git/

This repository has topic branches for patches intended for inclusion
in the main quagga tree, named patches/, plus some other branches.

** git remote add balajig http://github.com/balajig/quagga-next.git 

Balaji G has prepared a git repository where a number of patches to
the list have been stored.

** git remote add mtr http://github.com/tomhenderson/quagga-mtr.git

Tom Henderson of Boeing has created a repository to work on
multi-topology routing support for OSPF.

(This repository does not appear to be a clone of the main quagga
repository.)

* posted patches

** Boeing

Boeing has posted patches

  quagga-0.99.9.ospfv3-addressfamilies.patch
  quagga-0.99.9.ospfv3-manetmdr.patch

against 0.99.9 at

  http://hipserver.mct.phantomworks.org/ietf/ospf/

Both patches include functional enhancements as well as support for
gcc 2.95.
