0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 17:51:53 +00:00

Merge commit '913ec57f' into thread-next-iface

This commit is contained in:
Maria Matejka 2023-04-14 13:43:24 +02:00
commit 1106927213
5 changed files with 22 additions and 15 deletions

View File

@ -1910,7 +1910,7 @@ protocol sections.
<label id="babel-intro"> <label id="babel-intro">
<p>The Babel protocol <p>The Babel protocol
(<rfc id="6126">) is a loop-avoiding distance-vector routing protocol that is (<rfc id="8966">) is a loop-avoiding distance-vector routing protocol that is
robust and efficient both in ordinary wired networks and in wireless mesh robust and efficient both in ordinary wired networks and in wireless mesh
networks. Babel is conceptually very simple in its operation and "just works" networks. Babel is conceptually very simple in its operation and "just works"
in its default configuration, though some configuration is possible and in some in its default configuration, though some configuration is possible and in some
@ -2425,6 +2425,8 @@ avoid routing loops.
<item> <rfc id="8092"> - BGP Large Communities Attribute <item> <rfc id="8092"> - BGP Large Communities Attribute
<item> <rfc id="8203"> - BGP Administrative Shutdown Communication <item> <rfc id="8203"> - BGP Administrative Shutdown Communication
<item> <rfc id="8212"> - Default EBGP Route Propagation Behavior without Policies <item> <rfc id="8212"> - Default EBGP Route Propagation Behavior without Policies
<item> <rfc id="8654"> - Extended Message Support for BGP
<item> <rfc id="9072"> - Extended Optional Parameters Length for BGP OPEN Message
<item> <rfc id="9117"> - Revised Validation Procedure for BGP Flow Specifications <item> <rfc id="9117"> - Revised Validation Procedure for BGP Flow Specifications
<item> <rfc id="9234"> - Route Leak Prevention and Detection Using Roles <item> <rfc id="9234"> - Route Leak Prevention and Detection Using Roles
</itemize> </itemize>

View File

