diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c
index 4612b32c139..af552f20aa7 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -55,6 +55,7 @@ __FBSDID("$FreeBSD$");
#include <netinet/libalias/alias_local.h>
#include <netinet/libalias/alias_mod.h>
#include <net/if.h>
+#include <net/vnet.h>
#else
#include "alias.h"
#include "alias_local.h"
@@ -63,6 +64,21 @@ __FBSDID("$FreeBSD$");
#include "alias_db.h"
+#ifndef V_hook_alias
+typedef int (*ipfw_hook_t)(const void *arg, const void *extdata);
+/* callback hooks for notify on update of internal states and aliases */
+VNET_DECLARE(ipfw_hook_t, hook_state);
+#define V_hook_state VNET(hook_state)
+VNET_DECLARE(ipfw_hook_t, hook_alias);
+#define V_hook_alias VNET(hook_alias)
+VNET_DECLARE(ipfw_hook_t, sync_state);
+#define V_sync_state VNET(sync_state)
+VNET_DECLARE(ipfw_hook_t, sync_alias);
+#define V_sync_alias VNET(sync_alias)
+#endif
+
+VNET_DEFINE(ipfw_hook_t, hook_alias) = NULL;
+
static LIST_HEAD(, libalias) instancehead = LIST_HEAD_INITIALIZER(instancehead);
int LibAliasTime;
@@ -708,6 +724,10 @@ AddLink(struct libalias *la, struct in_addr src_addr, struct in_addr dst_addr,
if (la->packetAliasMode & PKT_ALIAS_LOG)
ShowAliasStats(la);
+#ifdef IPFW_INTERNAL
+ if (lnk && V_hook_alias)
+ V_hook_alias(lnk, NULL);
+#endif
return (lnk);
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>