mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 09:20:25 +00:00
build: ditch outdated documents, including HACKING
To be re-added with a clean slate. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
a9c60ec13b
commit
955026c8f0
500
HACKING.md
500
HACKING.md
@ -1,500 +0,0 @@
|
|||||||
---
|
|
||||||
title: Conventions for working on Quagga
|
|
||||||
papersize: a4paper
|
|
||||||
geometry: scale=0.82
|
|
||||||
fontsize: 11pt
|
|
||||||
toc: true
|
|
||||||
date: \today
|
|
||||||
include-before:
|
|
||||||
\large This is a living document. Suggestions for updates, via the
|
|
||||||
[quagga-dev list](http://lists.quagga.net/mailman/listinfo/quagga-dev),
|
|
||||||
are welcome. \newpage
|
|
||||||
...
|
|
||||||
|
|
||||||
\newpage
|
|
||||||
|
|
||||||
GUIDELINES FOR HACKING ON QUAGGA {#sec:guidelines}
|
|
||||||
================================
|
|
||||||
|
|
||||||
GNU coding standards apply. Indentation follows the result of
|
|
||||||
invoking GNU indent (as of 2.2.8a) with the -–nut argument.
|
|
||||||
|
|
||||||
Originally, tabs were used instead of spaces, with tabs are every 8 columns.
|
|
||||||
However, tab’s interoperability issues mean space characters are now preferred for
|
|
||||||
new changes. We generally only clean up whitespace when code is unmaintainable
|
|
||||||
due to whitespace issues, to minimise merging conflicts.
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
`$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,
|
|
||||||
which 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:
|
|
||||||
|
|
||||||
<span>lib/log.h</span> logging levels and usage guidance
|
|
||||||
|
|
||||||
<span>[more to be added]</span>
|
|
||||||
|
|
||||||
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, i.e.:
|
|
||||||
|
|
||||||
/* Deprecated: 20050406 */
|
|
||||||
#if !defined(QUAGGA_NO_DEPRECATED_INTERFACES)
|
|
||||||
#warning "Using deprecated <libname> (interface(s)|function(s))"
|
|
||||||
...
|
|
||||||
#endif /* QUAGGA_NO_DEPRECATED_INTERFACES */
|
|
||||||
|
|
||||||
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, *ensure* that you
|
|
||||||
properly deprecate it - use the \_DEPRECATED form of the appropriate DEFUN
|
|
||||||
macro. This is *critical*. Even if the command can no longer
|
|
||||||
function, you *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 [sec:dll-versioning] below regarding SHARED LIBRARY
|
|
||||||
VERSIONING.
|
|
||||||
|
|
||||||
YOUR FIRST CONTRIBUTIONS
|
|
||||||
========================
|
|
||||||
|
|
||||||
Routing protocols can be very complex sometimes. Then, working with an
|
|
||||||
Opensource community can be complex too, but usually friendly with
|
|
||||||
anyone who is ready to be willing to do it properly.
|
|
||||||
|
|
||||||
- First, start doing simple tasks. Quagga’s patchwork is a good place
|
|
||||||
to start with. Pickup some patches, apply them on your git trie,
|
|
||||||
review them and send your ack’t or review comments. Then, a
|
|
||||||
maintainer will apply the patch if ack’t or the author will have to
|
|
||||||
provide a new update. It help a lot to drain the patchwork queues.
|
|
||||||
See <http://patchwork.quagga.net/project/quagga/list/>
|
|
||||||
|
|
||||||
- The more you’ll review patches from patchwork, the more the Quagga’s
|
|
||||||
maintainers will be willing to consider some patches you will be
|
|
||||||
sending.
|
|
||||||
|
|
||||||
- start using git clone, pwclient
|
|
||||||
<http://patchwork.quagga.net/help/pwclient/>
|
|
||||||
|
|
||||||
$ pwclient list -s new
|
|
||||||
ID State Name
|
|
||||||
-- ----- ----
|
|
||||||
179 New [quagga-dev,6648] Re: quagga on FreeBSD 4.11 (gcc-2.95)
|
|
||||||
181 New [quagga-dev,6660] proxy-arp patch
|
|
||||||
[...]
|
|
||||||
|
|
||||||
$ pwclient git-am 1046
|
|
||||||
|
|
||||||
HANDY GUIDELINES FOR MAINTAINERS
|
|
||||||
================================
|
|
||||||
|
|
||||||
Get your cloned trie:
|
|
||||||
|
|
||||||
git clone vjardin@git.sv.gnu.org:/srv/git/quagga.git
|
|
||||||
|
|
||||||
Apply some ack’t patches:
|
|
||||||
|
|
||||||
pwclient git-am 1046
|
|
||||||
Applying patch #1046 using 'git am'
|
|
||||||
Description: [quagga-dev,11595] zebra: route_unlock_node is missing in "show ip[v6] route <prefix>" commands
|
|
||||||
Applying: zebra: route_unlock_node is missing in "show ip[v6] route <prefix>" commands
|
|
||||||
|
|
||||||
Run a quick review. If the ack’t was not done properly, you know who you have
|
|
||||||
to blame.
|
|
||||||
|
|
||||||
Push the patches:
|
|
||||||
|
|
||||||
git push
|
|
||||||
|
|
||||||
Set the patch to accepted on patchwork
|
|
||||||
|
|
||||||
pwclient update -s Accepted 1046
|
|
||||||
|
|
||||||
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 gratuitous -–enable-… 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:
|
|
||||||
|
|
||||||
if (SOME_SYMBOL)
|
|
||||||
frobnicate();
|
|
||||||
|
|
||||||
rather than:
|
|
||||||
|
|
||||||
#ifdef SOME_SYMBOL
|
|
||||||
frobnicate ();
|
|
||||||
#endif /* SOME_SYMBOL */
|
|
||||||
|
|
||||||
Note that the former approach requires ensuring that SOME\_SYMBOL will
|
|
||||||
be defined (watch your AC\_DEFINEs).
|
|
||||||
|
|
||||||
COMMIT MESSAGES
|
|
||||||
===============
|
|
||||||
|
|
||||||
The commit message requirements are:
|
|
||||||
|
|
||||||
- The message *MUST* provide a suitable one-line summary followed by a
|
|
||||||
blank line as the very first line of the message, in the form:
|
|
||||||
|
|
||||||
`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.
|
|
||||||
|
|
||||||
- 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):
|
|
||||||
|
|
||||||
- The motivation for the change (does it fix a bug, if so which?
|
|
||||||
add a feature?)
|
|
||||||
|
|
||||||
- The general approach taken, and trade-offs versus any other
|
|
||||||
approaches.
|
|
||||||
|
|
||||||
- Any testing undertaken or other information affecting the confidence
|
|
||||||
that can be had in the change.
|
|
||||||
|
|
||||||
- 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).
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
- An optional introduction, describing the change generally.
|
|
||||||
|
|
||||||
- A short description of each specific change made, preferably:
|
|
||||||
|
|
||||||
- file by file
|
|
||||||
|
|
||||||
- function by function (use of “ditto”, or globs is allowed)
|
|
||||||
|
|
||||||
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 desirable - 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):
|
|
||||||
|
|
||||||
> 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.
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
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:
|
|
||||||
|
|
||||||
- make dist
|
|
||||||
|
|
||||||
- resulting dist tarball builds
|
|
||||||
|
|
||||||
- out-of-tree builds
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
RELEASE PROCEDURE
|
|
||||||
=================
|
|
||||||
|
|
||||||
- Tag the appropriate commit with a release tag (follow existing
|
|
||||||
conventions).
|
|
||||||
|
|
||||||
[This enables recreating the release, and is just good CM practice.]
|
|
||||||
|
|
||||||
- Create a fresh tar archive of the quagga.net repository, and do a
|
|
||||||
test build:
|
|
||||||
|
|
||||||
vim configure.ac
|
|
||||||
git commit -m "release: 0.99.99.99"
|
|
||||||
git tag -u 54CD2E60 quagga-0.99.99.99
|
|
||||||
git push savannah tag quagga-0.99.99.99
|
|
||||||
|
|
||||||
git archive --prefix=quagga-release/ quagga-0.99.99.99 | tar xC /tmp
|
|
||||||
git log quagga-0.99.99.98..quagga-0.99.99.99 > \
|
|
||||||
/tmp/quagga-release/quagga-0.99.99.99.changelog.txt
|
|
||||||
cd /tmp/quagga-release
|
|
||||||
|
|
||||||
autoreconf -i
|
|
||||||
./configure
|
|
||||||
make
|
|
||||||
make dist-gzip
|
|
||||||
|
|
||||||
gunzip < quagga-0.99.99.99.tar.gz > quagga-0.99.99.99.tar
|
|
||||||
xz -6e < quagga-0.99.99.99.tar > quagga-0.99.99.99.tar.xz
|
|
||||||
gpg -u 54CD2E60 -a --detach-sign quagga-0.99.99.99.tar
|
|
||||||
|
|
||||||
scp quagga-0.99.99.99.* username@dl.sv.nongnu.org:/releases/quagga
|
|
||||||
|
|
||||||
|
|
||||||
Do NOT do this in a subdirectory of the Quagga sources, autoconf
|
|
||||||
will think it’s a sub-package and fail to include neccessary files.
|
|
||||||
|
|
||||||
- Add the version number on https://bugzilla.quagga.net/, under
|
|
||||||
Administration, Products, “Quagga”, Edit versions, Add a version.
|
|
||||||
|
|
||||||
- Edit the wiki on
|
|
||||||
https://wiki.quagga.net/wiki/index.php/Release\_status
|
|
||||||
|
|
||||||
- Post a news entry on Savannah
|
|
||||||
|
|
||||||
- Send a mail to quagga-dev and quagga-users
|
|
||||||
|
|
||||||
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: <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]
|
|
||||||
|
|
||||||
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 {#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.
|
|
||||||
|
|
||||||
GIT COMMIT SUBMISSION {#sec:git-submission}
|
|
||||||
=====================
|
|
||||||
|
|
||||||
The preferred method for submitting changes is to provide git commits via a
|
|
||||||
publicly-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 [sec:patch-submission], PATCH
|
|
||||||
SUBMISSION apply.
|
|
||||||
|
|
||||||
PATCH SUBMISSION {#sec:patch-submission}
|
|
||||||
================
|
|
||||||
|
|
||||||
- For complex changes, contributors are strongly encouraged to first
|
|
||||||
start a design discussion on the quagga-dev list *before* starting
|
|
||||||
any coding.
|
|
||||||
|
|
||||||
- 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
|
|
||||||
[sec:git-submission]).
|
|
||||||
|
|
||||||
If not using git format-patch, Include the commit message in the
|
|
||||||
email.
|
|
||||||
|
|
||||||
- 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.
|
|
||||||
|
|
||||||
- Include NEWS entries as appropriate.
|
|
||||||
|
|
||||||
- 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.
|
|
||||||
|
|
||||||
- Changes should be arranged so that the least controversial and most
|
|
||||||
trivial are first, and the most complex or more controversial are
|
|
||||||
last. This will maximise how many the Quagga maintainers can merge,
|
|
||||||
even if some other commits need further work.
|
|
||||||
|
|
||||||
- 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.
|
|
||||||
|
|
||||||
- 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.
|
|
||||||
|
|
||||||
- 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
|
|
||||||
=================
|
|
||||||
|
|
||||||
- Only apply patches that meet the submission guidelines.
|
|
||||||
|
|
||||||
- If the patch might break something, issue a call for testing on the
|
|
||||||
mailing-list.
|
|
||||||
|
|
||||||
- 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)
|
|
||||||
|
|
||||||
- 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 ..’
|
|
||||||
|
|
||||||
- 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”.
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
- 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/>)
|
|
||||||
|
|
||||||
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’:
|
|
||||||
|
|
||||||
git checkout -b archive/foo master
|
|
||||||
<apply changes>
|
|
||||||
git commit -a "Joe Bar <joe@example.com>"
|
|
||||||
git push quagga archive/foo
|
|
||||||
|
|
||||||
presuming ‘quagga’ corresponds to a file in your .git/remotes with
|
|
||||||
configuration for the appropriate Quagga.net repository.
|
|
@ -1,54 +0,0 @@
|
|||||||
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?]
|
|
12
Makefile.am
12
Makefile.am
@ -9,20 +9,10 @@ DIST_SUBDIRS = lib qpb fpm zebra bgpd ripd ripngd ospfd ospf6d ldpd \
|
|||||||
isisd watchquagga vtysh ospfclient doc m4 pkgsrc redhat tests \
|
isisd watchquagga vtysh ospfclient doc m4 pkgsrc redhat tests \
|
||||||
solaris pimd @LIBRFP@ @RFPTEST@ tools cumulus
|
solaris pimd @LIBRFP@ @RFPTEST@ tools cumulus
|
||||||
|
|
||||||
EXTRA_DIST = aclocal.m4 SERVICES TODO REPORTING-BUGS INSTALL.quagga.txt \
|
EXTRA_DIST = aclocal.m4 SERVICES REPORTING-BUGS INSTALL.quagga.txt \
|
||||||
update-autotools \
|
update-autotools \
|
||||||
vtysh/Makefile.in vtysh/Makefile.am \
|
vtysh/Makefile.in vtysh/Makefile.am \
|
||||||
tools/rrcheck.pl tools/rrlookup.pl tools/zc.pl \
|
tools/rrcheck.pl tools/rrlookup.pl tools/zc.pl \
|
||||||
tools/zebra.el tools/multiple-bgpd.sh
|
tools/zebra.el tools/multiple-bgpd.sh
|
||||||
|
|
||||||
if HAVE_LATEX
|
|
||||||
|
|
||||||
HACKING.pdf: HACKING.tex
|
|
||||||
$(LATEXMK) -pdf $<
|
|
||||||
|
|
||||||
clean-local:
|
|
||||||
-$(LATEXMK) -C HACKING.tex
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
209
TODO
209
TODO
@ -1,209 +0,0 @@
|
|||||||
|
|
||||||
Quagga TODO list
|
|
||||||
2013-03-29
|
|
||||||
|
|
||||||
|
|
||||||
This is the Quagga primary TODO list. It is on git because that way changes
|
|
||||||
pass through the usual process just like code does, therefore they will have
|
|
||||||
the same visibility.
|
|
||||||
|
|
||||||
If you are working on something beyond a simple fix, to avoid double work it
|
|
||||||
is a good idea to submit a patch to this TODO list when you are starting,
|
|
||||||
listing what you're doing. Also, as others may have done just that, check
|
|
||||||
the list before starting.
|
|
||||||
|
|
||||||
Google Summer of Code 2013 note: this list double-serves as idea list for the
|
|
||||||
Summer of Code. Ideas considered suitable for students are marked with a star
|
|
||||||
after the number, like this: "[Q999*] achieve world peace". They will also
|
|
||||||
have extended descriptions. Nevertheless, if you'd like to do something else,
|
|
||||||
just write a mail to the mailing list: quagga-dev@lists.quagga.net
|
|
||||||
|
|
||||||
"GSoC-Mentors:" listings are preliminary at this point.
|
|
||||||
|
|
||||||
|
|
||||||
Overall
|
|
||||||
=======
|
|
||||||
|
|
||||||
[Q000] improve unit test architecture
|
|
||||||
|
|
||||||
[Q001] kick invalid runtime tests from configure.ac, use list of supported
|
|
||||||
OSes and their APIs instead.
|
|
||||||
Priority: low
|
|
||||||
State: patch half-done 2013-03-29 David Lamparter
|
|
||||||
|
|
||||||
[Q002*] clean up zebra IPC, remove code duplication, align to common API
|
|
||||||
Priority: high
|
|
||||||
GSoC-Mentors: David Lamparter, Christian Franke
|
|
||||||
|
|
||||||
Quagga posesses an IPC mechanism to exchange route information among
|
|
||||||
the different daemons and Zebra, the kernel-interface. This mechanism
|
|
||||||
is implemented in libzebra, but is currently used in all sorts of
|
|
||||||
different ways in the individual protocol daemons. Also, in the future
|
|
||||||
the entire protocol needs to be redone in an extensible way, so we're
|
|
||||||
able to support MPLS, BFD, Multi-Topology/Instance, VRFs, ...
|
|
||||||
|
|
||||||
This TODO entry only refers to the first-step API cleanup. All the
|
|
||||||
daemons need to use a single, well-defined libzebra API. Only after
|
|
||||||
this has been addressed can we look upon changing the protocol itself,
|
|
||||||
since by then it will be encapsulated inside libzebra.
|
|
||||||
|
|
||||||
[Q003] add multi-instance / multi-topology support to the individual protocols
|
|
||||||
|
|
||||||
[Q004] MPLS support
|
|
||||||
State: work in progress 2013-03-29 Renato Westphal, Timo Teräs
|
|
||||||
|
|
||||||
[Q005] BFD support
|
|
||||||
State: two old implementations exist, contact Hasso Tepper
|
|
||||||
|
|
||||||
|
|
||||||
library
|
|
||||||
=======
|
|
||||||
|
|
||||||
[L000] improve route_table speed, eg strided lookups for common prefix depths.
|
|
||||||
|
|
||||||
[L001] ipv6 addresses need concept of valid/preferred
|
|
||||||
|
|
||||||
[L002] implement a generic daemon access/control protocol (eg D-Bus like?
|
|
||||||
simplified SNMP-a-like? NETCONF?)
|
|
||||||
|
|
||||||
[L003] extend vty command definitions to allow them to be self-documenting
|
|
||||||
i18n command help strings
|
|
||||||
|
|
||||||
[L004] create a common libspf (for ospfd, ospf6d and possibly isisd and more).
|
|
||||||
cf. TODO item [O000] for the ospfd/ospf6d specific variant
|
|
||||||
|
|
||||||
[L005] stabilise the API (possibly including symbol/library versioning voodoo)
|
|
||||||
|
|
||||||
[L006] Document the exported API (DocBook/Doxygen?)
|
|
||||||
|
|
||||||
[LE00] incorporate library changes from Euro-IX branch, except threading
|
|
||||||
|
|
||||||
[LE01] incorporate threading library support from Euro-IX branch
|
|
||||||
|
|
||||||
|
|
||||||
zebra
|
|
||||||
=====
|
|
||||||
|
|
||||||
[Z000] Pointopoint address configuration.
|
|
||||||
Priority: low
|
|
||||||
State: patch done & tested 2013-03-29 David Lamparter
|
|
||||||
|
|
||||||
[Z001] Add support for valid and preferred lifetimes to IPv6 addresses
|
|
||||||
|
|
||||||
[Z002] proper support for (at least) 1-level recursive routes
|
|
||||||
Priority: high
|
|
||||||
|
|
||||||
[Z003] Ability to set src on routes, where systems support it.
|
|
||||||
|
|
||||||
[Z004] Ability to apply route-maps to daemon route updates.
|
|
||||||
|
|
||||||
|
|
||||||
bgpd
|
|
||||||
====
|
|
||||||
|
|
||||||
[B000] HUP signal support (reload configuration file).
|
|
||||||
|
|
||||||
[B001*] BGP multi-path extension, relaxed mode
|
|
||||||
Priority: medium
|
|
||||||
Implemented, patch will be sent shortly
|
|
||||||
Pradosh Mohapatra, Cumulus Networks
|
|
||||||
|
|
||||||
[B002] move FSM state to be per-connection, not per-peer.
|
|
||||||
|
|
||||||
[B003] Add support for internal and minimum-metric MED setting
|
|
||||||
|
|
||||||
|
|
||||||
ripd
|
|
||||||
====
|
|
||||||
|
|
||||||
[R000] Multipath support.
|
|
||||||
|
|
||||||
|
|
||||||
ospfd/ospf6d
|
|
||||||
============
|
|
||||||
|
|
||||||
[O000] move SPF to common code
|
|
||||||
|
|
||||||
[O001] extend code sharing between ospfd and ospf6d beyond SPF
|
|
||||||
|
|
||||||
[O002*] OSPF testing replay tool
|
|
||||||
Priority: medium
|
|
||||||
GSoC-Mentors: Martin Winter, Christian Franke, David Lamparter
|
|
||||||
|
|
||||||
In order to extensively test OSPF implementations, a tool to fake an
|
|
||||||
OSPF neighbor is immensely useful. This tool needs to be capable of
|
|
||||||
forming an adjacency and pushing LSAs to the device to be tested. To
|
|
||||||
maintain the adjacency, some minimal state tracking is useful.
|
|
||||||
|
|
||||||
In total, the tool needs to form an adjacency, read and push LSAs, and
|
|
||||||
output received LSAs. Additional tools to generate LSAs from
|
|
||||||
specifications as well as verify received LSA correctness can then be
|
|
||||||
built on top of that.
|
|
||||||
|
|
||||||
The tool needs to support IPv4 and IPv6, possibly split into 2 tools
|
|
||||||
with some code sharing.
|
|
||||||
|
|
||||||
ospfd:
|
|
||||||
|
|
||||||
[O400] Demand circuits.
|
|
||||||
Priority: very low
|
|
||||||
|
|
||||||
[O401] Multiple instances.
|
|
||||||
Priority: medium
|
|
||||||
|
|
||||||
[O402] HUP signal treatment.
|
|
||||||
Priority: medium
|
|
||||||
State: patch on ML needs review 2012-06-04 Mattias Walström
|
|
||||||
|
|
||||||
ospf6d:
|
|
||||||
|
|
||||||
[O600*] fix ospf6d in general
|
|
||||||
Priority: high
|
|
||||||
State: patches tickling in from Cumulus Networks 2013-03-29 Dinesh Dutt
|
|
||||||
Implemented: p2p link support, ABR, Stub area/Totally Stubby area,
|
|
||||||
SPF throttling, Improving state machine to get performance/scale,
|
|
||||||
max-metric support, Improving ECMP to be > 4, Various other bug fixes
|
|
||||||
|
|
||||||
|
|
||||||
[O601*] OSPFv3 autoconfiguration, prefix assignment and sourcedest routing
|
|
||||||
Priority: medium
|
|
||||||
State: work in progress 2013-03-29 Edward Seabrook
|
|
||||||
GSoC-Mentors: David Lamparter
|
|
||||||
|
|
||||||
OSPFv3 application in the homenet is being designed to use several
|
|
||||||
extensions to the base protocol. In order of dependency,
|
|
||||||
autoconfiguration, prefix assignment and sourcedest routing should
|
|
||||||
be implemented.
|
|
||||||
|
|
||||||
This task requires a good level of OSPF understanding plus proper
|
|
||||||
ability to follow IETF discussion about these points. Also, since work
|
|
||||||
has already started on this, improvements must obviously build on top
|
|
||||||
of that.
|
|
||||||
|
|
||||||
isisd
|
|
||||||
=====
|
|
||||||
|
|
||||||
[I000] reassess isisd TODO
|
|
||||||
|
|
||||||
[I001*] IS-IS testing replay tool
|
|
||||||
Priority: medium
|
|
||||||
GSoC-Mentors: Martin Winter, Christian Franke, David Lamparter
|
|
||||||
|
|
||||||
see [O002*].
|
|
||||||
|
|
||||||
[I002] Mesh groups (RFC2973)
|
|
||||||
|
|
||||||
[I003] Crypto authentication (RFC3567)
|
|
||||||
|
|
||||||
|
|
||||||
vtysh
|
|
||||||
=====
|
|
||||||
|
|
||||||
[V000] untangle readline specific bits
|
|
||||||
|
|
||||||
[V001] add a vtyd with a vty (ie telnet) frontend (as opposed to readline)
|
|
||||||
|
|
||||||
[V002] (=> [L002]) use daemon control protocol
|
|
||||||
|
|
||||||
[V003] better AAA support than just PAM, eg krb5, SASL, LDAP...
|
|
||||||
|
|
10
configure.ac
10
configure.ac
@ -79,16 +79,6 @@ dnl autoconf 2.59 appears not to support AC_PROG_SED
|
|||||||
dnl AC_PROG_SED
|
dnl AC_PROG_SED
|
||||||
AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
|
AC_CHECK_PROG([SED],[sed],[sed],[/bin/false])
|
||||||
|
|
||||||
dnl pdflatex and latexmk are needed to build HACKING.pdf
|
|
||||||
AC_CHECK_PROG([PDFLATEX],[pdflatex],[pdflatex],[/bin/false])
|
|
||||||
AC_CHECK_PROG([LATEXMK],[latexmk],[latexmk],[/bin/false])
|
|
||||||
if test "x$PDFLATEX" = "x/bin/false" -o "x$LATEXMK" = "x/bin/false"; then
|
|
||||||
AC_MSG_WARN([Will not be able to make PDF versions of TeX documents])
|
|
||||||
else
|
|
||||||
HAVE_LATEX=true
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([HAVE_LATEX], [test "x$HAVE_LATEX" = "xtrue"])
|
|
||||||
|
|
||||||
dnl try and enable CFLAGS that are useful for Quagga
|
dnl try and enable CFLAGS that are useful for Quagga
|
||||||
dnl - specifically, options to control warnings
|
dnl - specifically, options to control warnings
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user