<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://blog.gmane.org/gmane.network.quagga.devel">
    <title>gmane.network.quagga.devel</title>
    <link>http://blog.gmane.org/gmane.network.quagga.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9399"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9395"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9394"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9379"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9378"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9371"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9369"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9366"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9365"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9359"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9353"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9321"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9310"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9309"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9308"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9307"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9305"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9303"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9296"/>
        <rdf:li rdf:resource="http://comments.gmane.org/gmane.network.quagga.devel/9293"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9399">
    <title>[quagga-dev 9379] OSPFv2 / receiving Ack</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9399</link>
    <description>&lt;pre&gt;Hi.

On Receiving Ack with ospfd,
one more check is necessary.

When a ls-update packet with non-MaxAge LSA has appeared,
the LSA is registerred on retransmit list.
and if the LSA is overwritten with MaxAge &amp;amp; same-seqnum,
LSA on retransmit list is also replaced with MaxAge one.

when an neighbor slowly receives non-MaxAge LSA and
send back an Ack,  current ospfd detects this is
"same instance" and delete the MaxAge LSA from retrans list.

This causes LSDB inconsistency.





melody(15:00:47):~/work/quagga-0.99.20.1/ospfd$ diff -U10 ospf_packet.c
ospf_packet.2.c
--- ospf_packet.c2012-05-25 15:00:41.000000000 +0900
+++ ospf_packet.2.c2012-05-25 15:00:26.000000000 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2077,21 +2077,22 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;

       if (lsa-&amp;gt;data-&amp;gt;type &amp;lt; OSPF_MIN_LSA || lsa-&amp;gt;data-&amp;gt;type &amp;gt;=
OSPF_MAX_LSA)
 {
   lsa-&amp;gt;data = NULL;
   ospf_lsa_discard (lsa);
   continue;
 }

       lsr = ospf_ls_retransmit_lookup (nbr, lsa);

-      if (lsr != NULL &amp;amp;&amp;amp; lsr-&amp;gt;data-&amp;gt;ls_seqnum == lsa-&amp;gt;data-&amp;gt;ls_seqnum)
+      if (lsr != NULL &amp;amp;&amp;amp; lsr-&amp;gt;data-&amp;gt;ls_seqnum == lsa-&amp;gt;data-&amp;gt;ls_seqnum
+  &amp;amp;&amp;amp; (ntohs (lsr-&amp;gt;data-&amp;gt;ls_age) &amp;gt;= OSPF_LSA_MAXAGE) == (ntohs
(lsr-&amp;gt;data-&amp;gt;ls_age) &amp;gt;= OSPF_LSA_MAXAGE))
         {
 #ifdef HAVE_OPAQUE_LSA
           if (IS_OPAQUE_LSA (lsr-&amp;gt;data-&amp;gt;type))
             ospf_opaque_ls_ack_received (nbr, lsr);
 #endif /* HAVE_OPAQUE_LSA */

           ospf_ls_retransmit_delete (nbr, lsr);
         }

       lsa-&amp;gt;data = NULL;
melody(15:00:58):~/work/quagga-0.99.20.1/ospfd$

Thanks.
--
kashima&amp;lt; at &amp;gt;jp.fujitsu.com

&lt;/pre&gt;</description>
    <dc:creator>KASHIMA Hiroaki</dc:creator>
    <dc:date>2012-05-25T06:15:49</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9395">
    <title>[quagga-dev 9376] Segmentation fault while running Quagga on Octeon</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9395</link>
    <description>&lt;pre&gt;Hi ,
                I am trying to cross compile quagga 0.99.18 routing suite for octeon .
After setting "ac_cv_func_malloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes" in configure my cross compilation was successful . But when I tried to run the zebra daemon on the octeon board I got a segmentation fault.
please suggest a way to go about this issue.
Also please provide a solution to  get statically linked quagga daemons as the -static flag is ineffective.


Thanks &amp;amp; Regards,
Harini Gopalakrishnan


________________________________
The contents of this e-mail and any attachment(s) may contain confidential or privileged information for the intended recipient(s). Unintended recipients are prohibited from taking action on the basis of information in this e-mail and using or disseminating the information, and must notify the sender and delete it from their system. L&amp;amp;T Infotech will not accept responsibility or liability for the accuracy or completeness of, or the presence of any virus or disabling code in this e-mail"
&lt;/pre&gt;</description>
    <dc:creator>Harini Gopalakrishnan</dc:creator>
    <dc:date>2012-05-24T09:53:58</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9394">
    <title>[quagga-dev 9375] [RFC] AgentX support for Quagga</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9394</link>
    <description>&lt;pre&gt;Hi!

Here is a serie of patches adding AgentX support to Quagga.

The first patch is not related to AgentX support. It just fixes Quagge
compilation when using a separate build directory.

The second patch removes some cruft left from a migration from
UCD-SNMP (I think). This is just a small cleanup.

The third patch makes use of "net-snmp-config" in place of linking to
-lnetsnmp. It removes explicit link to -lcrypto. If needed, this will
be added by "net-snmp-config". "net-snmp-config" exists since at least
NetSNMP 4.2.

