<feed xmlns='http://www.w3.org/2005/Atom'>
<title>quagga/ospf6d, branch master</title>
<subtitle>Quagga routing suite</subtitle>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/'/>
<entry>
<title>isisd, ospf6d: use bug-report information from autoconf</title>
<updated>2013-07-31T15:58:05+00:00</updated>
<author>
<name>Christian Franke</name>
<email>chris@opensourcerouting.org</email>
</author>
<published>2013-03-20T10:50:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=4ff3bcad8e81b643f3247317a3949d7867b36f75'/>
<id>4ff3bcad8e81b643f3247317a3949d7867b36f75</id>
<content type='text'>
Signed-off-by: Christian Franke &lt;chris@opensourcerouting.org&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Christian Franke &lt;chris@opensourcerouting.org&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>*: use array_size() helper macro</title>
<updated>2012-10-25T17:15:59+00:00</updated>
<author>
<name>Balaji.G</name>
<email>balajig81@gmail.com</email>
</author>
<published>2012-09-26T08:39:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=837d16ccbe0fca413f8927da6a34b1e97ccada8a'/>
<id>837d16ccbe0fca413f8927da6a34b1e97ccada8a</id>
<content type='text'>
Use the array_size() helper macro.  Replaces several instances of local
macros with the same definition.

Reviewed-by: Scott Feldman &lt;sfeldma@cumulusnetworks.com&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Use the array_size() helper macro.  Replaces several instances of local
macros with the same definition.

Reviewed-by: Scott Feldman &lt;sfeldma@cumulusnetworks.com&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>lib: improve fletcher checksum validation</title>
<updated>2012-10-25T17:15:58+00:00</updated>
<author>
<name>JR Rivers</name>
<email>jrrivers@cumulusnetworks.com</email>
</author>
<published>2012-09-13T17:17:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=d8a4e42b7d19a87eacc00c825e913907a58f39ee'/>
<id>d8a4e42b7d19a87eacc00c825e913907a58f39ee</id>
<content type='text'>
OVERVIEW

The checksum used in OSPF (rfc2328) is specified in rc905 annex B.  There is an
sample implementation in rfc1008 which forms the basis of the quagga
implementation.  This algorithm works perfectly when generating a checksum;
however, validation is a bit problematic.

The following LSA (generated by a non-quagga implementation) is received by
quagga and marked with an invalid checksum; however, it passes both the rfc905
and rfc1008 validation checks.

static uint8_t lsa_10_121_233_29[] = {
   0x0e, 0x10, 0x02, 0x03,
   0x09, 0x00, 0x35, 0x40,
   0x0a, 0x79, 0xe9, 0x1d,
   0x80, 0x00, 0x00, 0x03,
   0x00, 0x8a, 0x00, 0x1c,
   0xff, 0xff, 0xff, 0xe0,
   0x00, 0x00, 0x36, 0xb0
};

LS Type: Summary-LSA (IP network)
   LS Age: 3600 seconds
   Do Not Age: False
   Options: 0x02 (E)
   Link-State Advertisement Type: Summary-LSA (IP network) (3)
   Link State ID: 9.0.53.64
   Advertising Router: 10.121.233.29 (10.121.233.29)
   LS Sequence Number: 0x80000003
   LS Checksum: 0x008a
   Length: 28
   Netmask: 255.255.255.224
   Metric: 14000

You'll note that one byte of the checksum is 0x00; quagga would calculate the
checksum as 0xff8a.

It can be argued that the sourcing implementation generates an incorrect
checksum; however, rfc905 indicates that, for 1's complement arithmetic, the
value 255 shall be regarded as 0, thus either values are valid.

EXPLANATION

The quagga ospfd and ospf6d implementations operate by copying the PDU's
existing checksum in a holding variable, calculating the checksum, and comparing
the resulting checksum to the original.  As a note, this implementation has the
side effect of modifying the contents of the PDU.

