Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F108686382
D38103.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D38103.diff
View Options
diff --git a/sys/net/bpf.h b/sys/net/bpf.h
--- a/sys/net/bpf.h
+++ b/sys/net/bpf.h
@@ -53,6 +53,7 @@
typedef u_int32_t bpf_u_int32;
typedef int64_t bpf_int64;
typedef u_int64_t bpf_u_int64;
+struct ifnet;
/*
* Alignment macros. BPF_WORDALIGN rounds up to the next multiple of
@@ -421,8 +422,11 @@
void bpf_bufheld(struct bpf_d *d);
int bpf_validate(const struct bpf_insn *, int);
void bpf_tap(struct bpf_if *, u_char *, u_int);
+void bpf_tap_if(struct ifnet *, u_char *, u_int);
void bpf_mtap(struct bpf_if *, struct mbuf *);
+void bpf_mtap_if(struct ifnet *, struct mbuf *);
void bpf_mtap2(struct bpf_if *, void *, u_int, struct mbuf *);
+void bpf_mtap2_if(struct ifnet *, void *, u_int, struct mbuf *);
void bpfattach(struct ifnet *, u_int, u_int);
void bpfattach2(struct ifnet *, u_int, u_int, struct bpf_if **);
void bpfdetach(struct ifnet *);
@@ -444,22 +448,12 @@
return (0);
}
-#define BPF_TAP(_ifp,_pkt,_pktlen) do { \
- if (bpf_peers_present((_ifp)->if_bpf)) \
- bpf_tap((_ifp)->if_bpf, (_pkt), (_pktlen)); \
-} while (0)
-#define BPF_MTAP(_ifp,_m) do { \
- if (bpf_peers_present((_ifp)->if_bpf)) { \
- M_ASSERTVALID(_m); \
- bpf_mtap((_ifp)->if_bpf, (_m)); \
- } \
-} while (0)
-#define BPF_MTAP2(_ifp,_data,_dlen,_m) do { \
- if (bpf_peers_present((_ifp)->if_bpf)) { \
- M_ASSERTVALID(_m); \
- bpf_mtap2((_ifp)->if_bpf,(_data),(_dlen),(_m)); \
- } \
-} while (0)
+#define BPF_TAP(_ifp,_pkt,_pktlen) \
+ bpf_tap_if((_ifp), (_pkt), (_pktlen))
+#define BPF_MTAP(_ifp,_m) \
+ bpf_mtap_if((_ifp), (_m))
+#define BPF_MTAP2(_ifp,_data,_dlen,_m) \
+ bpf_mtap2_if((_ifp), (_data), (_dlen), (_m))
#endif
/*
@@ -468,7 +462,6 @@
#define BPF_MEMWORDS 16
/* BPF attach/detach events */
-struct ifnet;
typedef void (*bpf_track_fn)(void *, struct ifnet *, int /* dlt */,
int /* 1 =>'s attach */);
EVENTHANDLER_DECLARE(bpf_track, bpf_track_fn);
diff --git a/sys/net/bpf.c b/sys/net/bpf.c
--- a/sys/net/bpf.c
+++ b/sys/net/bpf.c
@@ -2349,6 +2349,13 @@
NET_EPOCH_EXIT(et);
}
+void
+bpf_tap_if(if_t ifp, u_char *pkt, u_int pktlen)
+{
+ if (bpf_peers_present(ifp->if_bpf))
+ bpf_tap(ifp->if_bpf, pkt, pktlen);
+}
+
#define BPF_CHECK_DIRECTION(d, r, i) \
(((d)->bd_direction == BPF_D_IN && (r) != (i)) || \
((d)->bd_direction == BPF_D_OUT && (r) == (i)))
@@ -2409,6 +2416,15 @@
NET_EPOCH_EXIT(et);
}
+void
+bpf_mtap_if(if_t ifp, struct mbuf *m)
+{
+ if (bpf_peers_present(ifp->if_bpf)) {
+ M_ASSERTVALID(m);
+ bpf_mtap(ifp->if_bpf, m);
+ }
+}
+
/*
* Incoming linkage from device drivers, when packet is in
* an mbuf chain and to be prepended by a contiguous header.
@@ -2466,6 +2482,15 @@
NET_EPOCH_EXIT(et);
}
+void
+bpf_mtap2_if(if_t ifp, void *data, u_int dlen, struct mbuf *m)
+{
+ if (bpf_peers_present(ifp->if_bpf)) {
+ M_ASSERTVALID(m);
+ bpf_mtap2(ifp->if_bpf, data, dlen, m);
+ }
+}
+
#undef BPF_CHECK_DIRECTION
#undef BPF_TSTAMP_NONE
#undef BPF_TSTAMP_FAST
diff --git a/sys/net/ethernet.h b/sys/net/ethernet.h
--- a/sys/net/ethernet.h
+++ b/sys/net/ethernet.h
@@ -35,7 +35,7 @@
* encapsulation) and whether or not an FCS is present.
*/
#define ETHER_MAX_FRAME(ifp, etype, hasfcs) \
- ((ifp)->if_mtu + ETHER_HDR_LEN + \
+ (if_getmtu(ifp) + ETHER_HDR_LEN + \
((hasfcs) ? ETHER_CRC_LEN : 0) + \
(((etype) == ETHERTYPE_VLAN) ? ETHER_VLAN_ENCAP_LEN : 0))
@@ -399,15 +399,10 @@
* ether_vlan_mtap. This function will re-insert VLAN tags for the duration
* of the tap, so they show up properly for network analyzers.
*/
-#define ETHER_BPF_MTAP(_ifp, _m) do { \
- if (bpf_peers_present((_ifp)->if_bpf)) { \
- M_ASSERTVALID(_m); \
- if (((_m)->m_flags & M_VLANTAG) != 0) \
- ether_vlan_mtap((_ifp)->if_bpf, (_m), NULL, 0); \
- else \
- bpf_mtap((_ifp)->if_bpf, (_m)); \
- } \
-} while (0)
+struct ifnet;
+struct mbuf;
+void ether_bpf_mtap_if(struct ifnet *ifp, struct mbuf *m);
+#define ETHER_BPF_MTAP(_ifp, _m) ether_bpf_mtap_if((_ifp), (_m))
/*
* Names for 802.1q priorities ("802.1p"). Notice that in this scheme,
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -1337,6 +1337,18 @@
return (m);
}
+void
+ether_bpf_mtap_if(struct ifnet *ifp, struct mbuf *m)
+{
+ if (bpf_peers_present(ifp->if_bpf)) {
+ M_ASSERTVALID(m);
+ if ((m->m_flags & M_VLANTAG) != 0)
+ ether_vlan_mtap(ifp->if_bpf, m, NULL, 0);
+ else
+ bpf_mtap(ifp->if_bpf, m);
+ }
+}
+
static SYSCTL_NODE(_net_link, IFT_L2VLAN, vlan, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
"IEEE 802.1Q VLAN");
static SYSCTL_NODE(_net_link_vlan, PF_LINK, link,
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Jan 28, 7:42 AM (4 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16260105
Default Alt Text
D38103.diff (4 KB)
Attached To
Mode
D38103: bpf: Add "_if" tap APIs
Attached
Detach File
Event Timeline
Log In to Comment