Skip to content
Denis Ovsienko edited this page Nov 4, 2013 · 39 revisions

Table of Contents

About this project

Quagga Release Engineering (Quagga-RE or QRE) is a software development process applied to Quagga routing software, as well as the deliverables of this process. I established this process in mid-2011 being motivated by my own need for Quagga stability level sufficient for production networks. By that time handling of Quagga-focused tasks was one of my main duties in a company that deployed this software quite widely and depended on proper functioning of it. Approximately 1.5 years of applying the QRE process proved that it served the purpose by detecting and confining most of inevitable regressions. In early 2013 my job role had changed and I stopped making changes that could not reliably test. By the end of 2013 the only changes I make to Quagga-RE are fixes to Babel authentication.

Throughout 2012 and 2013 this process besides the initial purpose enabled implementation of sizable new features (initial support of and improvements to Babel protocol, RIP-2 and Babel cryptographic authentication) within the same workflow. Eventually many of the changes that passed the QRE process were copied into other versions of Quagga.

Technically Quagga-RE is a git repository with additional branches: testing and stable. Some discipline is enforced upon each branch, controlling which commits can go where and how this is done. In particular, every commit going into the testing branch must have a developer responsible for it and a reasonable testing period (1-2 weeks), after which the change either gets finished and working, or ends up rolled back. The stable branch incorporates all finished works from the testing, this is where the version tarballs are exported from. This process is illustrated by this picture: http://quagga-re.github.io/quagga-RE/QRE-2011Q3.png

Priorities

Amidst all routing protocols OSPF and BGP are P1, OSPFv3 is P2 and all other protocols are P3. With regard to operating systems, Linux and FreeBSD are P1 and all other OSes are P2.

QRE versioning, milestones and changelog

QRE is expected to produce 2-3 versions during year 2011, which will be named 0.99.17.x. It is expected, that during year 2012 all commits of the master release 0.99.18 will be filtered through RE-testing-0.99 and a new stable RE series started (0.99.18.x).

version date release focus/notes
RE-0.99.17.1 2011-07-12 Provide a release of Quagga, which would compile and had no open critical bugs.
RE-0.99.17.2 2011-09-07 Merge all patches present in FreeBSD port of Quagga.
RE-0.99.17.3 2011-09-07 Hotfix for RE-0.99.17.2
RE-0.99.17.4 2011-09-26
RE-0.99.17.5 2011-09-29 Hotfix for RE-0.99.17.4
RE-0.99.17.6 2012-01-05 Release 0.99.17.6 fixes the following bugs:
  • #350 nexthop-local unchanged in BGP
  • #480 detect inactive interfaces in ND RA
  • #487 connected route management
  • #548 IPv6 update-source in BGP
  • #622 fix crash in "bgpd --dry-run"
  • #674, #677, #680 improved BGP attribute flag checks
  • #685 verbose LSA checksum error message
Some of the other improvements, which have no associated bug ID, are:
  • automatic RIB GC after a zclient
  • ospf6d: implement 'match interface' for route-maps
  • bgpd: implement 'match probability' in route-maps
  • IPv6 transport class suppport
  • assorted fixes by Stephen Hemminger and David Lamparter
  • new "-z" command-line option
  • optimized IP prefix processing
  • spelling and documentation updates
  • some compilation warnings addressed
RE-0.99.17.7 2012-03-12
RE-0.99.17.8 2012-03-12
RE-0.99.17.9 2012-04-12
RE-0.99.17.10 2012-06-04
RE-0.99.17.11 2012-07-09
RE-0.99.17.12 2013-01-11

Fundamental purpose of branches

RE-testing-0.99

This is where all changes covered by RE process are initially applied. The code from this branch is deployed onto routers and the result is checked for regressions. In case a commit is found to cause trouble in a high-priority component of Quagga, the regression must be addressed by means of commit reversal or a bugfix. The respective committer is personally responsible for this mitigation performed in a timely manner, and it is assumed, that committers perform testing of their own commits rather than leave it for someone else. There is no "someone else", risks must be managed right here. The purpose of this branch is to detect mess before it is copied elsewhere.

RE-stable-0.99

This branch accumulates the changes, which remained in RE-testing-0.99 for a long enough time, were not reversed and were found finished. In case some particular work consists of a set of commits, all these commits are cherry-picked in one sequence, where possible (for the sole purpose of tracking convenience). The purpose of this branch is to accumulate good stuff and deliver it through tar.gz releases.

master

This branch is kept as an exact copy of the original master branch of the original Quagga git repository, which is governed by its own rules rather than RE process. The purpose of this branch is to provide starting points for assorted QA and research activities.

List of works

Analysis of commits stored in Paul Jakma's version of Quagga