The fourth patch separates SMUX specific stuff from generic SNMP
stuff. smux.h now only contains the interface to SMUX for the
daemons. Everything else has been moved to smux.c. The idea is for
another SNMP implementation to provide the appropriate smux_*
functions. snmp.c is a new file containing oid_* functions (they are
independant of the SNMP implementation).

The last patch adds AgentX support by providing the appropriate smux_*
functions. This patch does not modify daemons. Because Net-SNMP hides
its internals, it is not possible to disable AgentX support once
enabled. This should not be a problem, because, like with SMUX, the
commands are not exported to vtysh and therefore, I suppose there is
no way to call "no agentx".

Also, the event loop is modified (in thread.c). NetSNMP hides the
appropriate file descriptors and timers.

The documentation has not been updated. This should be easy enough
once I am done with the other details.

The big problem now is traps. Currently, I do not send any trap with
AgentX. The SMUX implementation only sends SNMPv1 traps using the SMUX
peer OID as an enterprise OID. I think this is not the right way to do
it. Both OSPF-MIB (through OSPF-TRAP-MIB) and BGP-MIB defines
notifications. A notification is some kind of SNMPv2 TRAP. Let me
explain. With a SNMPv1 trap, you have: an enterprise OID, a generic
trap code (always 6 in our case) and a specific trap code. With a
notification, all those are replaced by a snmptrap OID.

It is possible to transform SNMPv1 trap to SNMPv2 trap and
vice-versa. However, if I just do this, I will continue to use
inappropriate enterprise OID (the SMUX peer OID). I should use the
appropriate notification objects, as defined in MIB.

My first proposition was to change smux_trap() signature to include
the appropriate enterprise OID (used to build snmp trap OID). Then, I
will also update the SMUX implementation. There are two drawbacks:

 - daemons maintained outside of Quagga will also need to update (if
   they use traps)
 - people receiving traps will need to update their configuration to
   use the correct OID instead of the previous ones.

Another proposition will be to just keep the SMUX peer OID. People may
change it to the appropriate value (since I will not use it as a SMUX
peer OID) to get correct snmp trap OID. For BGP and OSPF, this will
work because all traps are rooted at the same OID. I can however
provide a "smux_inform()" function allowing to override the enterprise
OID.

Any though? And any comment on the patches in general?

&lt;/pre&gt;</description>
    <dc:creator>Vincent Bernat</dc:creator>
    <dc:date>2012-05-24T08:56:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9379">
    <title>[quagga-dev 9360] [PATCH] don't ignore netlink packets apparently coming from the command socket</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9379</link>
    <description>&lt;pre&gt;Hi list,

under linux &amp;gt; 2.6.18, quagga (all versions) would not remove the
"directly connected" state routes when IP addresses were removed from
interfaces in vtysh.

My "fix" was to remove the block checking if the message has the same
pid as the command interface. I hope this doesn't make zebra parse lots
of irrelevant messages.

The patch is attached to bug #721, where this is also discussed in
greater detail. I'll also attach it to this mail.

Best regards,
Torsten
&lt;/pre&gt;</description>
    <dc:creator>Torsten Luettgert</dc:creator>
    <dc:date>2012-05-22T16:24:54</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9378">
    <title>[quagga-dev 9359] New repository based on Quagga v0.99.17</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9378</link>
    <description>&lt;pre&gt;Hi!

Due to the serious problems[1] with ospfd in Quagga &amp;gt;0.99.17 we've
decided at Westermo to downgrade to 0.99.17 for our upcoming
WeOS[2] 4.9.0 release.

Contrary to earlier releases of WeOS I've decided to personally steal
some corporate time to communicating our efforts and publicizing our
patches at GitHub[3].

     https://github.com/troglobit/quagga/tree/security/0.99.17
     https://github.com/troglobit/quagga/tree/westermo/0.99.17

