33#include <sys/libkern.h>
36#include <sys/rwlock.h>
58 TAILQ_HEAD_INITIALIZER(handler_chain);
65 TAILQ_FOREACH(b, &handler_chain, link) {
71 TAILQ_INSERT_BEFORE(b, p, link);
76 TAILQ_INSERT_TAIL(&handler_chain, p, link);
87 error = attach_handler(p);
101 TAILQ_REMOVE(&handler_chain, p, link);
114 TAILQ_FOREACH(p, &handler_chain, link)
125 return (TAILQ_FIRST(&handler_chain));
130static SLIST_HEAD(dll_chain, dll) dll_chain = SLIST_HEAD_INITIALIZER(dll_chain);
132attach_dll(
struct dll *p)
136 SLIST_FOREACH(b, &dll_chain,
next) {
137 if (!strncmp(b->name, p->name, DLL_LEN))
140 SLIST_INSERT_HEAD(&dll_chain, p,
next);
147 struct dll *b, *b_tmp;
152 SLIST_FOREACH_SAFE(b, &dll_chain,
next, b_tmp)
153 if (!strncmp(b->name, p, DLL_LEN)) {
154 SLIST_REMOVE(&dll_chain, b, dll,
next);
166 t = SLIST_FIRST(&dll_chain);
169 SLIST_REMOVE_HEAD(&dll_chain,
next);
int LibAliasAttachHandlers(struct proto_handler *p)
static TAILQ_HEAD(handler_chain, proto_handler)
int find_handler(int8_t dir, int8_t proto, struct libalias *la, struct ip *ip, struct alias_data *ad)
int LibAliasDetachHandlers(struct proto_handler *p)
struct proto_handler * first_handler(void)
SLIST_HEAD(in_multi_head, in_multi)
int(* fingerprint)(struct libalias *, struct alias_data *)
int(* protohandler)(struct libalias *, struct ip *, struct alias_data *)