diff options
author | ume <ume@FreeBSD.org> | 2001-06-24 14:52:55 +0000 |
---|---|---|
committer | ume <ume@FreeBSD.org> | 2001-06-24 14:52:55 +0000 |
commit | 04561e19342024a1da2330aad6619d107d220adc (patch) | |
tree | 32c402ef27fcff5e1d200bfb75e2d622ae87c93a | |
parent | 2b2c653ce3eec218d3b09dc62a2c6eaca21eedc3 (diff) | |
download | FreeBSD-src-04561e19342024a1da2330aad6619d107d220adc.zip FreeBSD-src-04561e19342024a1da2330aad6619d107d220adc.tar.gz |
inject outbound packet to BPF.
Submitted by: itojun
Obtained from: KAME
MFC after: 10 days
-rw-r--r-- | sys/net/if_stf.c | 26 |
1 files changed, 25 insertions, 1 deletions
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)); |