summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_output.c
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2003-09-23 17:54:04 +0000
committersam <sam@FreeBSD.org>2003-09-23 17:54:04 +0000
commitcd738e85741205de9f360fdbeaa49f30ce2038d9 (patch)
treec61b991702ec6f77c0e1b96cda74ae091fa2e749 /sys/netinet/ip_output.c
parent655247e0f5d689da4bda90e946a5227f58670ef2 (diff)
downloadFreeBSD-src-cd738e85741205de9f360fdbeaa49f30ce2038d9.zip
FreeBSD-src-cd738e85741205de9f360fdbeaa49f30ce2038d9.tar.gz
o update PFIL_HOOKS support to current API used by netbsd
o revamp IPv4+IPv6+bridge usage to match API changes o remove pfil_head instances from protosw entries (no longer used) o add locking o bump FreeBSD version for 3rd party modules Heavy lifting by: "Max Laier" <max@love2party.net> Supported by: FreeBSD Foundation Obtained from: NetBSD (bits of pfil.h and pfil.c)
Diffstat (limited to 'sys/netinet/ip_output.c')
-rw-r--r--sys/netinet/ip_output.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index f6a70ef..41e0cc0 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -65,6 +65,10 @@
#include <netinet/in_var.h>
#include <netinet/ip_var.h>
+#ifdef PFIL_HOOKS
+#include <net/pfil.h>
+#endif
+
#include <machine/in_cksum.h>
static MALLOC_DEFINE(M_IPMOPTS, "ip_moptions", "internet multicast options");
@@ -149,11 +153,6 @@ ip_output(struct mbuf *m0, struct mbuf *opt, struct route *ro,
#endif /* FAST_IPSEC */
struct ip_fw_args args;
int src_was_INADDR_ANY = 0; /* as the name says... */
-#ifdef PFIL_HOOKS
- struct packet_filter_hook *pfh;
- struct mbuf *m1;
- int rv;
-#endif /* PFIL_HOOKS */
args.eh = NULL;
args.rule = NULL;
@@ -741,20 +740,10 @@ spd_done:
/*
* Run through list of hooks for output packets.
*/
- m1 = m;
- pfh = pfil_hook_get(PFIL_OUT, &inetsw[ip_protox[IPPROTO_IP]].pr_pfh);
- for (; pfh; pfh = TAILQ_NEXT(pfh, pfil_link))
- if (pfh->pfil_func) {
- rv = pfh->pfil_func(ip, hlen, ifp, 1, &m1);
- if (rv) {
- error = EHOSTUNREACH;
- goto done;
- }
- m = m1;
- if (m == NULL)
- goto done;
- ip = mtod(m, struct ip *);
- }
+ error = pfil_run_hooks(&inet_pfil_hook, &m, ifp, PFIL_OUT);
+ if (error != 0 || m == NULL)
+ goto done;
+ ip = mtod(m, struct ip *);
#endif /* PFIL_HOOKS */
/*
OpenPOWER on IntegriCloud