So far I've setup the repository, created a security/0.99.17 branch, with
patches from the official security/0.99.20 tree, and added the Westermo
patches (including Stephen Hemminger's Zebra route manager patch! :)
to a westermo/0.99.17 tree.

Before our own WeOS release I hope to add CVE fixes from Debian[4],
at the very least CVE-2011-3325 and CVE-2011-3326, i.e., DSA-2316-1
see[5] for more details.

Maybe someone else is interested in this effort. Iirc Joakim Tjernlund
also use 0.99.17 as a baseline for Transmode ...

Regards
  /Joachim

[1] - http://lists.quagga.net/pipermail/quagga-dev/2012-May/009391.html
[2] - http://www.westermo.com
[3] - http://github.com/troglobit/quagga
[4] - http://security-tracker.debian.org/tracker/source-package/quagga
[5] - http://security-tracker.debian.org/tracker/DSA-2316-1

&lt;/pre&gt;</description>
    <dc:creator>Joachim Nilsson</dc:creator>
    <dc:date>2012-05-21T18:16:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9371">
    <title>[quagga-dev 9352] OSPFv3-MIB</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9371</link>
    <description>&lt;pre&gt;Hi!

Implementation of OSPFv3-MIB in Quagga is incomplete and outdated: it
uses  an experimental  MIB instead  of the  one from  RFC 5643  and only
ospfv3AreaLsdbTable is implemented.

Is someone working on a more current implementation?
&lt;/pre&gt;</description>
    <dc:creator>Vincent Bernat</dc:creator>
    <dc:date>2012-05-17T09:03:30</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9369">
    <title>[quagga-dev 9350] OSPF6d: Problem with route delete. AccessingFreed memory</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9369</link>
    <description>&lt;pre&gt;Hi,
I was wondering if in the function - ospf6_route_remove_all() 
Are we not accessing freed memory (route) while trying to get 
the route next using ospf6_route_next(). 

Similar is the case in ospf6_intra_brouter_calculation() function.

We are freeing the memory in ospf6_route_remove()--&amp;gt; ospf6_route_unlock()
and on return to get the next route entry we use the same memory freed memory
again. 

Is it not an issue. 

Regards
Narender 



&lt;/pre&gt;</description>
    <dc:creator>narender</dc:creator>
    <dc:date>2012-05-16T14:32:55</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9366">
    <title>[quagga-dev 9347] Automated tests?</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9366</link>
    <description>&lt;pre&gt;Is there an automated test suite available for quagga?  I saw some 
mentions of tests with respect to the Open Source Routing group, but I 
didn't see anything about tests I could run myself.  I do see that 
there's a tests/ directory, but it looks pretty sparse... is that all 
that's available or am I missing tests that are stored elsewhere?

&lt;/pre&gt;</description>
    <dc:creator>Terri Oda</dc:creator>
    <dc:date>2012-05-14T23:07:56</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9365">
    <title>[quagga-dev 9346] OSPF: Problem with route distribution when restarting ospfd, since 0.99.18</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9365</link>
    <description>&lt;pre&gt;Hi!

We've seen OSPF issues when reconfiguring ospfd at runtime in our
testbeds at Westermo.  By editing its config file and restarting ospfd
we see problems with route distribution.

The problems started occurring in one of our testbeds when we upgraded
from 0.99.17 to 0.99.20. We've tested every release since .17 and now
even the latest Git, with the same result.

We've managed to reduce our testbed's 14 ARM-9 routers doing a simple
cost-change test, down to four Ubuntu 12.04 laptops restarting ospfd
on a single laptop.

Laptop setup, very simple. Two areas, one RIP network with loopback
/32 nets on R1 and R4. Most of the time it works, but sometimes when
we restart ospfd on R2 the edge router R1 never gets any routes.

After our initial tests using OSPF and RIP we tried to reduce
the topology even further by replacing RIP with another loopback
/32 net. I.e., we removed R4 and replaced the 10-network
with 99.99.99.99/32. Still, restarting ospfd on R2 causes
R1 to sometimes not get the the 99-network. The topology for this
setup is shown at the very end of this email.

First, OSPF &amp;amp; RIP setup:
 ______
|      |---| 66.66.66.66/32
|      |
|  R1  |
|      |
|______|
   |.1
   |
   | 172.12.0.0/24
   | Area 2
   |
   |.2
 ______
|      |
|      |
|  R2  |
|      |
|______|
   |.1
   |
   | 172.10.0.0/24
   | Area 0
   |
   |.2
 ______
|      |
| ASBR |
|  R3  |
|      |
|______|
   |.1
   |
   | 10.1.0.0/24
   |   RIP
   |.2
 ______  
|      |---| 14.0.0.1/32
|      |---| 15.0.0.1/32
|  R4  |---| 16.0.0.1/32
|      |
|______|

In reproducing the bug we restart ospfd on R2 by pressing Ctrl-C

while [ 1 ]; do
    sudo ./ospfd/ospfd -u root -g root -f ../ospfd.conf
    sleep 1;
done

Results ...

0.99.17:
    - Stable as a rock!

0.99.18 - Git:
    - Sometimes loss of 66-network in R3 and R4
    - Loss of all RIP nets in R1

Sadly we haven't yet had the time to try and figure out where the bug
is located.  However, we noticed that there was quite an overhaul of
the LSA refresh logic in 0.99.18.

Below is some debug info:
 _________________
|                 |
|        R1       |
|_________________|

# ip route ls
169.254.0.0/16 dev eth0  scope link  metric 1000
172.10.0.0/24 via 172.12.0.2 dev eth0  proto zebra  metric 20
172.12.0.0/24 dev eth0  proto kernel  scope link  src 172.12.0.1

R1# show ip ospf route
============ OSPF network routing table ============
N IA 172.10.0.0/24         [20] area: 0.0.0.2
                           via 172.12.0.2, eth0
N    172.12.0.0/24         [10] area: 0.0.0.2
                           directly attached to eth0

============ OSPF router routing table =============
R    172.12.0.2            [10] area: 0.0.0.2, ABR
                           via 172.12.0.2, eth0

============ OSPF external routing table ===========
&amp;lt;EMPTY&amp;gt;


 _________________
|                 |
|        R2       |
|_________________|

# ip route ls
10.1.0.0/24 via 172.10.0.2 dev eth0  proto zebra  metric 20
14.0.0.1 via 172.10.0.2 dev eth0  proto zebra  metric 20
15.0.0.1 via 172.10.0.2 dev eth0  proto zebra  metric 20
16.0.0.1 via 172.10.0.2 dev eth0  proto zebra  metric 20
66.66.66.66 via 172.12.0.1 dev eth1  proto zebra  metric 20
169.254.0.0/16 dev eth0  scope link  metric 1000
172.10.0.0/24 dev eth0  proto kernel  scope link  src 172.10.0.1
172.12.0.0/24 dev eth1  proto kernel  scope link  src 172.12.0.2

R2# show ip ospf route
============ OSPF network routing table ============
N    172.10.0.0/24         [10] area: 0.0.0.0
                           directly attached to eth0
N    172.12.0.0/24         [10] area: 0.0.0.2
                           directly attached to eth1

============ OSPF router routing table =============
R    10.1.0.1              [10] area: 0.0.0.0, ASBR
                           via 172.10.0.2, eth0
R    66.66.66.66           [10] area: 0.0.0.2, ASBR
                           via 172.12.0.1, eth1

============ OSPF external routing table ===========
N E2 10.1.0.0/24           [10/20] tag: 0
                           via 172.10.0.2, eth0
N E2 14.0.0.1/32           [10/20] tag: 0
                           via 172.10.0.2, eth0
N E2 15.0.0.1/32           [10/20] tag: 0
                           via 172.10.0.2, eth0
N E2 16.0.0.1/32           [10/20] tag: 0
                           via 172.10.0.2, eth0
N E2 66.66.66.66/32        [10/20] tag: 0
                           via 172.12.0.1, eth1

Second, OSPF-only setup:

 ______
|      |---| 66.66.66.66/32
|      |
|  R1  |
|      |
|______|
   |.1
   |
   | 172.12.0.0/24
   | Area 2
   |
   |.2
 ______
|      |
|      |
|  R2  |
|      |
|______|
   |.1
   |
   | 172.10.0.0/24
   | Area 0
   |
   |.2
 ______
|      |---| 99.99.99.99/32
|      |
|  R3  |
|      |
|______|

Hopefully someone has the patience to read this far and has an idea
about what is wrong. We are more than happy to help test patches.

Regards
 /Joachim

&lt;/pre&gt;</description>
    <dc:creator>Joachim Nilsson</dc:creator>
    <dc:date>2012-05-14T15:50:12</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9359">
    <title>[quagga-dev 9340] [PATCH] patchwork up &amp; running</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9359</link>
    <description>&lt;pre&gt;there is now a patchwork up &amp;amp; running at http://patchwork.quagga.net/

and this is a patch to test it :)

