DEFINE_MTYPE_STATIC(NHRPD, NHRP_VC, "NHRP virtual connection");
+PREDECL_DLIST(childlist);
+
struct child_sa {
uint32_t id;
struct nhrp_vc *vc;
- struct list_head childlist_entry;
+ struct childlist_item childlist_entry;
};
+DECLARE_DLIST(childlist, struct child_sa, childlist_entry);
+
static struct hash *nhrp_vc_hash;
-static struct list_head childlist_head[512];
+static struct childlist_head childlist_head[512];
static unsigned int nhrp_vc_key(const void *peer_data)
{
uint32_t child_hash = child_id % array_size(childlist_head);
int abort_migration = 0;
- list_for_each_entry(lsa, &childlist_head[child_hash], childlist_entry)
- {
+ frr_each (childlist, &childlist_head[child_hash], lsa) {
if (lsa->id == child_id) {
sa = lsa;
break;
*sa = (struct child_sa){
.id = child_id,
- .childlist_entry =
- LIST_INITIALIZER(sa->childlist_entry),
.vc = NULL,
};
- list_add_tail(&sa->childlist_entry,
- &childlist_head[child_hash]);
+ childlist_add_tail(&childlist_head[child_hash], sa);
}
if (sa->vc == vc)
/* Update */
sa->vc = vc;
if (!vc) {
- list_del(&sa->childlist_entry);
+ childlist_del(&childlist_head[child_hash], sa);
XFREE(MTYPE_NHRP_VC, sa);
}
nhrp_vc_hash = hash_create(nhrp_vc_key, nhrp_vc_cmp, "NHRP VC hash");
for (i = 0; i < array_size(childlist_head); i++)
- list_init(&childlist_head[i]);
+ childlist_init(&childlist_head[i]);
}
void nhrp_vc_reset(void)
{
- struct child_sa *sa, *n;
+ struct child_sa *sa;
size_t i;
for (i = 0; i < array_size(childlist_head); i++) {
- list_for_each_entry_safe(sa, n, &childlist_head[i],
- childlist_entry)
+ frr_each_safe (childlist, &childlist_head[i], sa)
nhrp_vc_ipsec_updown(sa->id, 0);
}
}