| .\" |
| .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 |
| .\" The Regents of the University of California. All rights reserved. |
| .\" All rights reserved. |
| .\" |
| .\" Redistribution and use in source and binary forms, with or without |
| .\" modification, are permitted provided that: (1) source code distributions |
| .\" retain the above copyright notice and this paragraph in its entirety, (2) |
| .\" distributions including binary code include the above copyright notice and |
| .\" this paragraph in its entirety in the documentation or other materials |
| .\" provided with the distribution, and (3) all advertising materials mentioning |
| .\" features or use of this software display the following acknowledgement: |
| .\" ``This product includes software developed by the University of California, |
| .\" Lawrence Berkeley Laboratory and its contributors.'' Neither the name of |
| .\" the University nor the names of its contributors may be used to endorse |
| .\" or promote products derived from this software without specific prior |
| .\" written permission. |
| .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED |
| .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF |
| .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
| .\" |
| .TH PCAP-TSTAMP @MAN_MISC_INFO@ "22 August 2010" |
| .SH NAME |
| pcap-tstamp \- packet time stamps in libpcap |
| .SH DESCRIPTION |
| When capturing traffic, each packet is given a time stamp representing, |
| for incoming packets, the arrival time of the packet and, for outgoing |
| packets, the transmission time of the packet. This time is an |
| approximation of the arrival or transmission time. If it is supplied by |
| the operating system running on the host on which the capture is being |
| done, there are several reasons why it might not precisely represent the |
| arrival or transmission time: |
| .IP |
| if the time stamp is applied to the packet when the networking stack |
| receives the packet, the networking stack might not see the packet until |
| an interrupt is delivered for the packet or a timer event causes the |
| networking device driver to poll for packets, and the time stamp might |
| not be applied until the packet has had some processing done by other |
| code in the networking stack, so there might be a significant delay |
| between the time when the last bit of the packet is received by the |
| capture device and when the networking stack time-stamps the packet; |
| .IP |
| the timer used to generate the time stamps might have low resolution, |
| for example, it might be a timer updated once per host operating system |
| timer tick, with the host operating system timer ticking once every few |
| milliseconds; |
| .IP |
| a high-resolution timer might use a counter that runs at a rate |
| dependent on the processor clock speed, and that clock speed might be |
| adjusted upwards or downwards over time and the timer might not be able |
| to compensate for all those adjustments; |
| .IP |
| the host operating system's clock might be adjusted over time to match a |
| time standard to which the host is being synchronized, which might be |
| done by temporarily slowing down or speeding up the clock or by making a |
| single adjustment; |
| .IP |
| different CPU cores on a multi-core or multi-processor system might be |
| running at different speeds, or might not have time counters all |
| synchronized, so packets time-stamped by different cores might not have |
| consistent time stamps. |
| .LP |
| In addition, packets time-stamped by different cores might be |
| time-stamped in one order and added to the queue of packets for libpcap |
| to read in another order, so time stamps might not be monotonically |
| increasing. |
| .LP |
| Some capture devices on some platforms can provide time stamps for |
| packets; those time stamps are usually high-resolution time stamps, and |
| are usually applied to the packet when the first or last bit of the |
| packet arrives, and are thus more accurate than time stamps provided by |
| the host operating system. Those time stamps might not, however, be |
| synchronized with the host operating system's clock, so that, for |
| example, the time stamp of a packet might not correspond to the time |
| stamp of an event on the host triggered by the arrival of that packet. |
| .LP |
| Depending on the capture device and the software on the host, libpcap |
| might allow different types of time stamp to be used. The |
| .BR pcap_list_tstamp_types (3PCAP) |
| routine provides, for a packet capture handle created by |
| .BR pcap_create (3PCAP) |
| but not yet activated by |
| .BR pcap_activate (3PCAP), |
| a list of time stamp types supported by the capture device for that |
| handle. |
| The list might be empty, in which case no choice of time stamp type is |
| offered for that capture device. If the list is not empty, the |
| .BR pcap_set_tstamp_type (3PCAP) |
| routine can be used after a |
| .B pcap_create() |
| call and before a |
| .B pcap_activate() |
| call to specify the type of time stamp to be used on the device. |
| The time stamp types are listed here; the first value is the #define to |
| use in code, the second value is the value returned by |
| .B pcap_tstamp_type_val_to_name() |
| and accepted by |
| .BR pcap_tstamp_name_to_val() . |
| .RS 5 |
| .TP 5 |
| .BR PCAP_TSTAMP_HOST " - " host |
| Time stamp provided by the host on which the capture is being done. The |
| precision of this time stamp is unspecified; it might or might not be |
| synchronized with the host operating system's clock. |
| .TP 5 |
| .BR PCAP_TSTAMP_HOST_LOWPREC " - " host_lowprec |
| Time stamp provided by the host on which the capture is being done. |
| This is a low-precision time stamp, synchronized with the host operating |
| system's clock. |
| .TP 5 |
| .BR PCAP_TSTAMP_HOST_HIPREC " - " host_hiprec |
| Time stamp provided by the host on which the capture is being done. |
| This is a high-precision time stamp; it might or might not be |
| synchronized with the host operating system's clock. It might be more |
| expensive to fetch than |
| .BR PCAP_TSTAMP_HOST_LOWPREC . |
| .TP 5 |
| .BR PCAP_TSTAMP_ADAPTER " - " adapter |
| Time stamp provided by the network adapter on which the capture is being |
| done. This is a high-precision time stamp, synchronized with the host |
| operating system's clock. |
| .TP 5 |
| .BR PCAP_TSTAMP_ADAPTER_UNSYNCED " - " adapter_unsynced |
| Time stamp provided by the network adapter on which the capture is being |
| done. This is a high-precision time stamp; it is not synchronized with |
| the host operating system's clock. |
| .RE |
| .SH SEE ALSO |
| pcap_set_tstamp_type(3PCAP), |
| pcap_list_tstamp_types(3PCAP), |
| pcap_tstamp_type_val_to_name(3PCAP), |
| pcap_tstamp_name_to_val(3PCAP) |