mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2025-01-03 15:41:54 +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)
|
Version 2.0.10 (2022-06-16)
|
||||||
o BGP performance improvements
|
o BGP performance improvements
|
||||||
o BFD: New 'strict bind' option
|
o BFD: New 'strict bind' option
|
||||||
|
@ -153,7 +153,7 @@ submit_init_command(char *cmd_raw)
|
|||||||
if (!cmd)
|
if (!cmd)
|
||||||
{
|
{
|
||||||
cleanup();
|
cleanup();
|
||||||
exit(0);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
submit_server_command(cmd);
|
submit_server_command(cmd);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
Summary: BIRD Internet Routing Daemon
|
Summary: BIRD Internet Routing Daemon
|
||||||
Name: bird
|
Name: bird
|
||||||
Version: 2.0.10
|
Version: 2.0.11
|
||||||
Release: 1
|
Release: 1
|
||||||
Copyright: GPL
|
Copyright: GPL
|
||||||
Group: Networking/Daemons
|
Group: Networking/Daemons
|
||||||
|
@ -29,7 +29,7 @@ typedef struct cli {
|
|||||||
node n; /* Node in list of all log hooks */
|
node n; /* Node in list of all log hooks */
|
||||||
pool *pool;
|
pool *pool;
|
||||||
struct birdsock *sock; /* Underlying socket */
|
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;
|
struct cli_out *tx_buf, *tx_pos, *tx_write;
|
||||||
event *event;
|
event *event;
|
||||||
void (*cont)(struct cli *c);
|
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)
|
if (len)
|
||||||
{
|
{
|
||||||
/* Bad peer AS - we would like to print the AS */
|
/* Bad peer AS / unacceptable hold time - print the value as decimal number */
|
||||||
if ((code == 2) && (subcode == 2) && ((len == 2) || (len == 4)))
|
if ((code == 2) && ((subcode == 2) || (subcode == 6)) && ((len == 2) || (len == 4)))
|
||||||
{
|
{
|
||||||
t += bsprintf(t, ": %u", (len == 2) ? get_u16(data) : get_u32(data));
|
t += bsprintf(t, ": %u", (len == 2) ? get_u16(data) : get_u32(data));
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -193,6 +193,10 @@ static inline void
|
|||||||
sockaddr_fill_dl(struct sockaddr_dl *sa, struct iface *ifa)
|
sockaddr_fill_dl(struct sockaddr_dl *sa, struct iface *ifa)
|
||||||
{
|
{
|
||||||
uint len = OFFSETOF(struct sockaddr_dl, sdl_data);
|
uint len = OFFSETOF(struct sockaddr_dl, sdl_data);
|
||||||
|
|
||||||
|
/* Workaround for FreeBSD 13.0 */
|
||||||
|
len = MAX(len, sizeof(struct sockaddr));
|
||||||
|
|
||||||
memset(sa, 0, len);
|
memset(sa, 0, len);
|
||||||
sa->sdl_len = len;
|
sa->sdl_len = len;
|
||||||
sa->sdl_family = AF_LINK;
|
sa->sdl_family = AF_LINK;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#ifdef GIT_LABEL
|
#ifdef GIT_LABEL
|
||||||
#define BIRD_VERSION XSTR1(GIT_LABEL)
|
#define BIRD_VERSION XSTR1(GIT_LABEL)
|
||||||
#else
|
#else
|
||||||
#define BIRD_VERSION "2.0.10"
|
#define BIRD_VERSION "2.0.11"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Include parameters determined by configure script */
|
/* Include parameters determined by configure script */
|
||||||
|
@ -448,7 +448,7 @@ cli_get_command(cli *c)
|
|||||||
{
|
{
|
||||||
sock *s = c->sock;
|
sock *s = c->sock;
|
||||||
ASSERT_DIE(c->sock);
|
ASSERT_DIE(c->sock);
|
||||||
byte *t = c->rx_aux ? : s->rbuf;
|
byte *t = s->rbuf;
|
||||||
byte *tend = s->rpos;
|
byte *tend = s->rpos;
|
||||||
byte *d = c->rx_pos;
|
byte *d = c->rx_pos;
|
||||||
byte *dend = c->rx_buf + CLI_RX_BUF_SIZE - 2;
|
byte *dend = c->rx_buf + CLI_RX_BUF_SIZE - 2;
|
||||||
@ -459,16 +459,22 @@ cli_get_command(cli *c)
|
|||||||
t++;
|
t++;
|
||||||
else if (*t == '\n')
|
else if (*t == '\n')
|
||||||
{
|
{
|
||||||
t++;
|
|
||||||
c->rx_pos = c->rx_buf;
|
|
||||||
c->rx_aux = t;
|
|
||||||
*d = 0;
|
*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;
|
return (d < dend) ? 1 : -1;
|
||||||
}
|
}
|
||||||
else if (d < dend)
|
else if (d < dend)
|
||||||
*d++ = *t++;
|
*d++ = *t++;
|
||||||
}
|
}
|
||||||
c->rx_aux = s->rpos = s->rbuf;
|
|
||||||
|
s->rpos = s->rbuf;
|
||||||
c->rx_pos = d;
|
c->rx_pos = d;
|
||||||
return 0;
|
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->pool = c->pool; /* We need to have all the socket buffers allocated in the cli pool */
|
||||||
s->fast_rx = 1;
|
s->fast_rx = 1;
|
||||||
c->rx_pos = c->rx_buf;
|
c->rx_pos = c->rx_buf;
|
||||||
c->rx_aux = NULL;
|
|
||||||
rmove(s, c->pool);
|
rmove(s, c->pool);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user