summaryrefslogtreecommitdiff
path: root/bgpd/bgp_open.c
diff options
context:
space:
mode:
Diffstat (limited to 'bgpd/bgp_open.c')
-rw-r--r--bgpd/bgp_open.c69
1 files changed, 40 insertions, 29 deletions
diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c
index 77fb61fbb8..aa98f8a557 100644
--- a/bgpd/bgp_open.c
+++ b/bgpd/bgp_open.c
@@ -51,8 +51,8 @@
Next, if we send capability to the peer we want to set my capabilty
inforation at each peer. */
-void bgp_capability_vty_out(struct vty *vty, struct peer *peer, u_char use_json,
- json_object *json_neigh)
+void bgp_capability_vty_out(struct vty *vty, struct peer *peer,
+ uint8_t use_json, json_object *json_neigh)
{
char *pnt;
char *end;
@@ -146,6 +146,12 @@ void bgp_capability_vty_out(struct vty *vty, struct peer *peer, u_char use_json,
"capabilityErrorMultiProtocolSafi",
"EVPN");
break;
+ case SAFI_FLOWSPEC:
+ json_object_string_add(
+ json_cap,
+ "capabilityErrorMultiProtocolSafi",
+ "flowspec");
+ break;
default:
json_object_int_add(
json_cap,
@@ -187,6 +193,9 @@ void bgp_capability_vty_out(struct vty *vty, struct peer *peer, u_char use_json,
case SAFI_ENCAP:
vty_out(vty, "SAFI ENCAP");
break;
+ case SAFI_FLOWSPEC:
+ vty_out(vty, "SAFI FLOWSPEC");
+ break;
case SAFI_EVPN:
vty_out(vty, "SAFI EVPN");
break;
@@ -271,8 +280,8 @@ static int bgp_capability_mp(struct peer *peer, struct capability_header *hdr)
}
static void bgp_capability_orf_not_support(struct peer *peer, iana_afi_t afi,
- iana_safi_t safi, u_char type,
- u_char mode)
+ iana_safi_t safi, uint8_t type,
+ uint8_t mode)
{
if (bgp_debug_neighbor_events(peer))
zlog_debug(
@@ -295,15 +304,15 @@ static int bgp_capability_orf_entry(struct peer *peer,
{
struct stream *s = BGP_INPUT(peer);
struct capability_mp_data mpc;
- u_char num;
+ uint8_t num;
iana_afi_t pkt_afi;
afi_t afi;
iana_safi_t pkt_safi;
safi_t safi;
- u_char type;
- u_char mode;
- u_int16_t sm_cap = 0; /* capability send-mode receive */
- u_int16_t rm_cap = 0; /* capability receive-mode receive */
+ uint8_t type;
+ uint8_t mode;
+ uint16_t sm_cap = 0; /* capability send-mode receive */
+ uint16_t rm_cap = 0; /* capability receive-mode receive */
int i;
/* ORF Entry header */
@@ -433,7 +442,7 @@ static int bgp_capability_restart(struct peer *peer,
struct capability_header *caphdr)
{
struct stream *s = BGP_INPUT(peer);
- u_int16_t restart_flag_time;
+ uint16_t restart_flag_time;
size_t end = stream_get_getp(s) + caphdr->length;
/* Verify length is a multiple of 4 */
@@ -468,7 +477,7 @@ static int bgp_capability_restart(struct peer *peer,
safi_t safi;
iana_afi_t pkt_afi = stream_getw(s);
iana_safi_t pkt_safi = stream_getc(s);
- u_char flag = stream_getc(s);
+ uint8_t flag = stream_getc(s);
/* Convert AFI, SAFI to internal values, check. */
if (bgp_map_afi_safi_iana2int(pkt_afi, pkt_safi, &afi, &safi)) {
@@ -545,7 +554,7 @@ static int bgp_capability_addpath(struct peer *peer,
safi_t safi;
iana_afi_t pkt_afi = stream_getw(s);
iana_safi_t pkt_safi = stream_getc(s);
- u_char send_receive = stream_getc(s);
+ uint8_t send_receive = stream_getc(s);
if (bgp_debug_neighbor_events(peer))
zlog_debug(
@@ -659,7 +668,7 @@ static int bgp_capability_hostname(struct peer *peer,
struct stream *s = BGP_INPUT(peer);
char str[BGP_MAX_HOSTNAME + 1];
size_t end = stream_get_getp(s) + hdr->length;
- u_char len;
+ uint8_t len;
SET_FLAG(peer->cap, PEER_CAP_HOSTNAME_RCV);
@@ -788,7 +797,7 @@ static const size_t cap_modsizes[] = {
* capabilities were encountered.
*/
static int bgp_capability_parse(struct peer *peer, size_t length,
- int *mp_capability, u_char **error)
+ int *mp_capability, uint8_t **error)
{
int ret;
struct stream *s = BGP_INPUT(peer);
@@ -798,7 +807,7 @@ static int bgp_capability_parse(struct peer *peer, size_t length,
while (stream_get_getp(s) < end) {
size_t start;
- u_char *sp = stream_pnt(s);
+ uint8_t *sp = stream_pnt(s);
struct capability_header caphdr;
ret = 0;
@@ -991,7 +1000,7 @@ static int strict_capability_same(struct peer *peer)
/* peek into option, stores ASN to *as4 if the AS4 capability was found.
* Returns 0 if no as4 found, as4cap value otherwise.
*/
-as_t peek_for_as4_capability(struct peer *peer, u_char length)
+as_t peek_for_as4_capability(struct peer *peer, uint8_t length)
{
struct stream *s = BGP_INPUT(peer);
size_t orig_getp = stream_get_getp(s);
@@ -1007,8 +1016,8 @@ as_t peek_for_as4_capability(struct peer *peer, u_char length)
* correctly formatted options.
*/
while (stream_get_getp(s) < end) {
- u_char opt_type;
- u_char opt_length;
+ uint8_t opt_type;
+ uint8_t opt_length;
/* Check the length. */
if (stream_get_getp(s) + 2 > end)
@@ -1064,11 +1073,11 @@ end:
*
* @param[out] mp_capability @see bgp_capability_parse() for semantics.
*/
-int bgp_open_option_parse(struct peer *peer, u_char length, int *mp_capability)
+int bgp_open_option_parse(struct peer *peer, uint8_t length, int *mp_capability)
{
int ret = 0;
- u_char *error;
- u_char error_data[BGP_MAX_PACKET_SIZE];
+ uint8_t *error;
+ uint8_t error_data[BGP_MAX_PACKET_SIZE];
struct stream *s = BGP_INPUT(peer);
size_t end = stream_get_getp(s) + length;
@@ -1079,8 +1088,8 @@ int bgp_open_option_parse(struct peer *peer, u_char length, int *mp_capability)
peer->host, length);
while (stream_get_getp(s) < end) {
- u_char opt_type;
- u_char opt_length;
+ uint8_t opt_type;
+ uint8_t opt_length;
/* Must have at least an OPEN option header */
if (STREAM_READABLE(s) < 2) {
@@ -1166,11 +1175,13 @@ int bgp_open_option_parse(struct peer *peer, u_char length, int *mp_capability)
&& !peer->afc_nego[AFI_IP][SAFI_LABELED_UNICAST]
&& !peer->afc_nego[AFI_IP][SAFI_MPLS_VPN]
&& !peer->afc_nego[AFI_IP][SAFI_ENCAP]
+ && !peer->afc_nego[AFI_IP][SAFI_FLOWSPEC]
&& !peer->afc_nego[AFI_IP6][SAFI_UNICAST]
&& !peer->afc_nego[AFI_IP6][SAFI_MULTICAST]
&& !peer->afc_nego[AFI_IP6][SAFI_LABELED_UNICAST]
&& !peer->afc_nego[AFI_IP6][SAFI_MPLS_VPN]
&& !peer->afc_nego[AFI_IP6][SAFI_ENCAP]
+ && !peer->afc_nego[AFI_IP6][SAFI_FLOWSPEC]
&& !peer->afc_nego[AFI_L2VPN][SAFI_EVPN]) {
zlog_err(
"%s [Error] Configured AFI/SAFIs do not "
@@ -1192,10 +1203,10 @@ int bgp_open_option_parse(struct peer *peer, u_char length, int *mp_capability)
}
static void bgp_open_capability_orf(struct stream *s, struct peer *peer,
- afi_t afi, safi_t safi, u_char code)
+ afi_t afi, safi_t safi, uint8_t code)
{
- u_char cap_len;
- u_char orf_len;
+ uint8_t cap_len;
+ uint8_t orf_len;
unsigned long capp;
unsigned long orfp;
unsigned long numberp;
@@ -1262,15 +1273,15 @@ static void bgp_open_capability_orf(struct stream *s, struct peer *peer,
/* Fill in capability open option to the packet. */
void bgp_open_capability(struct stream *s, struct peer *peer)
{
- u_char len;
+ uint8_t len;
unsigned long cp, capp, rcapp;
iana_afi_t pkt_afi;
afi_t afi;
safi_t safi;
iana_safi_t pkt_safi;
as_t local_as;
- u_int32_t restart_time;
- u_char afi_safi_count = 0;
+ uint32_t restart_time;
+ uint8_t afi_safi_count = 0;
int adv_addpath_tx = 0;
/* Remember current pointer for Opt Parm Len. */