summaryrefslogtreecommitdiff
path: root/nest/iface.h
diff options
context:
space:
mode:
authorMaria Matejka <mq@ucw.cz>2023-02-01 12:10:34 +0100
committerMaria Matejka <mq@ucw.cz>2023-02-02 14:40:00 +0100
commit64e08775251960a2b009fc35a084610c9c4c4909 (patch)
treee481e54e3636283fed9f4ca261f272f9fb6a82af /nest/iface.h
parent6e035a9a8c7c943ea5b58932a2bd4c9b733d91ff (diff)
Proto: Adding a list of associated neighbors
This makes for safer and faster pruning and notifying as protocol now on its shutdown prunes only its neighbors and nothing else.
Diffstat (limited to 'nest/iface.h')
-rw-r--r--nest/iface.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/nest/iface.h b/nest/iface.h
index 287f3d96..fb27f99e 100644
--- a/nest/iface.h
+++ b/nest/iface.h
@@ -10,6 +10,7 @@
#define _BIRD_IFACE_H_
#include "lib/lists.h"
+#include "lib/tlists.h"
#include "lib/ip.h"
extern list iface_list;
@@ -126,6 +127,7 @@ void if_recalc_all_preferred_addresses(void);
typedef struct neighbor {
node n; /* Node in neighbor hash table chain */
node if_n; /* Node in per-interface neighbor list */
+ TLIST_NODE(proto_neigh, struct neighbor) proto_n;
ip_addr addr; /* Address of the neighbor */
struct ifa *ifa; /* Ifa on related iface */
struct iface *iface; /* Interface it's connected to */
@@ -138,6 +140,13 @@ typedef struct neighbor {
SCOPE_HOST when it's our own address */
} neighbor;
+#define TLIST_PREFIX proto_neigh
+#define TLIST_TYPE struct neighbor
+#define TLIST_ITEM proto_n
+#define TLIST_WANT_WALK
+#define TLIST_WANT_ADD_TAIL
+#include "lib/tlists.h"
+
#define NEF_STICKY 1
#define NEF_ONLINK 2
#define NEF_IFACE 4 /* Entry for whole iface */
@@ -147,7 +156,7 @@ neighbor *neigh_find(struct proto *p, ip_addr a, struct iface *ifa, uint flags);
void neigh_dump(neighbor *);
void neigh_dump_all(void);
-void neigh_prune(void);
+void neigh_prune(struct proto *);
void neigh_if_up(struct iface *);
void neigh_if_down(struct iface *);
void neigh_if_link(struct iface *);