<!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 Lexi!</p>
<p>(Explicit Cc to David)</p>
<p>On Sun, May 31, 2026 at 10:57:54PM +0100, Lexi Winter wrote:</p>
<blockquote>
<p>the BIRD documentation says for the “direct” protocol[0]:</p>
<blockquote>
<p>The question is whether it is a good idea to have such device routes
in BIRD routing table. OS kernel usually handles device routes for
directly connected networks by itself so we don’t need (and don’t want)
to export these routes to the kernel protocol. OSPF protocol creates
device routes for its interfaces itself and BGP protocol is usually used
for exporting aggregate routes. But the Direct protocol is necessary for
distance-vector protocols like RIP or Babel to announce local
networks.</p>
</blockquote>
<p>[0]
https://bird.network.cz/?get_doc&v=30&f=bird-6.html#ss6.7</p>
</blockquote>
<p>This has not changed for a long time and the new versions have the
same text but just for the record, we changed websites and we’re still
failing to setup redirects from the old one.</p>
<p>→ https://bird.nic.cz/doc/bird-3.3.0.html#direct</p>
<blockquote>
<p>as i read this, it is suggesting that if BIRD is only running OSPF,
then the “direct” protocol is not needed. however, i’ve tested this and
i’m not sure it’s true.</p>
</blockquote>
<p>I’m quite sure it’s true for both Linux and BSD.</p>
<blockquote>
<p>without direct, and with a basic OSPF configuration with no peers,
BIRD will flag the OSPF interface routes with ‘!’:</p>
<p>root@witch:/usr/local/etc # birdc show route BIRD 3.2.0 ready. Table
master4: 81.2.96.160/28 unicast [core4 22:45:00.630] ! I (150/10)
[198.18.2.4] dev genet0</p>
<p>Table master6: 2001:8b0:aab5:c401::/64 unicast [core6 22:45:00.630] !
I (150/10) [198.18.2.4] dev genet0</p>
<p>it will also log very much some netlink errors:</p>
<p>May 31 22:51:04 witch bird[31390]: Netlink: File exists May 31
22:51:04 witch syslogd: last message repeated 1 times May 31 22:52:04
witch bird[31390]: Netlink: Address already in use May 31 22:52:04 witch
bird[31390]: Netlink: File exists May 31 22:52:04 witch syslogd: last
message repeated 1 times</p>
</blockquote>
<p>This looks like a kernel protocol bug. If you are, by any chance,
able to describe to us the interface configuration and BIRD
configuration, we’d be very pleased so that we don’t have to try
<em>something</em>. You may send this off-list of course.</p>
<blockquote>
<p>the OSPF interface routes are correctly installed (or rather, not
installed, since the kernel already installed them):</p>
<p>root@witch:/usr/local/etc # birdc show route BIRD 3.2.0 ready. Table
master4: 81.2.96.160/28 unicast [direct1 22:53:29.436] * (240) dev
genet0 unicast [core4 22:53:29.529] I (150/10) [198.18.2.4] dev
genet0</p>
<p>Table master6: 2001:8b0:aab5:c401::/64 unicast [direct1 22:53:29.436]
* (240) dev genet0 unicast [core6 22:53:29.529] I (150/10) [198.18.2.4]
dev genet0</p>
</blockquote>
<p>This is very weird.</p>
<blockquote>
<p>and BIRD does not log anymore the netlink-related errors.</p>
</blockquote>
<p>This is even more weird.</p>
<blockquote>
<p>i tested this on FreeBSD 15.0, so possibly this is a FreeBSD-specific
behaviour that isn’t present on Linux; i don’t have any Linux systems to
test with. but, i think the documentation of the “direct” protocol could
be changed to indicate that configuring it may be necessary in at least
some situations.</p>
</blockquote>
<p>We’ll try this on FreeBSD 15.0 and see what happens. Thank you for
reporting this!</p>
<p>–<br />
Maria Matejka (she/her) | BIRD Team Leader | CZ.NIC, z.s.p.o.</p>
</body>
</html>