Evaluation of both rfc905 and rfc1008 shows that checksum validation should
involve calculating the sum over the PDU and checking that both resulting C0 and
C1 values are zero.  This behavior is enacted in the rfc1008 implementation by
calling encodecc with k = 0 (checksum offset); however, this functionality had
been omitted from the quagga implementation.

PATCH

This patch adds the ability to call the quagga's fletcher_checksum() with a
checksum offset value of 0xffff (aka FLETCHER_CHECKSUM_VALIDATE) which returns
the sum over the buffer (a value of 0 indicates a valid checksum).  This is
similar to the mechanism in rfc1008 when called with k = 0.  The patch also
introduces ospf_lsa_checksum_valid().

ospf6d had it's own implementation of the fletcher checksum in
ospf6_lsa_checksum(); it's the same algorithm as in fletcher_checksum().  This
patch removes the local implementation in favor of the library's as well as creates
and uses ospf6_lsa_checksum_valid().

quagga's ISIS implementation suffers from the same problem; however, I do not
have the facilities to validate a fix to ISIS, thus this change has been left to
the ISIS maintainers.  The function iso_csum_verify() should be reduced to
running the fletcher checksum over the buffer using an offset of 0.

Signed-off-by: JR Rivers &lt;jrrivers@cumulusnetworks.com&gt;
Reviewed-by: Scott Feldman &lt;sfeldma@cumulusnetworks.com&gt;
Reviewed-by: Nolan Leake &lt;nolan@cumulusnetworks.com&gt;
Reviewed-by: Ayan Banerjee &lt;ayan@cumulusnetworks.com&gt;
Reviewed-by: Shrijeet Mukherjee &lt;shm@cumulusnetworks.com&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
OVERVIEW

The checksum used in OSPF (rfc2328) is specified in rc905 annex B.  There is an
sample implementation in rfc1008 which forms the basis of the quagga
implementation.  This algorithm works perfectly when generating a checksum;
however, validation is a bit problematic.

The following LSA (generated by a non-quagga implementation) is received by
quagga and marked with an invalid checksum; however, it passes both the rfc905
and rfc1008 validation checks.

static uint8_t lsa_10_121_233_29[] = {
   0x0e, 0x10, 0x02, 0x03,
   0x09, 0x00, 0x35, 0x40,
   0x0a, 0x79, 0xe9, 0x1d,
   0x80, 0x00, 0x00, 0x03,
   0x00, 0x8a, 0x00, 0x1c,
   0xff, 0xff, 0xff, 0xe0,
   0x00, 0x00, 0x36, 0xb0
};

LS Type: Summary-LSA (IP network)
   LS Age: 3600 seconds
   Do Not Age: False
   Options: 0x02 (E)
   Link-State Advertisement Type: Summary-LSA (IP network) (3)
   Link State ID: 9.0.53.64
   Advertising Router: 10.121.233.29 (10.121.233.29)
   LS Sequence Number: 0x80000003
   LS Checksum: 0x008a
   Length: 28
   Netmask: 255.255.255.224
   Metric: 14000

You'll note that one byte of the checksum is 0x00; quagga would calculate the
checksum as 0xff8a.

It can be argued that the sourcing implementation generates an incorrect
checksum; however, rfc905 indicates that, for 1's complement arithmetic, the
value 255 shall be regarded as 0, thus either values are valid.

EXPLANATION

The quagga ospfd and ospf6d implementations operate by copying the PDU's
existing checksum in a holding variable, calculating the checksum, and comparing
the resulting checksum to the original.  As a note, this implementation has the
side effect of modifying the contents of the PDU.

Evaluation of both rfc905 and rfc1008 shows that checksum validation should
involve calculating the sum over the PDU and checking that both resulting C0 and
C1 values are zero.  This behavior is enacted in the rfc1008 implementation by
calling encodecc with k = 0 (checksum offset); however, this functionality had
been omitted from the quagga implementation.

PATCH

