Blame pcap_next_ex.3pcap

Packit 209cc3
.\" Copyright (c) 1994, 1996, 1997
Packit 209cc3
.\"	The Regents of the University of California.  All rights reserved.
Packit 209cc3
.\"
Packit 209cc3
.\" Redistribution and use in source and binary forms, with or without
Packit 209cc3
.\" modification, are permitted provided that: (1) source code distributions
Packit 209cc3
.\" retain the above copyright notice and this paragraph in its entirety, (2)
Packit 209cc3
.\" distributions including binary code include the above copyright notice and
Packit 209cc3
.\" this paragraph in its entirety in the documentation or other materials
Packit 209cc3
.\" provided with the distribution, and (3) all advertising materials mentioning
Packit 209cc3
.\" features or use of this software display the following acknowledgement:
Packit 209cc3
.\" ``This product includes software developed by the University of California,
Packit 209cc3
.\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
Packit 209cc3
.\" the University nor the names of its contributors may be used to endorse
Packit 209cc3
.\" or promote products derived from this software without specific prior
Packit 209cc3
.\" written permission.
Packit 209cc3
.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
Packit 209cc3
.\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
Packit 209cc3
.\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Packit 209cc3
.\"
Packit 209cc3
.TH PCAP_NEXT_EX 3PCAP "25 July 2018"
Packit 209cc3
.SH NAME
Packit 209cc3
pcap_next_ex, pcap_next \- read the next packet from a pcap_t
Packit 209cc3
.SH SYNOPSIS
Packit 209cc3
.nf
Packit 209cc3
.ft B
Packit 209cc3
#include <pcap/pcap.h>
Packit 209cc3
.ft
Packit 209cc3
.LP
Packit 209cc3
.ft B
Packit 209cc3
int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header,
Packit 209cc3
.ti +8
Packit 209cc3
const u_char **pkt_data);
Packit 209cc3
const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);
Packit 209cc3
.ft
Packit 209cc3
.fi
Packit 209cc3
.SH DESCRIPTION
Packit 209cc3
.B pcap_next_ex()
Packit 209cc3
reads the next packet and returns a success/failure indication.
Packit 209cc3
If the packet was read without problems, the pointer pointed to by the
Packit 209cc3
.I pkt_header
Packit 209cc3
argument is set to point to the
Packit 209cc3
.I pcap_pkthdr
Packit 209cc3
struct for the packet, and the
Packit 209cc3
pointer pointed to by the
Packit 209cc3
.I pkt_data
Packit 209cc3
argument is set to point to the data in the packet.  The
Packit 209cc3
.I struct pcap_pkthdr
Packit 209cc3
and the packet data are not to be freed by the caller, and are not
Packit 209cc3
guaranteed to be valid after the next call to
Packit 209cc3
.BR pcap_next_ex() ,
Packit 209cc3
.BR pcap_next() ,
Packit 209cc3
.BR pcap_loop(3PCAP) ,
Packit 209cc3
or
Packit 209cc3
.BR pcap_dispatch(3PCAP) ;
Packit 209cc3
if the code needs them to remain valid, it must make a copy of them.
Packit 209cc3
.PP
Packit 209cc3
.B pcap_next()
Packit 209cc3
reads the next packet (by calling
Packit 209cc3
.B pcap_dispatch()
Packit 209cc3
with a
Packit 209cc3
.I cnt
Packit 209cc3
of 1) and returns a
Packit 209cc3
.I u_char
Packit 209cc3
pointer to the data in that packet.  The
Packit 209cc3
packet data is not to be freed by the caller, and is not
Packit 209cc3
guaranteed to be valid after the next call to
Packit 209cc3
.BR pcap_next_ex() ,
Packit 209cc3
.BR pcap_next() ,
Packit 209cc3
.BR pcap_loop() ,
Packit 209cc3
or
Packit 209cc3
.BR pcap_dispatch() ;
Packit 209cc3
if the code needs it to remain valid, it must make a copy of it.
Packit 209cc3
The
Packit 209cc3
.I pcap_pkthdr
Packit 209cc3
structure pointed to by
Packit 209cc3
.I h
Packit 209cc3
is filled in with the appropriate values for the packet.
Packit 209cc3
.PP
Packit 209cc3
The bytes of data from the packet begin with a link-layer header.  The
Packit 209cc3
format of the link-layer header is indicated by the return value of the
Packit 209cc3
.B pcap_datalink(PCAP)
Packit 209cc3
routine when handed the
Packit 209cc3
.B pcap_t
Packit 209cc3
value also passed to
Packit 209cc3
.B pcap_loop()
Packit 209cc3
or
Packit 209cc3
.BR pcap_dispatch() .
Packit 209cc3
.I https://www.tcpdump.org/linktypes.html
Packit 209cc3
lists the values
Packit 209cc3
.B pcap_datalink()
Packit 209cc3
can return and describes the packet formats that
Packit 209cc3
correspond to those values.  The value it returns will be valid for all
Packit 209cc3
packets received unless and until
Packit 209cc3
.B pcap_set_datalink(3PCAP)
Packit 209cc3
is called; after a successful call to
Packit 209cc3
.BR pcap_set_datalink() ,
Packit 209cc3
all subsequent packets will have a link-layer header of the type
Packit 209cc3
specified by the link-layer header type value passed to
Packit 209cc3
.BR pcap_set_datalink() .
Packit 209cc3
.PP
Packit 209cc3
Do
Packit 209cc3
.B NOT
Packit 209cc3
assume that the packets for a given capture or ``savefile`` will have
Packit 209cc3
any given link-layer header type, such as
Packit 209cc3
.B DLT_EN10MB
Packit 209cc3
for Ethernet.  For example, the "any" device on Linux will have a
Packit 209cc3
link-layer header type of
Packit 209cc3
.B DLT_LINUX_SLL
Packit 209cc3
even if all devices on the system at the time the "any" device is opened
Packit 209cc3
have some other data link type, such as
Packit 209cc3
.B DLT_EN10MB
Packit 209cc3
for Ethernet.
Packit 209cc3
.SH RETURN VALUE
Packit 209cc3
.B pcap_next_ex()
Packit 209cc3
returns 1 if the packet was read without problems, 0 if packets are
Packit 209cc3
being read from a live capture and the packet buffer timeout expired,
Packit 209cc3
.B PCAP_ERROR
Packit 209cc3
if an error occurred while reading the packet, and
Packit 209cc3
.B PCAP_ERROR_BREAK
Packit 209cc3
if packets
Packit 209cc3
are being read from a ``savefile'' and there are no more packets to read
Packit 209cc3
from the savefile.  If
Packit 209cc3
.B PCAP_ERROR
Packit 209cc3
is returned,
Packit 209cc3
.B pcap_geterr(3PCAP)
Packit 209cc3
or
Packit 209cc3
.B pcap_perror(3PCAP)
Packit 209cc3
may be called with
Packit 209cc3
.I p
Packit 209cc3
as an argument to fetch or display the error text.
Packit 209cc3
.PP
Packit 209cc3
.B pcap_next()
Packit 209cc3
returns a pointer to the packet data on success, and returns
Packit 209cc3
.B NULL
Packit 209cc3
if an error occurred, or if no packets were read from a live capture
Packit 209cc3
(if, for example, they were discarded because they didn't pass the
Packit 209cc3
packet filter, or if, on platforms that support a packet buffer timeout
Packit 209cc3
that starts before any packets arrive, the timeout expires before any
Packit 209cc3
packets arrive, or if the file descriptor for the capture device is in
Packit 209cc3
non-blocking mode and no packets were available to be read), or if no
Packit 209cc3
more packets are available in a ``savefile.'' Unfortunately, there is no
Packit 209cc3
way to determine whether an error occurred or not.
Packit 209cc3
.SH SEE ALSO
Packit 209cc3
pcap(3PCAP)