diff options
-rw-r--r-- | NEWS | 37 | ||||
-rw-r--r-- | client/client.c | 2 | ||||
-rw-r--r-- | misc/bird.spec | 2 | ||||
-rw-r--r-- | nest/cli.h | 2 | ||||
-rw-r--r-- | proto/bgp/packets.c | 4 | ||||
-rw-r--r-- | sysdep/bsd/krt-sock.c | 4 | ||||
-rw-r--r-- | sysdep/config.h | 2 | ||||
-rw-r--r-- | sysdep/unix/main.c | 15 |
8 files changed, 57 insertions, 11 deletions
@@ -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 @@ -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; } |