]> git.proxmox.com Git - mirror_frr.git/blame - bgpd/bgp_open.h
Merge pull request #13649 from donaldsharp/unlock_the_node_or_else
[mirror_frr.git] / bgpd / bgp_open.h
CommitLineData
acddc0ed 1// SPDX-License-Identifier: GPL-2.0-or-later
718e3744 2/* BGP open message handling
896014f4 3 * Copyright (C) 1999 Kunihiro Ishiguro
896014f4 4 */
718e3744 5
00d252cb 6#ifndef _QUAGGA_BGP_OPEN_H
7#define _QUAGGA_BGP_OPEN_H
8
6d58272b 9/* Standard header for capability TLV */
d62a17ae 10struct capability_header {
d7c0a89a
QY
11 uint8_t code;
12 uint8_t length;
6d58272b
PJ
13};
14
15/* Generic MP capability data */
d62a17ae 16struct capability_mp_data {
a46a2e9b 17 uint16_t afi; /* iana_afi_t */
d7c0a89a 18 uint8_t reserved;
a46a2e9b 19 uint8_t safi; /* iana_safi_t */
718e3744 20};
21
d62a17ae 22struct graceful_restart_af {
23 afi_t afi;
24 safi_t safi;
d7c0a89a 25 uint8_t flag;
538621f2 26};
27
28/* Capability Code */
29#define CAPABILITY_CODE_MP 1 /* Multiprotocol Extensions */
30#define CAPABILITY_CODE_REFRESH 2 /* Route Refresh Capability */
31#define CAPABILITY_CODE_ORF 3 /* Cooperative Route Filtering Capability */
32#define CAPABILITY_CODE_RESTART 64 /* Graceful Restart Capability */
6d58272b 33#define CAPABILITY_CODE_AS4 65 /* 4-octet AS number Capability */
89eeecb8
DS
34#define CAPABILITY_CODE_DYNAMIC_OLD 66 /* Dynamic Capability, deprecated since 2003 */
35#define CAPABILITY_CODE_DYNAMIC 67 /* Dynamic Capability */
a82478b9 36#define CAPABILITY_CODE_ADDPATH 69 /* Addpath Capability */
9af52ccf 37#define CAPABILITY_CODE_ENHANCED_RR 70 /* Enhanced Route Refresh capability */
8606be87 38#define CAPABILITY_CODE_LLGR 71 /* Long-lived Graceful Restart */
da88f402 39#define CAPABILITY_CODE_FQDN 73 /* Advertise hostname capability */
234f6fd4 40#define CAPABILITY_CODE_SOFT_VERSION 75 /* Software Version capability */
8a92a8a0 41#define CAPABILITY_CODE_ENHE 5 /* Extended Next Hop Encoding */
538621f2 42#define CAPABILITY_CODE_REFRESH_OLD 128 /* Route Refresh Capability(cisco) */
43#define CAPABILITY_CODE_ORF_OLD 130 /* Cooperative Route Filtering Capability(cisco) */
ef56aee4 44#define CAPABILITY_CODE_EXT_MESSAGE 6 /* Extended Message Support */
d864dd9e 45#define CAPABILITY_CODE_ROLE 9 /* Role Capability */
718e3744 46
538621f2 47/* Capability Length */
48#define CAPABILITY_CODE_MP_LEN 4
718e3744 49#define CAPABILITY_CODE_REFRESH_LEN 0
538621f2 50#define CAPABILITY_CODE_DYNAMIC_LEN 0
51#define CAPABILITY_CODE_RESTART_LEN 2 /* Receiving only case */
6d58272b 52#define CAPABILITY_CODE_AS4_LEN 4
a82478b9 53#define CAPABILITY_CODE_ADDPATH_LEN 4
8a92a8a0 54#define CAPABILITY_CODE_ENHE_LEN 6 /* NRLI AFI = 2, SAFI = 2, Nexthop AFI = 2 */
e978e1de 55#define CAPABILITY_CODE_MIN_FQDN_LEN 2
9af52ccf 56#define CAPABILITY_CODE_ENHANCED_LEN 0
8606be87 57#define CAPABILITY_CODE_LLGR_LEN 0
e978e1de 58#define CAPABILITY_CODE_ORF_LEN 5
ef56aee4 59#define CAPABILITY_CODE_EXT_MESSAGE_LEN 0 /* Extended Message Support */
d864dd9e 60#define CAPABILITY_CODE_ROLE_LEN 1
234f6fd4 61#define CAPABILITY_CODE_SOFT_VERSION_LEN 1
718e3744 62
63/* Cooperative Route Filtering Capability. */
718e3744 64
538621f2 65/* ORF Type */
5bb2aa89 66#define ORF_TYPE_RESERVED 0
9ea364a2 67#define ORF_TYPE_PREFIX 64
718e3744 68#define ORF_TYPE_PREFIX_OLD 128
69
538621f2 70/* ORF Mode */
9ea364a2
DA
71#define ORF_MODE_RECEIVE 1
72#define ORF_MODE_SEND 2
73#define ORF_MODE_BOTH 3
718e3744 74
718e3744 75/* Capability Message Action. */
76#define CAPABILITY_ACTION_SET 0
77#define CAPABILITY_ACTION_UNSET 1
78
538621f2 79/* Graceful Restart */
d83facbb 80#define GRACEFUL_RESTART_R_BIT 0x8000
eea685b6 81#define GRACEFUL_RESTART_N_BIT 0x4000
d83facbb 82#define GRACEFUL_RESTART_F_BIT 0x80
538621f2 83
8606be87
DA
84/* Long-lived Graceful Restart */
85#define LLGR_F_BIT 0x80
86
d08c0c80
DA
87/* Optional Parameters */
88#define BGP_OPEN_NON_EXT_OPT_LEN 255 /* Non-Ext OP Len. */
89#define BGP_OPEN_NON_EXT_OPT_TYPE_EXTENDED_LENGTH 255 /* Non-Ext OP Type */
90#define BGP_OPEN_EXT_OPT_PARAMS_CAPABLE(peer) \
91 (CHECK_FLAG(peer->flags, PEER_FLAG_EXTENDED_OPT_PARAMS) \
92 || CHECK_FLAG(peer->sflags, PEER_STATUS_EXT_OPT_PARAMS_LENGTH))
93
94extern int bgp_open_option_parse(struct peer *peer, uint16_t length,
95 int *mp_capability);
96extern uint16_t bgp_open_capability(struct stream *s, struct peer *peer,
97 bool ext_opt_params);
94d4c685
DS
98extern void bgp_capability_vty_out(struct vty *vty, struct peer *peer,
99 bool use_json, json_object *json_neigh);
d08c0c80 100extern as_t peek_for_as4_capability(struct peer *peer, uint16_t length);
00d252cb 101
102#endif /* _QUAGGA_BGP_OPEN_H */