(the old patchwork at http://patchwork.diac24.net had to be flushed because the
update broke the mysql data.  that address is now an alias to the new one at
patchwork.quagga.net.  it's using postgres now.)
---
 FNORD |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 FNORD

diff --git a/FNORD b/FNORD
new file mode 100644
index 0000000..824fddb
--- /dev/null
+++ b/FNORD
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+fnord!
&lt;/pre&gt;</description>
    <dc:creator>David Lamparter</dc:creator>
    <dc:date>2012-05-10T12:46:35</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9353">
    <title>[quagga-dev 9334] Re: [PATCH] lib: drop heuristic IPv6 addressrecognitio</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9353</link>
    <description>&lt;pre&gt;Hi

I am running the patch I submitted back in September 2010 since a long
time now and it caused now havoc.

Please consider including it into the main stream repo.

&lt;/pre&gt;</description>
    <dc:creator>Roman Hoog Antink</dc:creator>
    <dc:date>2012-05-09T07:35:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9321">
    <title>[quagga-dev 9302] [RFC PATCH 00/25] Mostly bgpd optimizations</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9321</link>
    <description>&lt;pre&gt;From: "Jorge Boncompte [DTI2]" &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;

  This patchset is part of my work in the last weeks to optimize the speed
and memory usage of the bgpd daemon.

  My test case has been a full internet table loading on a pIII class
machine. With the patches just the table loading time went from 14 to 10
seconds. And memory usage it is a lot more stable, due to less heap
fragmentation.

  Please, take a look at it, comments welcome.

Jorge Boncompte [DTI2] (25):
  bgpd: optimize aspath string representation and assegments handling
  bgpd: optimize bgp_nexthop_self()
  bgpd: debug buffers cleanup and optimization
  bgpd: remove calls to peer_sort() from fast-path
  bgpd: optimize loops on [e]community_hash_make()
  bgpd: optimize bgp_info_cmp()
  bgpd: remove some useless initializations
  bgpd: reduce attrhash_make_key() indirections
  bgpd: use on stack struct attr_extra on bgp_attr_aggregate_intern()
  bgpd: cleanup bgp_attr_unintern()
  bgpd: use on stack struct attr_extra in bgp_attr_unintern()
  bgpd: fix struct attr_extra leak in bgp_default_originate()
  bgpd: use on stack struct attr_extra in bgp_update_receive()
  bgpd: bgp_attr_default_set() already allocates a struct attr_extra
  bgpd: reduce struct attr_extra allocations/freeing
  bgpd: Remove useless initialization
  bgpd: optimize holdtime timer cancelling
  bgpd: optimize bgp_update_main() in the soft_reconfig case
  bgpd: fix for bgp_node_lookup()
  bgpd: optimize bgp_aggregate_[increment|decrement]()
  micro-op bgp_node_[get|lookup]() and route_node_[get|lookup]()
  lib: remove RUSAGE_T from struct thread
  lib: micro-op for thread_get()
  lib: do not allocate/free thread funcnames
  lib: optimize IPV4_ADDR_[SAME|COPY]()

 bgpd/bgp_aspath.c     |  141 ++++++++++---------
 bgpd/bgp_aspath.h     |    1 +
 bgpd/bgp_attr.c       |  121 +++++++++--------
 bgpd/bgp_community.c  |   19 ++-
 bgpd/bgp_ecommunity.c |   21 ++-
 bgpd/bgp_mpath.c      |    2 +-
 bgpd/bgp_network.c    |    4 +-
 bgpd/bgp_nexthop.c    |  108 +++++++++++++---
 bgpd/bgp_nexthop.h    |    3 +-
 bgpd/bgp_packet.c     |   87 +++++++-----
 bgpd/bgp_route.c      |  357 +++++++++++++++++++++++++------------------------
 bgpd/bgp_table.c      |   20 ++-
 bgpd/bgp_vty.c        |    4 +-
 bgpd/bgp_zebra.c      |    8 +-
 bgpd/bgpd.c           |   57 +++++----
 bgpd/bgpd.h           |   24 ++--
 lib/memtypes.c        |    2 +-
 lib/prefix.c          |    2 +-
 lib/prefix.h          |    4 +-
 lib/table.c           |   18 ++-
 lib/thread.c          |   51 +++-----
 lib/thread.h          |    8 +-
 ospfd/ospf_packet.c   |    2 +-
 23 files changed, 594 insertions(+), 470 deletions(-)

&lt;/pre&gt;</description>
    <dc:creator>Jorge Boncompte [DTI2]</dc:creator>
    <dc:date>2012-05-07T17:52:50</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9310">
    <title>[quagga-dev 9291] [PATCH] bgpd: fix for leaked structbgp_adj_[in|out] on peer shutdown</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9310</link>
    <description>&lt;pre&gt;From: "Jorge Boncompte [DTI2]" &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;

    If a peer with soft-reconfiguration configured it's cleared, the
function bgp_clear_route_table() doesn't free the bgp_adj_in and bgp_adj_out
structures of route nodes that for some reason, ej. denied by a filter,
don't have routes attached "rn-&amp;gt;info == NULL".

* bgp_route.c: (bgp_clear_route_table) moved the clearing before the
  allocation of the work queue items to return memory to the system
  allocator before allocating new one to try to avoid heap fragmentation.

Signed-off-by: Jorge Boncompte [DTI2] &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;
---
 bgpd/bgp_route.c |   33 +++++++++++++++------------------
 1 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index eae13a2..c0255b1 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2798,9 +2798,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_clear_route_table (struct peer *peer, afi_t afi, safi_t safi,
       struct bgp_info *ri;
       struct bgp_adj_in *ain;
       struct bgp_adj_out *aout;
-      
-      if (rn-&amp;gt;info == NULL)
-        continue;
 
       /* XXX:TODO: This is suboptimal, every non-empty route_node is
        * queued for every clearing peer, regardless of whether it is
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2833,6 +2830,21 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_clear_route_table (struct peer *peer, afi_t afi, safi_t safi,
        * this may actually be achievable. It doesn't seem to be a huge
        * problem at this time,
        */
+      for (ain = rn-&amp;gt;adj_in; ain; ain = ain-&amp;gt;next)
+        if (ain-&amp;gt;peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
+          {
+            bgp_adj_in_remove (rn, ain);
+            bgp_unlock_node (rn);
+            break;
+          }
+      for (aout = rn-&amp;gt;adj_out; aout; aout = aout-&amp;gt;next)
+        if (aout-&amp;gt;peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
+          {
+            bgp_adj_out_remove (rn, aout, peer, afi, safi);
+            bgp_unlock_node (rn);
+            break;
+          }
+
       for (ri = rn-&amp;gt;info; ri; ri = ri-&amp;gt;next)
         if (ri-&amp;gt;peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
           {
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2848,21 +2860,6 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_clear_route_table (struct peer *peer, afi_t afi, safi_t safi,
             work_queue_add (peer-&amp;gt;clear_node_queue, cnq);
             break;
           }
-
-      for (ain = rn-&amp;gt;adj_in; ain; ain = ain-&amp;gt;next)
-        if (ain-&amp;gt;peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
-          {
-            bgp_adj_in_remove (rn, ain);
-            bgp_unlock_node (rn);
-            break;
-          }
-      for (aout = rn-&amp;gt;adj_out; aout; aout = aout-&amp;gt;next)
-        if (aout-&amp;gt;peer == peer || purpose == BGP_CLEAR_ROUTE_MY_RSCLIENT)
-          {
-            bgp_adj_out_remove (rn, aout, peer, afi, safi);
-            bgp_unlock_node (rn);
-            break;
-          }
     }
   return;
 }
&lt;/pre&gt;</description>
    <dc:creator>Jorge Boncompte [DTI2]</dc:creator>
    <dc:date>2012-05-07T16:17:33</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9309">
    <title>[quagga-dev 9290] [PATCH] bgpd: fix crash with vpnv4soft-reconfiguration</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9309</link>
    <description>&lt;pre&gt;From: "Jorge Boncompte [DTI2]" &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;

bgp_afi_node_get() expects a non-NULL prd for a SAFI_MPLS_VPN prefix.

* bgp_route.c: pass down the struct prefix_rd from bgp_soft_reconfig_in()
  and bgp_soft_reconfig_rsclient().

Signed-off-by: Jorge Boncompte [DTI2] &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;
---
 bgpd/bgp_route.c |   36 ++++++++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index c0255b1..8dc28c8 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2618,7 +2618,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_announce_route_all (struct peer *peer)
 
 static void
 bgp_soft_reconfig_table_rsclient (struct peer *rsclient, afi_t afi,
-        safi_t safi, struct bgp_table *table)
+        safi_t safi, struct bgp_table *table, struct prefix_rd *prd)
 {
   struct bgp_node *rn;
   struct bgp_adj_in *ain;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2629,8 +2629,11 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_soft_reconfig_table_rsclient (struct peer *rsclient, afi_t afi,
   for (rn = bgp_table_top (table); rn; rn = bgp_route_next (rn))
     for (ain = rn-&amp;gt;adj_in; ain; ain = ain-&amp;gt;next)
       {
+        struct bgp_info *ri = rn-&amp;gt;info;
+
         bgp_update_rsclient (rsclient, afi, safi, ain-&amp;gt;attr, ain-&amp;gt;peer,
-                &amp;amp;rn-&amp;gt;p, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, NULL, NULL);
+                &amp;amp;rn-&amp;gt;p, ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL, prd,
+                (bgp_info_extra_get (ri))-&amp;gt;tag);
       }
 }
 
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2641,18 +2644,25 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_soft_reconfig_rsclient (struct peer *rsclient, afi_t afi, safi_t safi)
   struct bgp_node *rn;
   
   if (safi != SAFI_MPLS_VPN)
-    bgp_soft_reconfig_table_rsclient (rsclient, afi, safi, NULL);
+    bgp_soft_reconfig_table_rsclient (rsclient, afi, safi, NULL, NULL);
 
   else
     for (rn = bgp_table_top (rsclient-&amp;gt;bgp-&amp;gt;rib[afi][safi]); rn;
             rn = bgp_route_next (rn))
       if ((table = rn-&amp;gt;info) != NULL)
-        bgp_soft_reconfig_table_rsclient (rsclient, afi, safi, table);
+        {
+          struct prefix_rd prd;
+          prd.family = AF_UNSPEC;
+          prd.prefixlen = 64;
+          memcpy(&amp;amp;prd.val, rn-&amp;gt;p.u.val, 8);
+
+          bgp_soft_reconfig_table_rsclient (rsclient, afi, safi, table, &amp;amp;prd);
+        }
 }
 
 static void
 bgp_soft_reconfig_table (struct peer *peer, afi_t afi, safi_t safi,
- struct bgp_table *table)
+ struct bgp_table *table, struct prefix_rd *prd)
 {
   int ret;
   struct bgp_node *rn;
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2666,9 +2676,12 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_soft_reconfig_table (struct peer *peer, afi_t afi, safi_t safi,
       {
 if (ain-&amp;gt;peer == peer)
   {
+    struct bgp_info *ri = rn-&amp;gt;info;
+
     ret = bgp_update (peer, &amp;amp;rn-&amp;gt;p, ain-&amp;gt;attr, afi, safi,
       ZEBRA_ROUTE_BGP, BGP_ROUTE_NORMAL,
-      NULL, NULL, 1);
+      prd, (bgp_info_extra_get (ri))-&amp;gt;tag, 1);
+
     if (ret &amp;lt; 0)
       {
 bgp_unlock_node (rn);
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -2689,12 +2702,19 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_soft_reconfig_in (struct peer *peer, afi_t afi, safi_t safi)
     return;
 
   if (safi != SAFI_MPLS_VPN)
-    bgp_soft_reconfig_table (peer, afi, safi, NULL);
+    bgp_soft_reconfig_table (peer, afi, safi, NULL, NULL);
   else
     for (rn = bgp_table_top (peer-&amp;gt;bgp-&amp;gt;rib[afi][safi]); rn;
  rn = bgp_route_next (rn))
       if ((table = rn-&amp;gt;info) != NULL)
-bgp_soft_reconfig_table (peer, afi, safi, table);
+        {
+          struct prefix_rd prd;
+          prd.family = AF_UNSPEC;
+          prd.prefixlen = 64;
+          memcpy(&amp;amp;prd.val, rn-&amp;gt;p.u.val, 8);
+
+          bgp_soft_reconfig_table (peer, afi, safi, table, &amp;amp;prd);
+        }
 }
 
 
&lt;/pre&gt;</description>
    <dc:creator>Jorge Boncompte [DTI2]</dc:creator>
    <dc:date>2012-05-07T16:17:34</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9308">
    <title>[quagga-dev 9289] [RFC PATCH] lib: fix thread_cancel_event()</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9308</link>
    <description>&lt;pre&gt;From: "Jorge Boncompte [DTI2]" &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;

  ospfd was crashing some times on neighbour going down. The cause was that
ospf_nsm_event() was accessing already freed memory in ospf_nbr_delete()
call from ospf_nsm_event().

  What happens is that since commit b5043aab (lib: fix incorrect thread
list...) now a thread can be on the event and ready lists but
thread_cancel_event() doesn't account for that.

* thread.c: (thread_cancel_event) loop on the ready list too to cancel
  pending events.

Signed-off-by: Jorge Boncompte [DTI2] &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;
---
 lib/thread.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/lib/thread.c b/lib/thread.c
index b36c43a..dd0413b 100644
--- a/lib/thread.c
+++ b/lib/thread.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -916,6 +916,24 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; thread_cancel_event (struct thread_master *m, void *arg)
           thread_add_unuse (m, t);
         }
     }
+
+  /* thread can be on the ready list too */
+  thread = m-&amp;gt;ready.head;
+  while (thread)
+    {
+      struct thread *t;
+
+      t = thread;
+      thread = t-&amp;gt;next;
+
+      if (t-&amp;gt;arg == arg)
+        {
+          ret++;
+          thread_list_delete (&amp;amp;m-&amp;gt;ready, t);
+          t-&amp;gt;type = THREAD_UNUSED;
+          thread_add_unuse (m, t);
+        }
+    }
   return ret;
 }
 
&lt;/pre&gt;</description>
    <dc:creator>Jorge Boncompte [DTI2]</dc:creator>
    <dc:date>2012-05-07T16:17:31</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9307">
    <title>[quagga-dev 9288] [RFC PATCH] bgpd: don't advertise routes withpeer address as nexthop</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9307</link>
    <description>&lt;pre&gt;From: "Jorge Boncompte [DTI2]" &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;

* bgp_route.c: (bgp_announce_check) check that the peer address it is
  not the same as the nexthop address per RFC4271 5.1.3. Fix the IPV6
  check to use the rigth addresses.

Signed-off-by: Jorge Boncompte [DTI2] &amp;lt;jorge&amp;lt; at &amp;gt;dti2.net&amp;gt;
---
 bgpd/bgp_route.c |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index d96224d..eae13a2 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -803,13 +803,15 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt; bgp_announce_check (struct bgp_info *ri, struct peer *peer, struct prefix *p,
   if (from == peer)
     return 0;
 
-  /* If peer's id and route's nexthop are same. draft-ietf-idr-bgp4-23 5.1.3 */
+  /* If peer's id or address and route's nexthop are the same. RFC4271 5.1.3 */
   if (p-&amp;gt;family == AF_INET
-      &amp;amp;&amp;amp; IPV4_ADDR_SAME(&amp;amp;peer-&amp;gt;remote_id, &amp;amp;riattr-&amp;gt;nexthop))
+      &amp;amp;&amp;amp; (IPV4_ADDR_SAME(&amp;amp;peer-&amp;gt;remote_id, &amp;amp;riattr-&amp;gt;nexthop) ||
+          IPV4_ADDR_SAME(&amp;amp;peer-&amp;gt;su_remote-&amp;gt;sin.sin_addr, &amp;amp;riattr-&amp;gt;nexthop)))
     return 0;
 #ifdef HAVE_IPV6
-  if (p-&amp;gt;family == AF_INET6
-     &amp;amp;&amp;amp; IPV6_ADDR_SAME(&amp;amp;peer-&amp;gt;remote_id, &amp;amp;riattr-&amp;gt;nexthop))
+  if (p-&amp;gt;family == AF_INET6 &amp;amp;&amp;amp; riattr-&amp;gt;extra
+      &amp;amp;&amp;amp; IPV6_ADDR_SAME(&amp;amp;peer-&amp;gt;su_remote-&amp;gt;sin6.sin6_addr,
+&amp;amp;riattr-&amp;gt;extra-&amp;gt;mp_nexthop_global))
     return 0;
 #endif
 
&lt;/pre&gt;</description>
    <dc:creator>Jorge Boncompte [DTI2]</dc:creator>
    <dc:date>2012-05-07T16:17:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9305">
    <title>[quagga-dev 9286] PATCH: Build without IPv6</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9305</link>
    <description>&lt;pre&gt;Minor build fixes for building without IPv6/RTADV support.

Regards
 /Joachim
&lt;/pre&gt;</description>
    <dc:creator>Joachim Nilsson</dc:creator>
    <dc:date>2012-05-07T09:30:15</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9303">
    <title>[quagga-dev 9284] Changing router-id after startup</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9303</link>
    <description>&lt;pre&gt;Hello,

I am a student working on some extensions for ospfv3 autoconfig and I need
to be able to change the router-id at any moment in case of duplicate
router-id's on the network

I can detect when there are duplicates on the network and decide which
router changes but I can't make the change correctly.

What I do is change the router-id fields in the ospf6 structure:

...
generate new router id
...
ospf6-&amp;gt;router_id_static = new_router_id;
ospf6-&amp;gt;router_id  = new_router_id;

And this seems to work because the other routers correctly update their spf
tree but something goes wrong in the routes in the changing router.

So what should be done after this to ensure that everything else takes the
change into account? something in zebra daemon?

I suppose some things should be purged and rebuilt but I can't seem to find
what, I tried some things like:

ospf6_lsdb_remove_all (o-&amp;gt;lsdb);

or

ospf6_spf_init ();

But nothing seems to work.

And also when I try to change through the console:

lubuntu1OSPF6(config-ospf6)# router-id 0.0.0.142

Has no effet at all beside changing ospf6-&amp;gt;router_id_static only. By the
way, what is the difference between router_id and router_id_static?

David Dyja
d.dyja &amp;lt; at &amp;gt;student.ulg.ac.be
&lt;/pre&gt;</description>
    <dc:creator>David Dyja</dc:creator>
    <dc:date>2012-05-06T18:55:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9296">
    <title>[quagga-dev 9277] MPLS VPN in bgpd</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9296</link>
    <description>&lt;pre&gt;For my many sins I have spent the day looking at the SAFI_MPLS_VPN
stuff.

I note that when constructing an MP_REACH and an MP_UNREACH that the
tag part does not appear to have the "Bottom of Stack" bit set.  Now,
this may be because somewhere in the RFCs it says that there will only
ever be one label in the stack for MP_REACH.  Of course, MP_UNREACH
goes with a single NULL Label in any case...

Can anyone point me in the direction of the RFC which says that
"Bottom of Stack" is not required ?  Or have I missed the piece of
code which sets it ?

Thanks,

Chris
&lt;/pre&gt;</description>
    <dc:creator>'Chris Hall'</dc:creator>
    <dc:date>2012-05-05T18:53:32</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9293">
    <title>[quagga-dev 9274] problem with ospf6d SPF calculation? Losing ASEtype 1 default route</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9293</link>
    <description>&lt;pre&gt;Got an odd issue with IPv6 ospf6d.

I have a couple quagga routers (0.99.20.1 on linux) that share 
a network with a Cisco router that is functioning as Area Border Router.
The Area is 131.94.128.0

The cisco Area Border Router also connects to area 0. In area 0 is a
ASBR that is injecting a default route (::0/0)

When I bring up router1 all seems fine. Router1 receives and uses 
a few routes from area 0, and announces a downstream network as well.

But as soon as I bring up router 2, after the DB exchange a LSA is sent
from router2 to router1, and this causes router1 to do a SPF calculation.
When router1 does this SPF calculation it loses the default route. 
Well, it discards the default route.

router2 comes up fine, and it does use the ASE default route. 
Until something changes and a SPF calc is done on router2, then 
it will discard the default route.

Any ideas what is happening here? It doesn't make sense to me
other than some bug in the SPF calculation. But maybe I am 
missing something??


Details available via web in directory 
http://users.cis.fiu.edu/~esj/quagga-problem-ospf3/



http://users.cis.fiu.edu/~esj/quagga-problem-ospf3/network.png 
is the picture


http://users.cis.fiu.edu/~esj/quagga-problem-ospf3/router1.ospf6d.conf
http://users.cis.fiu.edu/~esj/quagga-problem-ospf3/router2.ospf6d.conf
are the relevant parts of the config files of the two quagga routers


E

&lt;/pre&gt;</description>
    <dc:creator>Eric S. Johnson</dc:creator>
    <dc:date>2012-05-04T20:51:53</dc:date>
  </item>
  <item rdf:about="http://comments.gmane.org/gmane.network.quagga.devel/9281">
    <title>[quagga-dev 9262] zebra: Any planned support for specifying metricon static routes?</title>
    <link>http://comments.gmane.org/gmane.network.quagga.devel/9281</link>
    <description>&lt;pre&gt;Hi everyone!

Anyone planning on adding support for setting metric on static routes in
Zebra? Or is this redundant, considering the possibility to set a
distance instead?

Also, I read earlier that there were some thoughts on merging Static
and Kernel routes in some way or form. Or did I dream this?

Regards
 /Joachim


&lt;/pre&gt;</description>
    <dc:creator>Joachim Nilsson</dc:creator>
    <dc:date>2012-05-04T09:56:31</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.network.quagga.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.network.quagga.devel</link>
  </textinput>
</rdf:RDF>

