mirror of
https://gitlab.nic.cz/labs/bird.git
synced 2024-12-23 02:01:55 +00:00
Merge commit '913ec57f' into thread-next-iface
This commit is contained in:
commit
1106927213
@ -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>
|
||||||
|
@ -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);
|
||||||
|
@ -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
|
||||||
*/
|
*/
|
||||||
|
@ -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 */
|
||||||
|
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user