summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>1995-11-13 04:31:41 +0000
committerderaadt <deraadt@openbsd.org>1995-11-13 04:31:41 +0000
commit13e4d6b7c0b2466dd84578b0f32fbf515c5d5fd9 (patch)
tree4abeeef6a2a787600bc53dc7a5838de4d8ae3810
parentgeneric audio man page; from jtk@kolvir.arlington.ma.us; netbsd pr#1752 (diff)
downloadwireguard-openbsd-13e4d6b7c0b2466dd84578b0f32fbf515c5d5fd9.tar.xz
wireguard-openbsd-13e4d6b7c0b2466dd84578b0f32fbf515c5d5fd9.zip
pcap inject function is a good idea; from scottr@edsi.org; netbsd pr#1747
-rw-r--r--lib/libpcap/pcap-bpf.c6
-rw-r--r--lib/libpcap/pcap.39
-rw-r--r--lib/libpcap/pcap.h1
3 files changed, 16 insertions, 0 deletions
diff --git a/lib/libpcap/pcap-bpf.c b/lib/libpcap/pcap-bpf.c
index b73c86cc5a5..6e5c8e2e81f 100644
--- a/lib/libpcap/pcap-bpf.c
+++ b/lib/libpcap/pcap-bpf.c
@@ -126,6 +126,12 @@ pcap_read(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
return (n);
}
+int
+pcap_inject(pcap_t *p, const void *buf, size_t len)
+{
+ return (write(p->fd, buf, len));
+}
+
static inline int
bpf_open(pcap_t *p, char *errbuf)
{
diff --git a/lib/libpcap/pcap.3 b/lib/libpcap/pcap.3
index ac8c422a901..95a2d8a38e0 100644
--- a/lib/libpcap/pcap.3
+++ b/lib/libpcap/pcap.3
@@ -57,6 +57,10 @@ u_char *sp)
.ft
.LP
.ft B
+int pcap_inject(pcap_t *p, void *, size_t)
+.ft
+.LP
+.ft B
int pcap_immediate(pcap_t *p)
.ft
.LP
@@ -213,6 +217,11 @@ Note that its calling arguments are suitable for use with
(??? this guy is kind of weird.)
.ft
.PP
+.B pcap_inject()
+uses
+.B write(2)
+to inject a raw packet through the network interface.
+.PP
.B pcap_immediate()
sets ``immediate'' mode.
If this isn't supported by the under lying packet capture, -1 is
diff --git a/lib/libpcap/pcap.h b/lib/libpcap/pcap.h
index e839e643d6a..0ff43eebbf0 100644
--- a/lib/libpcap/pcap.h
+++ b/lib/libpcap/pcap.h
@@ -110,6 +110,7 @@ int pcap_loop(pcap_t *, int, pcap_handler, u_char *);
int pcap_dispatch(pcap_t *, int, pcap_handler, u_char *);
const u_char*
pcap_next(pcap_t *, struct pcap_pkthdr *);
+int pcap_inject(pcap_t *, const void *, size_t);
int pcap_stats(pcap_t *, struct pcap_stat *);
int pcap_setfilter(pcap_t *, struct bpf_program *);
void pcap_perror(pcap_t *, char *);