2 * Copyright (c) 2015 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
7 * http://www.apache.org/licenses/LICENSE-2.0
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
16 * pcap.h: libpcap packet capture format
18 * Copyright (c) 2008 Eliot Dresselhaus
20 * Permission is hereby granted, free of charge, to any person obtaining
21 * a copy of this software and associated documentation files (the
22 * "Software"), to deal in the Software without restriction, including
23 * without limitation the rights to use, copy, modify, merge, publish,
24 * distribute, sublicense, and/or sell copies of the Software, and to
25 * permit persons to whom the Software is furnished to do so, subject to
26 * the following conditions:
28 * The above copyright notice and this permission notice shall be
29 * included in all copies or substantial portions of the Software.
31 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41 * @brief PCAP utility definitions
43 #ifndef included_vppinfra_pcap_h
44 #define included_vppinfra_pcap_h
46 #include <vppinfra/types.h>
47 #include <vppinfra/cache.h>
48 #include <vppinfra/mem.h>
49 #include <vppinfra/lock.h>
52 * @brief Known libpcap encap types
54 * These codes end up in the pcap file header.
55 * If you decide to build a wireshark dissector,
56 * you'll need to know that these codes are mapped
57 * through the pcap_to_wtap_map[] array in .../wiretap/pcap-common.c.
61 * { 280, WTAP_ENCAP_VPP },
63 * A file with the officially-allocated vpp packet type PCAP_PACKET_TYPE_vpp
64 * aka 280, will need a top-level dissector registered to
65 * deal with WTAP_ENCAP_VPP [=206].
69 * dissector_add_uint("wtap_encap", WTAP_ENCAP_VPP, vpp_dissector_handle);
72 #define foreach_vnet_pcap_packet_type \
98 #define _(f,n) PCAP_PACKET_TYPE_##f = (n),
99 foreach_vnet_pcap_packet_type
101 } pcap_packet_type_t;
103 #define foreach_pcap_file_header \
104 /** 0xa1b2c3d4 host byte order. \
105 0xd4c3b2a1 => need to byte swap everything. */ \
108 /** Currently major 2 minor 4. */ \
109 _ (u16, major_version) \
110 _ (u16, minor_version) \
115 /** Accuracy of timestamps. Typically set to 0. */ \
118 /** Size of largest packet in file. */ \
119 _ (u32, max_packet_size_in_bytes) \
121 /** One of vnet_pcap_packet_type_t. */ \
124 /** File header struct */
128 foreach_pcap_file_header
130 } pcap_file_header_t;
132 #define foreach_pcap_packet_header \
133 /** Time stamp in seconds */ \
134 _ (u32, time_in_sec) \
135 /** Time stamp in microseconds. */ \
136 _ (u32, time_in_usec) \
138 /** Number of bytes stored in file. */ \
139 _ (u32, n_packet_bytes_stored_in_file) \
140 /** Number of bytes in actual packet. */ \
141 _ (u32, n_bytes_in_packet)
143 /** Packet header. */
147 foreach_pcap_packet_header
149 /** Packet data follows. */
151 } pcap_packet_header_t;
154 * @brief PCAP main state data structure
158 /** spinlock to protect e.g. pcap_data */
159 clib_spinlock_t lock;
161 /** File name of pcap output. */
164 /** Number of packets to capture. */
165 u32 n_packets_to_capture;
168 pcap_packet_type_t packet_type;
170 /** Number of packets currently captured. */
171 u32 n_packets_captured;
175 #define PCAP_MAIN_INIT_DONE (1 << 0)
177 /** File descriptor for reading/writing. */
181 u32 n_pcap_data_written;
183 /** Vector of pcap data. */
186 /** Packets read from file. */
192 /** Min/Max Packet bytes */
193 u32 min_packet_bytes, max_packet_bytes;
196 #define PCAP_DEF_PKT_TO_CAPTURE (100)
198 #endif /* included_vppinfra_pcap_h */
201 * fd.io coding-style-patch-verification: ON
204 * eval: (c-set-style "gnu")