@ -14,9 +14,8 @@
/** /**
* DOC: The Babel protocol * DOC: The Babel protocol
* *
* Babel (RFC6126) is a loop-avoiding distance-vector routing protocol that is * The Babel is a loop-avoiding distance-vector routing protocol that is robust
* robust and efficient both in ordinary wired networks and in wireless mesh * and efficient both in ordinary wired networks and in wireless mesh networks.
* networks.
* *
* The Babel protocol keeps state for each neighbour in a &babel_neighbor * The Babel protocol keeps state for each neighbour in a &babel_neighbor
* struct, tracking received Hello and I Heard You (IHU) messages. A * struct, tracking received Hello and I Heard You (IHU) messages. A
@ -33,6 +32,12 @@
* an entry is updated by receiving updates from the network or when modified by * an entry is updated by receiving updates from the network or when modified by
* internal timers. The function selects from feasible and reachable routes the * internal timers. The function selects from feasible and reachable routes the
* one with the lowest metric to be announced to the core. * one with the lowest metric to be announced to the core.
*
* Supported standards:
* RFC 8966 - The Babel Routing Protocol
* RFC 8967 - MAC Authentication for Babel
* RFC 9079 - Source Specific Routing for Babel
* RFC 9229 - IPv4 Routes with IPv6 Next Hop for Babel
*/ */
#include <stdlib.h> #include <stdlib.h>
@ -297,7 +302,7 @@ babel_expire_routes(struct babel_proto *p)
} }
/* /*
* Add seqno request to the table of pending requests (RFC 6216 3.2.6) and send * Add seqno request to the table of pending requests (RFC 8966 3.2.6) and send
* it to network. Do nothing if it is already in the table. * it to network. Do nothing if it is already in the table.
*/ */
@ -1021,7 +1026,7 @@ babel_send_update_(struct babel_iface *ifa, btime changed, struct fib *rtable)
babel_enqueue(&msg, ifa); babel_enqueue(&msg, ifa);
/* RFC 6126 3.7.3 - update feasibility distance for redistributed routes */ /* RFC 8966 3.7.3 - update feasibility distance for redistributed routes */
if (e->router_id != p->router_id) if (e->router_id != p->router_id)
{ {
struct babel_source *s = babel_get_source(p, e, e->router_id, msg.update.seqno); struct babel_source *s = babel_get_source(p, e, e->router_id, msg.update.seqno);
@ -1324,7 +1329,7 @@ babel_handle_update(union babel_msg *m, struct babel_iface *ifa)
best = e->selected; best = e->selected;
/* /*
* RFC section 3.8.2.2 - Dealing with unfeasible updates. Generate a one-off * RFC 8966 3.8.2.2 - dealing with unfeasible updates. Generate a one-off
* (not retransmitted) unicast seqno request to the originator of this update. * (not retransmitted) unicast seqno request to the originator of this update.
* Note: !feasible -> s exists, check for 's' is just for clarity / safety. * Note: !feasible -> s exists, check for 's' is just for clarity / safety.
*/ */
@ -1369,7 +1374,7 @@ babel_handle_route_request(union babel_msg *m, struct babel_iface *ifa)
struct babel_proto *p = ifa->proto; struct babel_proto *p = ifa->proto;
struct babel_msg_route_request *msg = &m->route_request; struct babel_msg_route_request *msg = &m->route_request;
/* RFC 6126 3.8.1.1 */ /* RFC 8966 3.8.1.1 */
/* Wildcard request - full update on the interface */ /* Wildcard request - full update on the interface */
if (msg->full) if (msg->full)
@ -1427,7 +1432,7 @@ babel_handle_seqno_request(union babel_msg *m, struct babel_iface *ifa)
struct babel_proto *p = ifa->proto; struct babel_proto *p = ifa->proto;
struct babel_msg_seqno_request *msg = &m->seqno_request; struct babel_msg_seqno_request *msg = &m->seqno_request;
/* RFC 6126 3.8.1.2 */ /* RFC 8966 3.8.1.2 */
TRACE(D_PACKETS, "Handling seqno request for %N router-id %lR seqno %d hop count %d", TRACE(D_PACKETS, "Handling seqno request for %N router-id %lR seqno %d hop count %d",
&msg->net, msg->router_id, msg->seqno, msg->hop_count); &msg->net, msg->router_id, msg->seqno, msg->hop_count);

View File

@ -101,9 +101,9 @@
* RFC 8203 - BGP Administrative Shutdown Communication * RFC 8203 - BGP Administrative Shutdown Communication
* RFC 8212 - Default EBGP Route Propagation Behavior without Policies * RFC 8212 - Default EBGP Route Propagation Behavior without Policies
* RFC 8654 - Extended Message Support for BGP * RFC 8654 - Extended Message Support for BGP
* RFC 9072 - Extended Optional Parameters Length for BGP OPEN Message
* RFC 9117 - Revised Validation Procedure for BGP Flow Specifications * RFC 9117 - Revised Validation Procedure for BGP Flow Specifications
* RFC 9234 - Route Leak Prevention and Detection Using Roles * RFC 9234 - Route Leak Prevention and Detection Using Roles
* draft-ietf-idr-ext-opt-param-07
* draft-uttaro-idr-bgp-persistence-04 * draft-uttaro-idr-bgp-persistence-04
* draft-walton-bgp-hostname-capability-02 * draft-walton-bgp-hostname-capability-02
*/ */

View File

@ -97,7 +97,7 @@ struct bgp_config {
int capabilities; /* Enable capability handshake [RFC 5492] */ int capabilities; /* Enable capability handshake [RFC 5492] */
int enable_refresh; /* Enable local support for route refresh [RFC 2918] */ int enable_refresh; /* Enable local support for route refresh [RFC 2918] */
int enable_as4; /* Enable local support for 4B AS numbers [RFC 6793] */ int enable_as4; /* Enable local support for 4B AS numbers [RFC 6793] */
int enable_extended_messages; /* Enable local support for extended messages [draft] */ int enable_extended_messages; /* Enable local support for extended messages [RFC 8654] */
int enable_hostname; /* Enable local support for hostname [draft] */ int enable_hostname; /* Enable local support for hostname [draft] */
u32 rr_cluster_id; /* Route reflector cluster ID, if different from local ID */ u32 rr_cluster_id; /* Route reflector cluster ID, if different from local ID */
int rr_client; /* Whether neighbor is RR client of me */ int rr_client; /* Whether neighbor is RR client of me */
@ -237,7 +237,7 @@ struct bgp_caps {
u32 as4_number; /* Announced ASN */ u32 as4_number; /* Announced ASN */
u8 as4_support; /* Four-octet AS capability, RFC 6793 */ u8 as4_support; /* Four-octet AS capability, RFC 6793 */
u8 ext_messages; /* Extended message length, RFC draft */ u8 ext_messages; /* Extended message length, RFC 8654 */
u8 route_refresh; /* Route refresh capability, RFC 2918 */ u8 route_refresh; /* Route refresh capability, RFC 2918 */
u8 enhanced_refresh; /* Enhanced route refresh, RFC 7313 */ u8 enhanced_refresh; /* Enhanced route refresh, RFC 7313 */
u8 role; /* BGP role capability, RFC 9234 */ u8 role; /* BGP role capability, RFC 9234 */

View File

@ -518,7 +518,7 @@ bgp_read_capabilities(struct bgp_conn *conn, byte *pos, int len)
} }
break; break;
case 6: /* Extended message length capability, RFC draft */ case 6: /* Extended message length capability, RFC 8654 */
if (cl != 0) if (cl != 0)
goto err; goto err;
@ -711,7 +711,7 @@ bgp_read_options(struct bgp_conn *conn, byte *pos, uint len, uint rest)
struct bgp_proto *p = conn->bgp; struct bgp_proto *p = conn->bgp;
int ext = 0; int ext = 0;
/* Handle extended length (draft-ietf-idr-ext-opt-param-07) */ /* Handle extended length, RFC 9072 */
if ((len > 0) && (rest > 0) && (pos[0] == 255)) if ((len > 0) && (rest > 0) && (pos[0] == 255))
{ {
if (rest < 3) if (rest < 3)
@ -796,7 +796,7 @@ bgp_create_open(struct bgp_conn *conn, byte *buf)
buf[10] = 2; /* Option 2: Capability list */ buf[10] = 2; /* Option 2: Capability list */
buf[11] = len; /* Option data length */ buf[11] = len; /* Option data length */
} }
else /* draft-ietf-idr-ext-opt-param-07 */ else /* Extended length, RFC 9072 */
{ {
/* Move capabilities 4 B forward */ /* Move capabilities 4 B forward */
memmove(buf + 16, pos, len); memmove(buf + 16, pos, len);