From 04561e19342024a1da2330aad6619d107d220adc Mon Sep 17 00:00:00 2001 From: ume Date: Sun, 24 Jun 2001 14:52:55 +0000 Subject: inject outbound packet to BPF. Submitted by: itojun Obtained from: KAME MFC after: 10 days --- sys/net/if_stf.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'sys/net') diff --git a/sys/net/if_stf.c b/sys/net/if_stf.c index 979e6c5..13a67f9 100644 --- a/sys/net/if_stf.c +++ b/sys/net/if_stf.c @@ -1,5 +1,5 @@ /* $FreeBSD$ */ -/* $KAME: if_stf.c,v 1.60 2001/05/03 14:51:47 itojun Exp $ */ +/* $KAME: if_stf.c,v 1.62 2001/06/07 22:32:16 itojun Exp $ */ /* * Copyright (C) 2000 WIDE Project. @@ -376,6 +376,30 @@ stf_output(ifp, m, dst, rt) return ENETUNREACH; } +#if NBPFILTER > 0 + if (ifp->if_bpf) { + /* + * We need to prepend the address family as + * a four byte field. Cons up a dummy header + * to pacify bpf. This is safe because bpf + * will only read from the mbuf (i.e., it won't + * try to free it or keep a pointer a to it). + */ + struct mbuf m0; + u_int32_t af = AF_INET6; + + m0.m_next = m; + m0.m_len = 4; + m0.m_data = (char *)⁡ + +#ifdef HAVE_OLD_BPF + bpf_mtap(ifp, &m0); +#else + bpf_mtap(ifp->if_bpf, &m0); +#endif + } +#endif /*NBPFILTER > 0*/ + M_PREPEND(m, sizeof(struct ip), M_DONTWAIT); if (m && m->m_len < sizeof(struct ip)) m = m_pullup(m, sizeof(struct ip)); -- cgit v1.1