mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-11-09 20:58:44 +00:00
Merge commit '1e47b9f203aaaad0fb658d40a1670f1d0437f1f8' into thread-next
This commit is contained in:
commit
21c4c8eafb
37
NEWS
37
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
|
||||
|
@ -153,7 +153,7 @@ submit_init_command(char *cmd_raw)
|
||||
if (!cmd)
|
||||
{
|
||||
cleanup();
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
submit_server_command(cmd);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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')
|
||||
{
|
||||
t++;
|
||||
c->rx_pos = c->rx_buf;
|
||||
c->rx_aux = t;
|
||||
*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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user