summaryrefslogtreecommitdiff
path: root/bfdd/ptm_adapter.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfdd/ptm_adapter.c')
-rw-r--r--bfdd/ptm_adapter.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/bfdd/ptm_adapter.c b/bfdd/ptm_adapter.c
index f6ebefb7be..74f2d39878 100644
--- a/bfdd/ptm_adapter.c
+++ b/bfdd/ptm_adapter.c
@@ -70,10 +70,10 @@ static void bfdd_client_deregister(struct stream *msg);
PRINTFRR(2, 3)
static void debug_printbpc(const struct bfd_peer_cfg *bpc, const char *fmt, ...)
{
- char timers[3][128] = {};
+ char timers[3][160] = {};
char minttl_str[32] = {};
- char addr[3][128] = {};
- char profile[128] = {};
+ char addr[3][160] = {};
+ char profile[160] = {};
char cbit_str[32];
char msgbuf[512];
va_list vl;
@@ -134,7 +134,9 @@ static void _ptm_bfd_session_del(struct bfd_session *bs, uint8_t diag)
/* Change state and notify peer. */
bs->ses_state = PTM_BFD_DOWN;
bs->local_diag = diag;
- ptm_bfd_snd(bs, 0);
+
+ if (bs->bfd_mode == BFD_MODE_TYPE_BFD)
+ ptm_bfd_snd(bs, 0);
/* Session reached refcount == 0, lets delete it. */
if (bs->refcount == 0) {
@@ -200,6 +202,8 @@ int ptm_bfd_notify(struct bfd_session *bs, uint8_t notify_state)
* - 16 bytes: ipv6
* - c: prefix length
* - c: cbit
+ * - c: bfd name len
+ * - Xbytes: bfd name
*
* Commands: ZEBRA_BFD_DEST_REPLAY
*
@@ -238,9 +242,12 @@ int ptm_bfd_notify(struct bfd_session *bs, uint8_t notify_state)
case PTM_BFD_DOWN:
case PTM_BFD_INIT:
- stream_putl(msg, BFD_STATUS_DOWN);
- break;
+ if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_SHUTDOWN))
+ stream_putl(msg, BFD_STATUS_ADMIN_DOWN);
+ else
+ stream_putl(msg, BFD_STATUS_DOWN);
+ break;
default:
stream_putl(msg, BFD_STATUS_UNKNOWN);
break;
@@ -251,6 +258,9 @@ int ptm_bfd_notify(struct bfd_session *bs, uint8_t notify_state)
stream_putc(msg, bs->remote_cbit);
+ stream_putc(msg, strlen(bs->bfd_name));
+ stream_put(msg, bs->bfd_name, strlen(bs->bfd_name));
+
/* Write packet size. */
stream_putw_at(msg, 0, stream_get_endp(msg));