summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS37
-rw-r--r--client/client.c2
-rw-r--r--misc/bird.spec2
-rw-r--r--nest/cli.h2
-rw-r--r--proto/bgp/packets.c4
-rw-r--r--sysdep/bsd/krt-sock.c4
-rw-r--r--sysdep/config.h2
-rw-r--r--sysdep/unix/main.c15
8 files changed, 57 insertions, 11 deletions
diff --git a/NEWS b/NEWS
index e61a0b74..1fd83c86 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,40 @@
+Version 2.0.11 (2022-11-12)
+ o BGP roles (RFC 9234)
+ o BGP: Keepalive time scaling
+ o BGP: New 'min hold time' and 'min keepalive time' options
+ o BGP: New 'next hop prefer global' option
+ o Filter: For loops and direct recursion
+ o Filter: Mixed declarations of local variables
+ o Filter: Improved static type checks
+ o Filter: Literal [] for empty set
+ o Linux: Netlink KRT improvements
+ o BSD: Experimental support for Netlink API
+ o Memory management improvements
+ o Many bugfixes
+
+ Notes:
+
+ In contrast to prior versions, configured keepalive time in BGP now scales
+ with negotiated hold time to maintain proportion between the keepalive time
+ and the hold time.
+
+ The Linux KRT was updated to use the recent API for IPv6 ECMP routes instead
+ of the legacy one. Consequently, the Linux versions older than 4.11 are no
+ longer supported, at least for IPv6 ECMP routes. Also, routing table scanning
+ now runs separately for each table to avoid congestion.
+
+ There is a minor change in recursive next hop processing. Previously,
+ recursive next hop must be resolved through a non-recursive route, now it must
+ be resolved through a prefix where both the best route and all routes with the
+ same preference (as the best route) are non-recursive. The old behavior might
+ lead in some corner cases to an infinite loop of recursive next hop resolution
+ due to a priority inversion.
+
+ There is a minor change in the 'configure undo' command, it is no longer
+ available after failed reconfiguration, as the old configuration is already
+ released.
+
+
Version 2.0.10 (2022-06-16)
o BGP performance improvements
o BFD: New 'strict bind' option
diff --git a/client/client.c b/client/client.c
index 934e16e0..397db73d 100644
--- a/client/client.c
+++ b/client/client.c
@@ -153,7 +153,7 @@ submit_init_command(char *cmd_raw)
if (!cmd)
{
cleanup();
- exit(0);
+ exit(1);
}
submit_server_command(cmd);
diff --git a/misc/bird.spec b/misc/bird.spec
index c3fdd7d6..04b58bd9 100644
--- a/misc/bird.spec
+++ b/misc/bird.spec
@@ -1,6 +1,6 @@
Summary: BIRD Internet Routing Daemon
Name: bird
-Version: 2.0.10
+Version: 2.0.11
Release: 1
Copyright: GPL
Group: Networking/Daemons
diff --git a/nest/cli.h b/nest/cli.h
index 2b96da5b..2d876571 100644
--- a/nest/cli.h
+++ b/nest/cli.h
@@ -29,7 +29,7 @@ typedef struct cli {
node n; /* Node in list of all log hooks */
pool *pool;
struct birdsock *sock; /* Underlying socket */
- byte *rx_buf, *rx_pos, *rx_aux; /* sysdep */
+ byte *rx_buf, *rx_pos; /* sysdep */
struct cli_out *tx_buf, *tx_pos, *tx_write;
event *event;
void (*cont)(struct cli *c);
diff --git a/proto/bgp/packets.c b/proto/bgp/packets.c
index 04e4505c..0b8a899a 100644
--- a/proto/bgp/packets.c
+++ b/proto/bgp/packets.c
@@ -3145,8 +3145,8 @@ bgp_log_error(struct bgp_proto *p, u8 class, char *msg, uint code, uint subcode,
if (len)
{
- /* Bad peer AS - we would like to print the AS */
- if ((code == 2) && (subcode == 2) && ((len == 2) || (len == 4)))
+ /* Bad peer AS / unacceptable hold time - print the value as decimal number */
+ if ((code == 2) && ((subcode == 2) || (subcode == 6)) && ((len == 2) || (len == 4)))
{
t += bsprintf(t, ": %u", (len == 2) ? get_u16(data) : get_u32(data));
goto done;
diff --git a/sysdep/bsd/krt-sock.c b/sysdep/bsd/krt-sock.c
index 0706f546..fcf9ac4d 100644
--- a/sysdep/bsd/krt-sock.c
+++ b/sysdep/bsd/krt-sock.c
@@ -193,6 +193,10 @@ static inline void
sockaddr_fill_dl(struct sockaddr_dl *sa, struct iface *ifa)
{
uint len = OFFSETOF(struct sockaddr_dl, sdl_data);
+
+ /* Workaround for FreeBSD 13.0 */
+ len = MAX(len, sizeof(struct sockaddr));
+
memset(sa, 0, len);
sa->sdl_len = len;
sa->sdl_family = AF_LINK;
diff --git a/sysdep/config.h b/sysdep/config.h
index 5cdadbb0..9b0591a3 100644
--- a/sysdep/config.h
+++ b/sysdep/config.h
@@ -13,7 +13,7 @@
#ifdef GIT_LABEL
#define BIRD_VERSION XSTR1(GIT_LABEL)
#else
-#define BIRD_VERSION "2.0.10"
+#define BIRD_VERSION "2.0.11"
#endif
/* Include parameters determined by configure script */
diff --git a/sysdep/unix/main.c b/sysdep/unix/main.c
index b15376cc..1ed57a99 100644
--- a/sysdep/unix/main.c
+++ b/sysdep/unix/main.c
@@ -448,7 +448,7 @@ cli_get_command(cli *c)
{
sock *s = c->sock;
ASSERT_DIE(c->sock);
- byte *t = c->rx_aux ? : s->rbuf;
+ byte *t = s->rbuf;
byte *tend = s->rpos;
byte *d = c->rx_pos;
byte *dend = c->rx_buf + CLI_RX_BUF_SIZE - 2;
@@ -459,16 +459,22 @@ cli_get_command(cli *c)
t++;
else if (*t == '\n')
{
+ *d = 0;
t++;
+
+ /* Move remaining data and reset pointers */
+ uint rest = (t < tend) ? (tend - t) : 0;
+ memmove(s->rbuf, t, rest);
+ s->rpos = s->rbuf + rest;
c->rx_pos = c->rx_buf;
- c->rx_aux = t;
- *d = 0;
+
return (d < dend) ? 1 : -1;
}
else if (d < dend)
*d++ = *t++;
}
- c->rx_aux = s->rpos = s->rbuf;
+
+ s->rpos = s->rbuf;
c->rx_pos = d;
return 0;
}
@@ -516,7 +522,6 @@ cli_connect(sock *s, uint size UNUSED)
s->pool = c->pool; /* We need to have all the socket buffers allocated in the cli pool */
s->fast_rx = 1;
c->rx_pos = c->rx_buf;
- c->rx_aux = NULL;
rmove(s, c->pool);
return 1;
}