diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 13:16:35 +0000 |
commit | e2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch) | |
tree | f0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /bgpd/bgp_open.h | |
parent | Initial commit. (diff) | |
download | frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.tar.xz frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.zip |
Adding upstream version 9.1.upstream/9.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'bgpd/bgp_open.h')
-rw-r--r-- | bgpd/bgp_open.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/bgpd/bgp_open.h b/bgpd/bgp_open.h new file mode 100644 index 0000000..a92c56d --- /dev/null +++ b/bgpd/bgp_open.h @@ -0,0 +1,112 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* BGP open message handling + * Copyright (C) 1999 Kunihiro Ishiguro + */ + +#ifndef _QUAGGA_BGP_OPEN_H +#define _QUAGGA_BGP_OPEN_H + +/* Standard header for capability TLV */ +struct capability_header { + uint8_t code; + uint8_t length; +}; + +/* Generic MP capability data */ +struct capability_mp_data { + uint16_t afi; /* iana_afi_t */ + uint8_t reserved; + uint8_t safi; /* iana_safi_t */ +}; + +struct graceful_restart_af { + uint16_t afi; + uint8_t safi; + uint8_t flag; +}; + +/* + * +--------------------------------------------------+ + * | Address Family Identifier (16 bits) | + * +--------------------------------------------------+ + * | Subsequent Address Family Identifier (8 bits) | + * +--------------------------------------------------+ + * | Flags for Address Family (8 bits) | + * +--------------------------------------------------+ + * | Long-lived Stale Time (24 bits) | + * +--------------------------------------------------+ + */ +#define BGP_CAP_LLGR_MIN_PACKET_LEN 7 + +/* Capability Code */ +#define CAPABILITY_CODE_MP 1 /* Multiprotocol Extensions */ +#define CAPABILITY_CODE_REFRESH 2 /* Route Refresh Capability */ +#define CAPABILITY_CODE_ORF 3 /* Cooperative Route Filtering Capability */ +#define CAPABILITY_CODE_RESTART 64 /* Graceful Restart Capability */ +#define CAPABILITY_CODE_AS4 65 /* 4-octet AS number Capability */ +#define CAPABILITY_CODE_DYNAMIC 67 /* Dynamic Capability */ +#define CAPABILITY_CODE_ADDPATH 69 /* Addpath Capability */ +#define CAPABILITY_CODE_ENHANCED_RR 70 /* Enhanced Route Refresh capability */ +#define CAPABILITY_CODE_LLGR 71 /* Long-lived Graceful Restart */ +#define CAPABILITY_CODE_FQDN 73 /* Advertise hostname capability */ +#define CAPABILITY_CODE_SOFT_VERSION 75 /* Software Version capability */ +#define CAPABILITY_CODE_ENHE 5 /* Extended Next Hop Encoding */ +#define CAPABILITY_CODE_EXT_MESSAGE 6 /* Extended Message Support */ +#define CAPABILITY_CODE_ROLE 9 /* Role Capability */ + +/* Capability Length */ +#define CAPABILITY_CODE_MP_LEN 4 +#define CAPABILITY_CODE_REFRESH_LEN 0 +#define CAPABILITY_CODE_DYNAMIC_LEN 0 +#define CAPABILITY_CODE_RESTART_LEN 2 /* Receiving only case */ +#define CAPABILITY_CODE_AS4_LEN 4 +#define CAPABILITY_CODE_ADDPATH_LEN 4 +#define CAPABILITY_CODE_ENHE_LEN 6 /* NRLI AFI = 2, SAFI = 2, Nexthop AFI = 2 */ +#define CAPABILITY_CODE_MIN_FQDN_LEN 2 +#define CAPABILITY_CODE_ENHANCED_LEN 0 +#define CAPABILITY_CODE_LLGR_LEN 0 +#define CAPABILITY_CODE_ORF_LEN 5 +#define CAPABILITY_CODE_EXT_MESSAGE_LEN 0 /* Extended Message Support */ +#define CAPABILITY_CODE_ROLE_LEN 1 +#define CAPABILITY_CODE_SOFT_VERSION_LEN 1 + +/* Cooperative Route Filtering Capability. */ + +/* ORF Type */ +#define ORF_TYPE_RESERVED 0 +#define ORF_TYPE_PREFIX 64 + +/* ORF Mode */ +#define ORF_MODE_RECEIVE 1 +#define ORF_MODE_SEND 2 +#define ORF_MODE_BOTH 3 + +/* Capability Message Action. */ +#define CAPABILITY_ACTION_SET 0 +#define CAPABILITY_ACTION_UNSET 1 + +/* Graceful Restart */ +#define GRACEFUL_RESTART_R_BIT 0x8000 +#define GRACEFUL_RESTART_N_BIT 0x4000 +#define GRACEFUL_RESTART_F_BIT 0x80 + +/* Long-lived Graceful Restart */ +#define LLGR_F_BIT 0x80 + +/* Optional Parameters */ +#define BGP_OPEN_NON_EXT_OPT_LEN 255 /* Non-Ext OP Len. */ +#define BGP_OPEN_NON_EXT_OPT_TYPE_EXTENDED_LENGTH 255 /* Non-Ext OP Type */ +#define BGP_OPEN_EXT_OPT_PARAMS_CAPABLE(peer) \ + (CHECK_FLAG(peer->flags, PEER_FLAG_EXTENDED_OPT_PARAMS) \ + || CHECK_FLAG(peer->sflags, PEER_STATUS_EXT_OPT_PARAMS_LENGTH)) + +extern int bgp_open_option_parse(struct peer *peer, uint16_t length, + int *mp_capability); +extern uint16_t bgp_open_capability(struct stream *s, struct peer *peer, + bool ext_opt_params); +extern void bgp_capability_vty_out(struct vty *vty, struct peer *peer, + bool use_json, json_object *json_neigh); +extern as_t peek_for_as4_capability(struct peer *peer, uint16_t length); +extern const struct message capcode_str[]; + +#endif /* _QUAGGA_BGP_OPEN_H */ |