Drop main() prototype. Syncs with NetBSD-8
[minix.git] / external / bsd / libpcap / dist / pcap_loop.3pcap
blob612e2c3a6d8c938292ce25993fd77e0edce08332
1 .\"     $NetBSD: pcap_loop.3pcap,v 1.3 2015/03/31 21:39:42 christos Exp $
2 .\"
3 .\" Copyright (c) 1994, 1996, 1997
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that: (1) source code distributions
8 .\" retain the above copyright notice and this paragraph in its entirety, (2)
9 .\" distributions including binary code include the above copyright notice and
10 .\" this paragraph in its entirety in the documentation or other materials
11 .\" provided with the distribution, and (3) all advertising materials mentioning
12 .\" features or use of this software display the following acknowledgement:
13 .\" ``This product includes software developed by the University of California,
14 .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
15 .\" the University nor the names of its contributors may be used to endorse
16 .\" or promote products derived from this software without specific prior
17 .\" written permission.
18 .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
19 .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
20 .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 .\"
22 .TH PCAP_LOOP 3PCAP "13 October 2013"
23 .SH NAME
24 pcap_loop, pcap_dispatch \- process packets from a live capture or savefile
25 .SH SYNOPSIS
26 .nf
27 .ft B
28 #include <pcap/pcap.h>
29 .ft
30 .LP
31 .ft B
32 typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h,
33 .ti +8
34                              const u_char *bytes);
35 .ft
36 .LP
37 .ft B
38 int pcap_loop(pcap_t *p, int cnt,
39 .ti +8
40 pcap_handler callback, u_char *user);
41 int pcap_dispatch(pcap_t *p, int cnt,
42 .ti +8
43 pcap_handler callback, u_char *user);
44 .ft
45 .fi
46 .SH DESCRIPTION
47 .B pcap_loop()
48 processes packets from a live capture or ``savefile'' until
49 .I cnt
50 packets are processed, the end of the ``savefile'' is
51 reached when reading from a ``savefile'',
52 .B pcap_breakloop()
53 is called, or an error occurs.
54 It does
55 .B not
56 return when live read timeouts occur.
57 A value of \-1 or 0 for
58 .I cnt
59 is equivalent to infinity, so that packets are processed until another
60 ending condition occurs.
61 .PP
62 .B pcap_dispatch()
63 processes packets from a live capture or ``savefile'' until
64 .I cnt
65 packets are processed, the end of the current bufferful of packets is
66 reached when doing a live capture, the end of the ``savefile'' is
67 reached when reading from a ``savefile'',
68 .B pcap_breakloop()
69 is called, or an error occurs.
70 Thus, when doing a live capture,
71 .I cnt
72 is the maximum number of packets to process before returning, but is not
73 a minimum number; when reading a live capture, only one
74 bufferful of packets is read at a time, so fewer than
75 .I cnt
76 packets may be processed. A value of \-1 or 0 for
77 .I cnt
78 causes all the packets received in one buffer to be processed when
79 reading a live capture, and causes all the packets in the file to be
80 processed when reading a ``savefile''.
81 .PP
82 Note that, when doing a live capture on some platforms, if the read
83 timeout expires when there are no packets available,
84 .B pcap_dispatch()
85 will return 0, even when not in non-blocking mode, as there are no
86 packets to process.  Applications should be prepared for this to happen,
87 but must not rely on it happening.
88 .PP
89 .ft B
90 (In older versions of libpcap, the behavior when
91 \fIcnt\fP
92 was 0 was undefined; different platforms and devices behaved
93 differently, so code that must work with older versions of libpcap
94 should use \-1, not 0, as the value of
95 \fIcnt\fP.)
96 .ft R
97 .PP
98 .I callback
99 specifies a
100 .I pcap_handler
101 routine to be called with three arguments:
103 .I u_char
104 pointer which is passed in the
105 .I user
106 argument to
107 .B pcap_loop()
109 .BR pcap_dispatch() ,
111 .I const struct pcap_pkthdr
112 pointer pointing to the packet time stamp and lengths, and a
113 .I const u_char
114 pointer to the first
115 .B caplen
116 (as given in the
117 .I struct pcap_pkthdr
118 a pointer to which is passed to the callback routine)
119 bytes of data from the packet.  The
120 .I struct pcap_pkthdr
121 and the packet data are not to be freed by the callback routine, and are
122 not guaranteed to be valid after the callback routine returns; if the
123 code needs them to be valid after the callback, it must make a copy of
124 them.
126 The bytes of data from the packet begin with a link-layer header.  The
127 format of the link-layer header is indicated by the return value of the
128 .B pcap_datalink()
129 routine when handed the
130 .B pcap_t
131 value also passed to
132 .B pcap_loop()
134 .BR pcap_dispatch() .
135 .I http://www.tcpdump.org/linktypes.html
136 lists the values
137 .B pcap_datalink()
138 can return and describes the packet formats that
139 correspond to those values.  The value it returns will be valid for all
140 packets received unless and until
141 .B pcap_set_datalink()
142 is called; after a successful call to
143 .BR pcap_set_datalink() ,
144 all subsequent packets will have a link-layer header of the type
145 specified by the link-layer header type value passed to
146 .BR pcap_set_datalink() .
149 .B NOT
150 assume that the packets for a given capture or ``savefile`` will have
151 any given link-layer header type, such as
152 .B DLT_EN10MB
153 for Ethernet.  For example, the "any" device on Linux will have a
154 link-layer header type of
155 .B DLT_LINUX_SLL
156 even if all devices on the system at the time the "any" device is opened
157 have some other data link type, such as
158 .B DLT_EN10MB
159 for Ethernet.
160 .SH RETURN VALUE
161 .B pcap_loop()
162 returns 0 if
163 .I cnt
164 is exhausted or if, when reading from a ``savefile'', no more packets
165 are available.  It returns \-1 if an error occurs or \-2 if the loop
166 terminated due to a call to
167 .B pcap_breakloop()
168 before any packets were processed.
169 It does
170 .B not
171 return when live read timeouts occur; instead, it attempts to read more
172 packets.
174 .B pcap_dispatch()
175 returns the number of packets processed on success; this can be 0 if no
176 packets were read from a live capture (if, for example, they were
177 discarded because they didn't pass the packet filter, or if, on
178 platforms that support a read timeout that starts before any packets
179 arrive, the timeout expires before any packets arrive, or if the file
180 descriptor for the capture device is in non-blocking mode and no packets
181 were available to be read) or if no more packets are available in a
182 ``savefile.''  It returns \-1 if an error occurs or \-2 if the loop
183 terminated due to a call to
184 .B pcap_breakloop()
185 before any packets were processed.
186 .ft B
187 If your application uses pcap_breakloop(),
188 make sure that you explicitly check for \-1 and \-2, rather than just
189 checking for a return value < 0.
190 .ft R
192 If \-1 is returned,
193 .B pcap_geterr()
195 .B pcap_perror()
196 may be called with
197 .I p
198 as an argument to fetch or display the error text.
199 .SH SEE ALSO
200 pcap(3PCAP), pcap_geterr(3PCAP), pcap_breakloop(3PCAP),
201 pcap_datalink(3PCAP)