diff options
Diffstat (limited to 'bfdd/bfdd_nb_state.c')
| -rw-r--r-- | bfdd/bfdd_nb_state.c | 88 | 
1 files changed, 84 insertions, 4 deletions
diff --git a/bfdd/bfdd_nb_state.c b/bfdd/bfdd_nb_state.c index 12acda8fd8..c528478231 100644 --- a/bfdd/bfdd_nb_state.c +++ b/bfdd/bfdd_nb_state.c @@ -20,7 +20,7 @@  const void *  bfdd_bfd_sessions_single_hop_get_next(struct nb_cb_get_next_args *args)  { -	return bfd_session_next(args->list_entry, false); +	return bfd_session_next(args->list_entry, false, BFD_MODE_TYPE_BFD);  }  int bfdd_bfd_sessions_single_hop_get_keys(struct nb_cb_get_keys_args *args) @@ -50,7 +50,7 @@ bfdd_bfd_sessions_single_hop_lookup_entry(struct nb_cb_lookup_entry_args *args)  	strtosa(dest_addr, &psa);  	memset(&lsa, 0, sizeof(lsa)); -	gen_bfd_key(&bk, &psa, &lsa, false, ifname, vrf); +	gen_bfd_key(&bk, &psa, &lsa, false, ifname, vrf, NULL);  	return bfd_key_lookup(bk);  } @@ -323,7 +323,7 @@ bfdd_bfd_sessions_single_hop_stats_echo_packet_output_count_get_elem(  const void *  bfdd_bfd_sessions_multi_hop_get_next(struct nb_cb_get_next_args *args)  { -	return bfd_session_next(args->list_entry, true); +	return bfd_session_next(args->list_entry, true, BFD_MODE_TYPE_BFD);  }  int bfdd_bfd_sessions_multi_hop_get_keys(struct nb_cb_get_keys_args *args) @@ -354,7 +354,87 @@ bfdd_bfd_sessions_multi_hop_lookup_entry(struct nb_cb_lookup_entry_args *args)  	strtosa(dest_addr, &psa);  	strtosa(source_addr, &lsa); -	gen_bfd_key(&bk, &psa, &lsa, true, NULL, vrf); +	gen_bfd_key(&bk, &psa, &lsa, true, NULL, vrf, NULL); + +	return bfd_key_lookup(bk); +} + +/* + * XPath: /frr-bfdd:bfdd/bfd/sessions/sbfd-echo + */ +const void *bfdd_bfd_sessions_sbfd_echo_get_next(struct nb_cb_get_next_args *args) +{ +	return bfd_session_next(args->list_entry, true, BFD_MODE_TYPE_SBFD_ECHO); +} + +int bfdd_bfd_sessions_sbfd_echo_get_keys(struct nb_cb_get_keys_args *args) +{ +	const struct bfd_session *bs = args->list_entry; +	char srcbuf[INET6_ADDRSTRLEN]; + +	inet_ntop(bs->key.family, &bs->key.local, srcbuf, sizeof(srcbuf)); + +	args->keys->num = 3; +	strlcpy(args->keys->key[0], srcbuf, sizeof(args->keys->key[0])); +	strlcpy(args->keys->key[1], bs->key.bfdname, sizeof(args->keys->key[1])); +	strlcpy(args->keys->key[2], bs->key.vrfname, sizeof(args->keys->key[2])); + +	return NB_OK; +} + +const void *bfdd_bfd_sessions_sbfd_echo_lookup_entry(struct nb_cb_lookup_entry_args *args) +{ +	const char *source_addr = args->keys->key[0]; +	const char *bfdname = args->keys->key[1]; +	const char *vrf = args->keys->key[2]; +	struct sockaddr_any psa, lsa; +	struct bfd_key bk; + +	strtosa(source_addr, &lsa); +	memset(&psa, 0, sizeof(psa)); +	gen_bfd_key(&bk, &psa, &lsa, true, NULL, vrf, bfdname); + +	return bfd_key_lookup(bk); +} + +/* + * XPath: /frr-bfdd:bfdd/bfd/sessions/sbfd-init + */ +const void *bfdd_bfd_sessions_sbfd_init_get_next(struct nb_cb_get_next_args *args) +{ +	return bfd_session_next(args->list_entry, true, BFD_MODE_TYPE_SBFD_INIT); +} + +int bfdd_bfd_sessions_sbfd_init_get_keys(struct nb_cb_get_keys_args *args) +{ +	const struct bfd_session *bs = args->list_entry; +	char srcbuf[INET6_ADDRSTRLEN]; +	char dstbuf[INET6_ADDRSTRLEN]; + +	inet_ntop(bs->key.family, &bs->key.local, srcbuf, sizeof(srcbuf)); +	inet_ntop(bs->key.family, &bs->key.peer, dstbuf, sizeof(dstbuf)); + +	args->keys->num = 4; +	strlcpy(args->keys->key[0], srcbuf, sizeof(args->keys->key[0])); +	strlcpy(args->keys->key[1], dstbuf, sizeof(args->keys->key[1])); +	strlcpy(args->keys->key[2], bs->key.bfdname, sizeof(args->keys->key[2])); +	strlcpy(args->keys->key[3], bs->key.vrfname, sizeof(args->keys->key[3])); + +	return NB_OK; +} + +const void *bfdd_bfd_sessions_sbfd_init_lookup_entry(struct nb_cb_lookup_entry_args *args) +{ +	const char *source_addr = args->keys->key[0]; +	const char *dest_addr = args->keys->key[1]; +	const char *bfdname = args->keys->key[2]; +	const char *vrf = args->keys->key[3]; +	struct sockaddr_any psa, lsa; +	struct bfd_key bk; + +	strtosa(source_addr, &lsa); +	strtosa(dest_addr, &psa); +	gen_bfd_key(&bk, &psa, &lsa, true, NULL, vrf, bfdname);  	return bfd_key_lookup(bk);  }  | 
