<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<style>
html {
line-height: 1.2;
font-family: serif;
font-size: 0.9em;
color: black;
background-color: white;
}
body {
margin: 0;
margin-right: auto;
max-width: 36em;
padding: 1em;
hyphens: auto;
overflow-wrap: break-word;
text-rendering: optimizeLegibility;
font-kerning: normal;
}
@media print {
body {
background-color: transparent;
color: black;
font-size: 11pt;
}
p, h2, h3 {
orphans: 3;
widows: 3;
}
h2, h3, h4 {
page-break-after: avoid;
}
}
p {
margin: 1em 0;
}
a {
color: black;
}
a:visited {
color: black;
}
img {
max-width: 100%;
}
h1, h2, h3, h4, h5, h6 {
margin-top: 1.4em;
}
h5, h6 {
font-size: 1em;
font-style: italic;
}
h6 {
font-weight: normal;
}
ol, ul {
padding-left: 1.7em;
margin-top: 1em;
}
li > ol, li > ul {
margin-top: 0;
}
blockquote {
margin: 0.5em;
padding-left: 0.5em;
border-left: 2px solid #e6e6e6;
color: #444;
}
code {
font-family: 'Lucida Console', monospace;
font-size: 95%;
margin: 0;
}
pre {
margin: 1em 0;
overflow: auto;
max-width: unset;
width: fit-content;
}
pre code {
padding: 0;
overflow: visible;
overflow-wrap: normal;
max-width: unset;
white-space: pre-wrap;
}
pre code span {
white-space: pre;
}
.sourceCode {
background-color: transparent;
overflow: visible;
}
code.diff span.kw,
code.diff span.dt {
font-weight: bold;
}
code.diff span.va {
background-color: rgba(192, 255, 192, 64);
color: rgb(0, 64, 0);
}
code.diff span.st {
background-color: rgba(255, 192, 192, 64);
color: rgb(64, 0, 0);
}
pre.diff {
background-color: rgb(240, 240, 240);
padding: 0.4em;
border: 1pt solid grey;
}
hr {
background-color: black;
border: none;
height: 1px;
margin: 1em 0;
}
table {
margin: 1em 0;
border-collapse: collapse;
width: 100%;
overflow-x: auto;
display: block;
font-variant-numeric: lining-nums tabular-nums;
}
table caption {
margin-bottom: 0.75em;
}
tbody {
margin-top: 0.5em;
border-top: 1px solid black;
border-bottom: 1px solid black;
}
th {
border-top: 1px solid black;
padding: 0.25em 0.5em 0.25em 0.5em;
}
td {
padding: 0.125em 0.5em 0.25em 0.5em;
}
header {
margin-bottom: 4em;
text-align: center;
}
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
span.underline{text-decoration: underline;}
div.column{display: inline-block; vertical-align: top; width: 50%;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
q { quotes: "„" "”" "»" "«"; }
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
</head>
<body>
<p>Hello Douglas!</p>
<p>On Mon, Sep 08, 2025 at 08:47:46AM -0300, Douglas Fischer wrote:</p>
<blockquote>
<p>[…]<br />
On the other hand, I see that there’s no way to leave BIRD without
enabling this type of more standardized interaction with configurations
and monitoring. Which leads me to believe it makes sense to consider
finding a solution for this through a set of other software. I know
almost nothing about programming, but I see that in one way or another,
tools like ARouteServer, birdwatcher, pathvector, or RoutingConfigApi…
are already doing this, the hard way, but they do it. I imagine it makes
sense for there to be some kind of intermediate layer that can be used
by software like the ones mentioned.</p>
</blockquote>
<p>That’s, in the end, another good reason to stick to one single API
method suited for our most demanding customers (hello IXPs!) … and for
everybody who needs something more human readable while being still
parseable, there may be an intermediate layer.</p>
<p>Yet please note that esp. encoding IP addresses in the intermediate
layers has always been an awful mess, so the intermediate layer may
happen to behave non-intuitively when some conversions happen.</p>
<blockquote>
<p>Another point that came to mind is the use of BIRD in Kubernetes CNI
environments. I remembered Calico using BIRD 1.6[1]. […] [1] P.S.: Does
anyone have any information on whether Tigera has commented on this? Did
they look for newer versions?</p>
</blockquote>
<p>I have seen literally no communication from them ever and I have
stopped trying to reach out to them. All in all, it’s valid to use old
unsupported versions if that does what you want. I personally
occasionally play abandonware games as well.</p>
<blockquote>
<p>If I understand correctly… They somehow use confd to retrieve the
necessary objects and attributes from etcd and assemble the bird
configuration. And in the same way, they cyclically compare these two
things to implement some configuration resync.</p>
</blockquote>
<p>I would very much say that one should simply always compile the new
config file and run <code>birdc conf</code>. BIRD does its comparison
internaly and if the config file isn’t like a gigabyte or so (hello IXPs
again), this is very fast.</p>
<p>There are also some efforts to extend the API also to configuration
but please do not expect it in near future unless somebody really throws
a bunch of money on that and much more. This is a really big fish to
fry.</p>
<p>Have a nice day! Maria</p>
<p>–<br />
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.</p>
</body>
</html>