Coverage Report

Created: 2026-03-12 06:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libpcap/pcap-util.h
Line
Count
Source
1
/*
2
 * Copyright (c) 1993, 1994, 1995, 1996, 1997
3
 *  The Regents of the University of California.  All rights reserved.
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that: (1) source code distributions
7
 * retain the above copyright notice and this paragraph in its entirety, (2)
8
 * distributions including binary code include the above copyright notice and
9
 * this paragraph in its entirety in the documentation or other materials
10
 * provided with the distribution, and (3) all advertising materials mentioning
11
 * features or use of this software display the following acknowledgement:
12
 * ``This product includes software developed by the University of California,
13
 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14
 * the University nor the names of its contributors may be used to endorse
15
 * or promote products derived from this software without specific prior
16
 * written permission.
17
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20
 *
21
 * pcap-util.h - common code for various files
22
 */
23
24
#ifndef pcap_util_h
25
#define pcap_util_h
26
27
#include <pcap/pcap-inttypes.h>
28
/*
29
 * We use the "receiver-makes-right" approach to byte order;
30
 * because time is at a premium when we are writing the file.
31
 * In other words, the pcap_file_header and pcap_pkthdr,
32
 * records are written in host byte order.
33
 * Note that the bytes of packet data are written out in the order in
34
 * which they were received, so multi-byte fields in packets are not
35
 * written in host byte order, they're written in whatever order the
36
 * sending machine put them in.
37
 *
38
 * We also use this for fixing up packet data headers from a remote
39
 * capture, where the server may have a different byte order from the
40
 * client.
41
 *
42
 * ntoh[ls] aren't sufficient because we might need to swap on a big-endian
43
 * machine (if the file was written in little-end order).
44
 */
45
68
#define SWAPLL(y)  ((((uint64_t)(y) & 0xff00000000000000ULL) >> 56) | \
46
68
                      (((uint64_t)(y) & 0x00ff000000000000ULL) >> 40) | \
47
68
                      (((uint64_t)(y) & 0x0000ff0000000000ULL) >> 24) | \
48
68
                      (((uint64_t)(y) & 0x000000ff00000000ULL) >> 8)  | \
49
68
                      (((uint64_t)(y) & 0x00000000ff000000ULL) << 8)  | \
50
68
                      (((uint64_t)(y) & 0x0000000000ff0000ULL) << 24) | \
51
68
                      (((uint64_t)(y) & 0x000000000000ff00ULL) << 40) | \
52
68
                      (((uint64_t)(y) & 0x00000000000000ffULL) << 56))
53
#define SWAPLONG(y) \
54
399k
    (((((u_int)(y))&0xff)<<24) | \
55
399k
     ((((u_int)(y))&0xff00)<<8) | \
56
399k
     ((((u_int)(y))&0xff0000)>>8) | \
57
399k
     ((((u_int)(y))>>24)&0xff))
58
#define SWAPSHORT(y) \
59
36.8k
     ((u_short)(((((u_int)(y))&0xff)<<8) | \
60
36.8k
                ((((u_int)(y))&0xff00)>>8)))
61
62
/*
63
 * Byte-swap a pcap_4_byte_aligned_uint64;
64
 */
65
static inline pcap_4_byte_aligned_uint64 swap_4_byte_aligned_uint64(pcap_4_byte_aligned_uint64 val)
66
9.74k
{
67
9.74k
  return (pcap_4_byte_aligned_uint64){.halves[0] = SWAPLONG(val.halves[1]), .halves[1] = SWAPLONG(val.halves[0])};
68
9.74k
}
Unexecuted instantiation: gencode.c:swap_4_byte_aligned_uint64
Unexecuted instantiation: sf-pcapng.c:swap_4_byte_aligned_uint64
Unexecuted instantiation: sf-pcap.c:swap_4_byte_aligned_uint64
Unexecuted instantiation: pcap-linux.c:swap_4_byte_aligned_uint64
pcap-util.c:swap_4_byte_aligned_uint64
Line
Count
Source
66
9.74k
{
67
9.74k
  return (pcap_4_byte_aligned_uint64){.halves[0] = SWAPLONG(val.halves[1]), .halves[1] = SWAPLONG(val.halves[0])};
68
9.74k
}
69
70
/*
71
 * Byte-swap a pcap_4_byte_aligned_int64;
72
 */
73
static inline pcap_4_byte_aligned_int64 swap_4_byte_aligned_int64(pcap_4_byte_aligned_int64 val)
74
8.58k
{
75
8.58k
  return (pcap_4_byte_aligned_int64){.halves[0] = SWAPLONG(val.halves[1]), .halves[1] = SWAPLONG(val.halves[0])};
76
8.58k
}
Unexecuted instantiation: gencode.c:swap_4_byte_aligned_int64
Unexecuted instantiation: sf-pcapng.c:swap_4_byte_aligned_int64
Unexecuted instantiation: sf-pcap.c:swap_4_byte_aligned_int64
Unexecuted instantiation: pcap-linux.c:swap_4_byte_aligned_int64
pcap-util.c:swap_4_byte_aligned_int64
Line
Count
Source
74
8.58k
{
75
8.58k
  return (pcap_4_byte_aligned_int64){.halves[0] = SWAPLONG(val.halves[1]), .halves[1] = SWAPLONG(val.halves[0])};
76
8.58k
}
77
78
extern void pcapint_post_process(int linktype, int swapped,
79
    struct pcap_pkthdr *hdr, u_char *data);
80
81
#endif // pcap_util_h