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 quagga-re git://github.com/Quagga-RE/quagga-RE.git

Maintained by Denis Ovsienko, and geared towards producing a
production-ready branch of Quagga, in the Quagga-RE-stable branch.

** 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.  Work on this repository
takes place on the branch mtr, which has a branch point of 0.99.17

* 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.

[TODO: Are any of these obsolete with respect to mtr/mtr?]