This patch adds the ability to call the quagga's fletcher_checksum() with a
checksum offset value of 0xffff (aka FLETCHER_CHECKSUM_VALIDATE) which returns
the sum over the buffer (a value of 0 indicates a valid checksum).  This is
similar to the mechanism in rfc1008 when called with k = 0.  The patch also
introduces ospf_lsa_checksum_valid().

ospf6d had it's own implementation of the fletcher checksum in
ospf6_lsa_checksum(); it's the same algorithm as in fletcher_checksum().  This
patch removes the local implementation in favor of the library's as well as creates
and uses ospf6_lsa_checksum_valid().

quagga's ISIS implementation suffers from the same problem; however, I do not
have the facilities to validate a fix to ISIS, thus this change has been left to
the ISIS maintainers.  The function iso_csum_verify() should be reduced to
running the fletcher checksum over the buffer using an offset of 0.

Signed-off-by: JR Rivers &lt;jrrivers@cumulusnetworks.com&gt;
Reviewed-by: Scott Feldman &lt;sfeldma@cumulusnetworks.com&gt;
Reviewed-by: Nolan Leake &lt;nolan@cumulusnetworks.com&gt;
Reviewed-by: Ayan Banerjee &lt;ayan@cumulusnetworks.com&gt;
Reviewed-by: Shrijeet Mukherjee &lt;shm@cumulusnetworks.com&gt;
Signed-off-by: David Lamparter &lt;equinox@opensourcerouting.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: fix segfault when requesting inexistant interfaces or areas</title>
<updated>2012-07-10T07:27:57+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-07-10T07:27:57+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=0402ca4e92fa0904d5ee0926482ebca08ffd5c81'/>
<id>0402ca4e92fa0904d5ee0926482ebca08ffd5c81</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: add SNMP notifications/traps support</title>
<updated>2012-06-25T17:05:17+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-06-04T12:36:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=bf836661ef8ef880350bc41f0a82566ed5075066'/>
<id>bf836661ef8ef880350bc41f0a82566ed5075066</id>
<content type='text'>
Only implement ospfv3NbrStateChange and ospfv3IfStateChange.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Only implement ospfv3NbrStateChange and ospfv3IfStateChange.
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: add SNMP support for ospfv3*LsdbTable</title>
<updated>2012-06-25T17:05:17+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-06-04T10:59:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=c349bb86927d1f5fc8aa8ebc6f553786f8e70634'/>
<id>c349bb86927d1f5fc8aa8ebc6f553786f8e70634</id>
<content type='text'>
This includes:
 - ospfv3AsLsdbTable
 - ospfv3AreaLsdbTable
 - ospfv3LinkLsdbTable
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This includes:
 - ospfv3AsLsdbTable
 - ospfv3AreaLsdbTable
 - ospfv3LinkLsdbTable
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: add SNMP implementation of ospfv3IfTable</title>
<updated>2012-06-25T17:05:17+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-06-04T09:40:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=3bc4f84efe147ebc65fccbe898b81d78341c542b'/>
<id>3bc4f84efe147ebc65fccbe898b81d78341c542b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: complete SNMP implementation of ospfv3AreaTable</title>
<updated>2012-06-25T17:05:17+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-06-04T08:29:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=ea86e4042b7459fbf5d96835c509cb743bf013c0'/>
<id>ea86e4042b7459fbf5d96835c509cb743bf013c0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: complete SNMP implementation for scalar objects</title>
<updated>2012-06-25T17:05:16+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-06-01T09:38:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=2c5f148065c074d51ff10808a2b6ac2b3296a828'/>
<id>2c5f148065c074d51ff10808a2b6ac2b3296a828</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ospf6d: add SNMP support for ospfv3NbrTable</title>
<updated>2012-06-25T17:05:16+00:00</updated>
<author>
<name>Vincent Bernat</name>
<email>bernat@luffy.cx</email>
</author>
<published>2012-05-31T18:21:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sublab.org/quagga/commit/?id=061bc735b4fb3b8768fa5f52295d85838ed55770'/>
<id>061bc735b4fb3b8768fa5f52295d85838ed55770</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
