blob: eea8c1d29ee3f3f5d677bc60552b919f4b1d4d3e [file] [log] [blame]
JP Abgrall511eca32014-02-12 13:46:45 -08001.\"
2.\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997
3.\" The Regents of the University of California. All rights reserved.
4.\" 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.\"
Haibo Huangee759ce2021-01-05 21:34:29 -080022.TH PCAP-TSTAMP @MAN_MISC_INFO@ "14 July 2020"
JP Abgrall511eca32014-02-12 13:46:45 -080023.SH NAME
24pcap-tstamp \- packet time stamps in libpcap
25.SH DESCRIPTION
26When capturing traffic, each packet is given a time stamp representing,
27for incoming packets, the arrival time of the packet and, for outgoing
28packets, the transmission time of the packet. This time is an
29approximation of the arrival or transmission time. If it is supplied by
30the operating system running on the host on which the capture is being
31done, there are several reasons why it might not precisely represent the
32arrival or transmission time:
33.IP
34if the time stamp is applied to the packet when the networking stack
35receives the packet, the networking stack might not see the packet until
36an interrupt is delivered for the packet or a timer event causes the
37networking device driver to poll for packets, and the time stamp might
38not be applied until the packet has had some processing done by other
39code in the networking stack, so there might be a significant delay
40between the time when the last bit of the packet is received by the
41capture device and when the networking stack time-stamps the packet;
42.IP
43the timer used to generate the time stamps might have low resolution,
44for example, it might be a timer updated once per host operating system
45timer tick, with the host operating system timer ticking once every few
46milliseconds;
47.IP
48a high-resolution timer might use a counter that runs at a rate
49dependent on the processor clock speed, and that clock speed might be
50adjusted upwards or downwards over time and the timer might not be able
51to compensate for all those adjustments;
52.IP
53the host operating system's clock might be adjusted over time to match a
54time standard to which the host is being synchronized, which might be
55done by temporarily slowing down or speeding up the clock or by making a
56single adjustment;
57.IP
58different CPU cores on a multi-core or multi-processor system might be
59running at different speeds, or might not have time counters all
60synchronized, so packets time-stamped by different cores might not have
Haibo Huangee759ce2021-01-05 21:34:29 -080061consistent time stamps;
62.IP
63some time sources, such as those that supply POSIX "seconds since the
64Epoch" time, do not count leap seconds, meaning that the seconds
65portion
66.RB ( tv_sec )
67of the time stamp might not be incremented for a leap second, so that
68the fraction-of-a-second part of the time stamp might roll over past
69zero but the second part would not change, or the clock might run
70slightly more slowly for a period before the leap second.
71.LP
72For these reasons, time differences between packet time stamps will not
73necessarily accurately reflect the time differences between the receipt
74or transmission times of the packets.
JP Abgrall511eca32014-02-12 13:46:45 -080075.LP
76In addition, packets time-stamped by different cores might be
77time-stamped in one order and added to the queue of packets for libpcap
78to read in another order, so time stamps might not be monotonically
79increasing.
80.LP
81Some capture devices on some platforms can provide time stamps for
82packets; those time stamps are usually high-resolution time stamps, and
83are usually applied to the packet when the first or last bit of the
84packet arrives, and are thus more accurate than time stamps provided by
85the host operating system. Those time stamps might not, however, be
86synchronized with the host operating system's clock, so that, for
87example, the time stamp of a packet might not correspond to the time
88stamp of an event on the host triggered by the arrival of that packet.
Haibo Huangee759ce2021-01-05 21:34:29 -080089If they are synchronized with the host operating system's clock, some of
90the issues listed above with time stamps supplied by the host operating
91system may also apply to time stamps supplied by the capture device.
JP Abgrall511eca32014-02-12 13:46:45 -080092.LP
93Depending on the capture device and the software on the host, libpcap
94might allow different types of time stamp to be used. The
95.BR pcap_list_tstamp_types (3PCAP)
96routine provides, for a packet capture handle created by
97.BR pcap_create (3PCAP)
98but not yet activated by
99.BR pcap_activate (3PCAP),
100a list of time stamp types supported by the capture device for that
101handle.
102The list might be empty, in which case no choice of time stamp type is
103offered for that capture device. If the list is not empty, the
104.BR pcap_set_tstamp_type (3PCAP)
105routine can be used after a
Haibo Huangee759ce2021-01-05 21:34:29 -0800106.BR pcap_create ()
JP Abgrall511eca32014-02-12 13:46:45 -0800107call and before a
Haibo Huangee759ce2021-01-05 21:34:29 -0800108.BR pcap_activate ()
JP Abgrall511eca32014-02-12 13:46:45 -0800109call to specify the type of time stamp to be used on the device.
110The time stamp types are listed here; the first value is the #define to
111use in code, the second value is the value returned by
Haibo Huangee759ce2021-01-05 21:34:29 -0800112.BR pcap_tstamp_type_val_to_name (3PCAP)
JP Abgrall511eca32014-02-12 13:46:45 -0800113and accepted by
Haibo Huangee759ce2021-01-05 21:34:29 -0800114.BR pcap_tstamp_type_name_to_val (3PCAP) .
JP Abgrall511eca32014-02-12 13:46:45 -0800115.RS 5
116.TP 5
117.BR PCAP_TSTAMP_HOST " - " host
118Time stamp provided by the host on which the capture is being done. The
119precision of this time stamp is unspecified; it might or might not be
120synchronized with the host operating system's clock.
121.TP 5
122.BR PCAP_TSTAMP_HOST_LOWPREC " - " host_lowprec
Elliott Hughesd8845d72015-10-19 18:07:04 -0700123Time stamp provided by the host on which the capture is being done.
JP Abgrall511eca32014-02-12 13:46:45 -0800124This is a low-precision time stamp, synchronized with the host operating
125system's clock.
126.TP 5
127.BR PCAP_TSTAMP_HOST_HIPREC " - " host_hiprec
Elliott Hughesd8845d72015-10-19 18:07:04 -0700128Time stamp provided by the host on which the capture is being done.
Haibo Huangee759ce2021-01-05 21:34:29 -0800129This is a high-precision time stamp, synchronized with the host
130operating system's clock. It might be more expensive to fetch than
131.BR PCAP_TSTAMP_HOST_LOWPREC .
132.TP 5
133.BR PCAP_TSTAMP_HOST_HIPREC_UNSYNCED " - " host_hiprec_unsynced
134Time stamp provided by the host on which the capture is being done.
135This is a high-precision time stamp, not synchronized with the host
136operating system's clock. It might be more expensive to fetch than
JP Abgrall511eca32014-02-12 13:46:45 -0800137.BR PCAP_TSTAMP_HOST_LOWPREC .
138.TP 5
139.BR PCAP_TSTAMP_ADAPTER " - " adapter
140Time stamp provided by the network adapter on which the capture is being
141done. This is a high-precision time stamp, synchronized with the host
142operating system's clock.
143.TP 5
144.BR PCAP_TSTAMP_ADAPTER_UNSYNCED " - " adapter_unsynced
145Time stamp provided by the network adapter on which the capture is being
146done. This is a high-precision time stamp; it is not synchronized with
147the host operating system's clock.
148.RE
Elliott Hughesd8845d72015-10-19 18:07:04 -0700149.LP
Haibo Huangee759ce2021-01-05 21:34:29 -0800150Time stamps synchronized with the system clock can go backwards, as the
151system clock can go backwards. If a clock is not in sync with the
152system clock, that could be because the system clock isn't keeping
153accurate time, because the other clock isn't keeping accurate time, or
154both.
155.LP
156Host-provided time stamps generally correspond to the time when the
157time-stamping code sees the packet; this could be some unknown amount of
158time after the first or last bit of the packet is received by the
159network adapter, due to batching of interrupts for packet arrival,
160queueing delays, etc..
161.LP
Elliott Hughesd8845d72015-10-19 18:07:04 -0700162By default, when performing a live capture or reading from a savefile,
163time stamps are supplied as seconds since January 1, 1970, 00:00:00 UTC,
164and microseconds since that seconds value, even if higher-resolution
165time stamps are available from the capture device or in the savefile.
166If, when reading a savefile, the time stamps in the file have a higher
167resolution than one microsecond, the additional digits of resolution are
168discarded.
169.LP
170The
171.BR pcap_set_tstamp_precision (3PCAP)
172routine can be used after a
Haibo Huangee759ce2021-01-05 21:34:29 -0800173.BR pcap_create ()
Elliott Hughesd8845d72015-10-19 18:07:04 -0700174call and after a
Haibo Huangee759ce2021-01-05 21:34:29 -0800175.BR pcap_activate ()
Elliott Hughesd8845d72015-10-19 18:07:04 -0700176call to specify the resolution of the time stamps to get for the device.
177If the hardware or software cannot supply a higher-resolution time
178stamp, the
Haibo Huangee759ce2021-01-05 21:34:29 -0800179.BR pcap_set_tstamp_precision ()
Elliott Hughesd8845d72015-10-19 18:07:04 -0700180call will fail, and the time stamps supplied after the
Haibo Huangee759ce2021-01-05 21:34:29 -0800181.BR pcap_activate ()
Elliott Hughesd8845d72015-10-19 18:07:04 -0700182call will have microsecond resolution.
183.LP
184When opening a savefile, the
Haibo Huang4ccd6832020-04-23 18:03:48 -0700185.BR \%pcap_open_offline_with_tstamp_precision (3PCAP)
Elliott Hughesd8845d72015-10-19 18:07:04 -0700186and
Haibo Huang4ccd6832020-04-23 18:03:48 -0700187.BR \%pcap_fopen_offline_with_tstamp_precision (3PCAP)
Elliott Hughesd8845d72015-10-19 18:07:04 -0700188routines can be used to specify the resolution of time stamps to be read
189from the file; if the time stamps in the file have a lower resolution,
190the fraction-of-a-second portion of the time stamps will be scaled to
191the specified resolution.
192.LP
193The
194.BR pcap_get_tstamp_precision (3PCAP)
195routine returns the resolution of time stamps that will be supplied;
196when capturing packets, this does not reflect the actual precision of
197the time stamp supplied by the hardware or operating system and, when
198reading a savefile, this does not indicate the actual precision of time
199stamps in the file.
JP Abgrall511eca32014-02-12 13:46:45 -0800200.SH SEE ALSO
Haibo Huangee759ce2021-01-05 21:34:29 -0800201.BR pcap (3PCAP)