]> git.proxmox.com Git - mirror_frr.git/blob - bfdd/bfdctl.h
Merge pull request #5702 from vishaldhingra/bgp_nb
[mirror_frr.git] / bfdd / bfdctl.h
1 /*********************************************************************
2 * Copyright 2017-2018 Network Device Education Foundation, Inc. ("NetDEF")
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free
6 * Software Foundation; either version 2 of the License, or (at your option)
7 * any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program; see the file COPYING; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17 *
18 * bfdctl.h: all BFDd control socket protocol definitions.
19 *
20 * Authors
21 * -------
22 * Rafael Zalamena <rzalamena@opensourcerouting.org>
23 */
24
25 #ifndef _BFDCTRL_H_
26 #define _BFDCTRL_H_
27
28 #include <netinet/in.h>
29
30 #include <stdbool.h>
31 #include <stdint.h>
32
33 /*
34 * Auxiliary definitions
35 */
36 struct sockaddr_any {
37 union {
38 struct sockaddr_in sa_sin;
39 struct sockaddr_in6 sa_sin6;
40 };
41 };
42
43 #ifndef MAXNAMELEN
44 #define MAXNAMELEN 32
45 #endif
46
47 #define BPC_DEF_DETECTMULTIPLIER 3
48 #define BPC_DEF_RECEIVEINTERVAL 300 /* milliseconds */
49 #define BPC_DEF_TRANSMITINTERVAL 300 /* milliseconds */
50 #define BPC_DEF_ECHOINTERVAL 50 /* milliseconds */
51
52 /* Peer status */
53 enum bfd_peer_status {
54 BPS_SHUTDOWN = 0, /* == PTM_BFD_ADM_DOWN, "adm-down" */
55 BPS_DOWN = 1, /* == PTM_BFD_DOWN, "down" */
56 BPS_INIT = 2, /* == PTM_BFD_INIT, "init" */
57 BPS_UP = 3, /* == PTM_BFD_UP, "up" */
58 };
59
60 struct bfd_peer_cfg {
61 bool bpc_mhop;
62 bool bpc_ipv4;
63 struct sockaddr_any bpc_peer;
64 struct sockaddr_any bpc_local;
65
66 bool bpc_has_label;
67 char bpc_label[MAXNAMELEN];
68
69 bool bpc_has_localif;
70 char bpc_localif[MAXNAMELEN + 1];
71
72 bool bpc_has_vrfname;
73 char bpc_vrfname[MAXNAMELEN + 1];
74
75 bool bpc_has_detectmultiplier;
76 uint8_t bpc_detectmultiplier;
77
78 bool bpc_has_recvinterval;
79 uint64_t bpc_recvinterval;
80
81 bool bpc_has_txinterval;
82 uint64_t bpc_txinterval;
83
84 bool bpc_has_echointerval;
85 uint64_t bpc_echointerval;
86
87 bool bpc_has_minimum_ttl;
88 uint8_t bpc_minimum_ttl;
89
90 bool bpc_echo;
91 bool bpc_createonly;
92 bool bpc_shutdown;
93
94 bool bpc_cbit;
95 bool bpc_passive;
96
97 bool bpc_has_profile;
98 char bpc_profile[64];
99
100 /* Status information */
101 enum bfd_peer_status bpc_bps;
102 uint32_t bpc_id;
103 uint32_t bpc_remoteid;
104 uint8_t bpc_diag;
105 uint8_t bpc_remotediag;
106 uint8_t bpc_remote_detectmultiplier;
107 uint64_t bpc_remote_recvinterval;
108 uint64_t bpc_remote_txinterval;
109 uint64_t bpc_remote_echointerval;
110 uint64_t bpc_lastevent;
111 };
112
113
114 /*
115 * Protocol definitions
116 */
117 enum bc_msg_version {
118 BMV_VERSION_1 = 1,
119 };
120
121 enum bc_msg_type {
122 BMT_RESPONSE = 1,
123 BMT_REQUEST_ADD = 2,
124 BMT_REQUEST_DEL = 3,
125 BMT_NOTIFY = 4,
126 BMT_NOTIFY_ADD = 5,
127 BMT_NOTIFY_DEL = 6,
128 };
129
130 /* Notify flags to use with bcm_notify. */
131 #define BCM_NOTIFY_ALL ((uint64_t)-1)
132 #define BCM_NOTIFY_PEER_STATE (1ULL << 0)
133 #define BCM_NOTIFY_CONFIG (1ULL << 1)
134 #define BCM_NOTIFY_NONE 0
135
136 /* Response 'status' definitions. */
137 #define BCM_RESPONSE_OK "ok"
138 #define BCM_RESPONSE_ERROR "error"
139
140 /* Notify operation. */
141 #define BCM_NOTIFY_PEER_STATUS "status"
142 #define BCM_NOTIFY_CONFIG_ADD "add"
143 #define BCM_NOTIFY_CONFIG_DELETE "delete"
144 #define BCM_NOTIFY_CONFIG_UPDATE "update"
145
146 /* Notification special ID. */
147 #define BCM_NOTIFY_ID 0
148
149 struct bfd_control_msg {
150 /* Total length without the header. */
151 uint32_t bcm_length;
152 /*
153 * Message request/response id.
154 * All requests will have a correspondent response with the
155 * same id.
156 */
157 uint16_t bcm_id;
158 /* Message type. */
159 uint8_t bcm_type;
160 /* Message version. */
161 uint8_t bcm_ver;
162 /* Message payload. */
163 uint8_t bcm_data[0];
164 };
165
166 #endif