1 /*********************************************************************
2 * Copyright 2017-2018 Network Device Education Foundation, Inc. ("NetDEF")
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)
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
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
18 * bfdctl.h: all BFDd control socket protocol definitions.
22 * Rafael Zalamena <rzalamena@opensourcerouting.org>
28 #include <netinet/in.h>
34 * Auxiliary definitions
38 struct sockaddr_in sa_sin
;
39 struct sockaddr_in6 sa_sin6
;
47 #define BPC_DEF_DETECTMULTIPLIER 3
48 #define BPC_DEF_RECEIVEINTERVAL 300 /* milliseconds */
49 #define BPC_DEF_TRANSMITINTERVAL 300 /* milliseconds */
50 #define BPC_DEF_ECHORECEIVEINTERVAL 50 /* milliseconds */
51 #define BPC_DEF_ECHOTRANSMITINTERVAL 50 /* milliseconds */
54 enum bfd_peer_status
{
55 BPS_SHUTDOWN
= 0, /* == PTM_BFD_ADM_DOWN, "adm-down" */
56 BPS_DOWN
= 1, /* == PTM_BFD_DOWN, "down" */
57 BPS_INIT
= 2, /* == PTM_BFD_INIT, "init" */
58 BPS_UP
= 3, /* == PTM_BFD_UP, "up" */
64 struct sockaddr_any bpc_peer
;
65 struct sockaddr_any bpc_local
;
68 char bpc_label
[MAXNAMELEN
];
71 char bpc_localif
[MAXNAMELEN
+ 1];
74 char bpc_vrfname
[MAXNAMELEN
+ 1];
76 bool bpc_has_detectmultiplier
;
77 uint8_t bpc_detectmultiplier
;
79 bool bpc_has_recvinterval
;
80 uint64_t bpc_recvinterval
;
82 bool bpc_has_txinterval
;
83 uint64_t bpc_txinterval
;
85 bool bpc_has_echorecvinterval
;
86 uint64_t bpc_echorecvinterval
;
88 bool bpc_has_echotxinterval
;
89 uint64_t bpc_echotxinterval
;
91 bool bpc_has_minimum_ttl
;
92 uint8_t bpc_minimum_ttl
;
101 bool bpc_has_profile
;
102 char bpc_profile
[64];
104 /* Status information */
105 enum bfd_peer_status bpc_bps
;
107 uint32_t bpc_remoteid
;
109 uint8_t bpc_remotediag
;
110 uint8_t bpc_remote_detectmultiplier
;
111 uint64_t bpc_remote_recvinterval
;
112 uint64_t bpc_remote_txinterval
;
113 uint64_t bpc_remote_echointerval
;
114 uint64_t bpc_lastevent
;
119 * Protocol definitions
121 enum bc_msg_version
{
134 /* Notify flags to use with bcm_notify. */
135 #define BCM_NOTIFY_ALL ((uint64_t)-1)
136 #define BCM_NOTIFY_PEER_STATE (1ULL << 0)
137 #define BCM_NOTIFY_CONFIG (1ULL << 1)
138 #define BCM_NOTIFY_NONE 0
140 /* Response 'status' definitions. */
141 #define BCM_RESPONSE_OK "ok"
142 #define BCM_RESPONSE_ERROR "error"
144 /* Notify operation. */
145 #define BCM_NOTIFY_PEER_STATUS "status"
146 #define BCM_NOTIFY_CONFIG_ADD "add"
147 #define BCM_NOTIFY_CONFIG_DELETE "delete"
148 #define BCM_NOTIFY_CONFIG_UPDATE "update"
150 /* Notification special ID. */
151 #define BCM_NOTIFY_ID 0
153 struct bfd_control_msg
{
154 /* Total length without the header. */
157 * Message request/response id.
158 * All requests will have a correspondent response with the
164 /* Message version. */
166 /* Message payload. */