/src/knot-dns/src/libknot/wire.h
Line | Count | Source |
1 | | /* Copyright (C) CZ.NIC, z.s.p.o. and contributors |
2 | | * SPDX-License-Identifier: GPL-2.0-or-later |
3 | | * For more information, see <https://www.knot-dns.cz/> |
4 | | */ |
5 | | |
6 | | /*! |
7 | | * \file |
8 | | * |
9 | | * \brief Wire integer operations. |
10 | | * |
11 | | * \addtogroup wire |
12 | | * @{ |
13 | | */ |
14 | | |
15 | | #pragma once |
16 | | |
17 | | #include <assert.h> |
18 | | #include <stdint.h> |
19 | | #include <string.h> |
20 | | |
21 | | #include "libknot/endian.h" |
22 | | |
23 | | /*! |
24 | | * \brief Reads 2 bytes from the wireformat data. |
25 | | * |
26 | | * \param pos Data to read the 2 bytes from. |
27 | | * |
28 | | * \return The 2 bytes read, in host byte order. |
29 | | */ |
30 | | inline static uint16_t knot_wire_read_u16(const uint8_t *pos) |
31 | 58.7k | { |
32 | 58.7k | assert(pos); |
33 | 58.7k | uint16_t result; |
34 | 58.7k | memcpy(&result, pos, sizeof(result)); |
35 | 58.7k | return be16toh(result); |
36 | 58.7k | } dname.c:knot_wire_read_u16 Line | Count | Source | 31 | 12.6k | { | 32 | 12.6k | assert(pos); | 33 | 12.6k | uint16_t result; | 34 | 12.6k | memcpy(&result, pos, sizeof(result)); | 35 | | return be16toh(result); | 36 | 12.6k | } |
Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u16 Line | Count | Source | 31 | 37.0k | { | 32 | 37.0k | assert(pos); | 33 | 37.0k | uint16_t result; | 34 | 37.0k | memcpy(&result, pos, sizeof(result)); | 35 | | return be16toh(result); | 36 | 37.0k | } |
Unexecuted instantiation: rrset-wire.c:knot_wire_read_u16 Unexecuted instantiation: rrset.c:knot_wire_read_u16 Unexecuted instantiation: opt.c:knot_wire_read_u16 tsig.c:knot_wire_read_u16 Line | Count | Source | 31 | 4.81k | { | 32 | 4.81k | assert(pos); | 33 | 4.81k | uint16_t result; | 34 | 4.81k | memcpy(&result, pos, sizeof(result)); | 35 | | return be16toh(result); | 36 | 4.81k | } |
tsig-op.c:knot_wire_read_u16 Line | Count | Source | 31 | 4.28k | { | 32 | 4.28k | assert(pos); | 33 | 4.28k | uint16_t result; | 34 | 4.28k | memcpy(&result, pos, sizeof(result)); | 35 | | return be16toh(result); | 36 | 4.28k | } |
Unexecuted instantiation: codes.c:knot_wire_read_u16 Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u16 |
37 | | |
38 | | /*! |
39 | | * \brief Reads 4 bytes from the wireformat data. |
40 | | * |
41 | | * \param pos Data to read the 4 bytes from. |
42 | | * |
43 | | * \return The 4 bytes read, in host byte order. |
44 | | */ |
45 | | inline static uint32_t knot_wire_read_u32(const uint8_t *pos) |
46 | 0 | { |
47 | 0 | assert(pos); |
48 | 0 | uint32_t result; |
49 | 0 | memcpy(&result, pos, sizeof(result)); |
50 | 0 | return be32toh(result); |
51 | 0 | } Unexecuted instantiation: dname.c:knot_wire_read_u32 Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u32 Unexecuted instantiation: pkt.c:knot_wire_read_u32 Unexecuted instantiation: rrset-wire.c:knot_wire_read_u32 Unexecuted instantiation: rrset.c:knot_wire_read_u32 Unexecuted instantiation: opt.c:knot_wire_read_u32 Unexecuted instantiation: tsig.c:knot_wire_read_u32 Unexecuted instantiation: tsig-op.c:knot_wire_read_u32 Unexecuted instantiation: codes.c:knot_wire_read_u32 Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u32 |
52 | | |
53 | | /*! |
54 | | * \brief Reads 6 bytes from the wireformat data. |
55 | | * |
56 | | * \param pos Data to read the 6 bytes from. |
57 | | * |
58 | | * \return The 6 bytes read, in host byte order. |
59 | | */ |
60 | | inline static uint64_t knot_wire_read_u48(const uint8_t *pos) |
61 | 2.62k | { |
62 | 2.62k | assert(pos); |
63 | 2.62k | uint64_t input = 0; |
64 | 2.62k | memcpy((uint8_t *)&input + 1, pos, 6); |
65 | 2.62k | return be64toh(input) >> 8; |
66 | 2.62k | } Unexecuted instantiation: dname.c:knot_wire_read_u48 Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u48 Unexecuted instantiation: pkt.c:knot_wire_read_u48 Unexecuted instantiation: rrset-wire.c:knot_wire_read_u48 Unexecuted instantiation: rrset.c:knot_wire_read_u48 Unexecuted instantiation: opt.c:knot_wire_read_u48 tsig.c:knot_wire_read_u48 Line | Count | Source | 61 | 2.62k | { | 62 | 2.62k | assert(pos); | 63 | 2.62k | uint64_t input = 0; | 64 | 2.62k | memcpy((uint8_t *)&input + 1, pos, 6); | 65 | | return be64toh(input) >> 8; | 66 | 2.62k | } |
Unexecuted instantiation: tsig-op.c:knot_wire_read_u48 Unexecuted instantiation: codes.c:knot_wire_read_u48 Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u48 |
67 | | |
68 | | /*! |
69 | | * \brief Read 8 bytes from the wireformat data. |
70 | | * |
71 | | * \param pos Data to read the 8 bytes from. |
72 | | * |
73 | | * \return The 8 bytes read, in host byte order. |
74 | | */ |
75 | | inline static uint64_t knot_wire_read_u64(const uint8_t *pos) |
76 | 0 | { |
77 | 0 | assert(pos); |
78 | 0 | uint64_t result; |
79 | 0 | memcpy(&result, pos, sizeof(result)); |
80 | 0 | return be64toh(result); |
81 | 0 | } Unexecuted instantiation: dname.c:knot_wire_read_u64 Unexecuted instantiation: fuzz_tsig.c:knot_wire_read_u64 Unexecuted instantiation: pkt.c:knot_wire_read_u64 Unexecuted instantiation: rrset-wire.c:knot_wire_read_u64 Unexecuted instantiation: rrset.c:knot_wire_read_u64 Unexecuted instantiation: opt.c:knot_wire_read_u64 Unexecuted instantiation: tsig.c:knot_wire_read_u64 Unexecuted instantiation: tsig-op.c:knot_wire_read_u64 Unexecuted instantiation: codes.c:knot_wire_read_u64 Unexecuted instantiation: fuzz_packet.c:knot_wire_read_u64 |
82 | | |
83 | | /*! |
84 | | * \brief Writes 2 bytes in wireformat. |
85 | | * |
86 | | * The data are stored in network byte order (big endian). |
87 | | * |
88 | | * \param pos Position where to put the 2 bytes. |
89 | | * \param data Data to put. |
90 | | */ |
91 | | inline static void knot_wire_write_u16(uint8_t *pos, uint16_t data) |
92 | 27.8k | { |
93 | 27.8k | assert(pos); |
94 | 27.8k | uint16_t beval = htobe16(data); |
95 | 27.8k | memcpy(pos, &beval, sizeof(beval)); |
96 | 27.8k | } Unexecuted instantiation: dname.c:knot_wire_write_u16 Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u16 pkt.c:knot_wire_write_u16 Line | Count | Source | 92 | 4.83k | { | 93 | 4.83k | assert(pos); | 94 | 4.83k | uint16_t beval = htobe16(data); | 95 | 4.83k | memcpy(pos, &beval, sizeof(beval)); | 96 | 4.83k | } |
rrset-wire.c:knot_wire_write_u16 Line | Count | Source | 92 | 4.61k | { | 93 | 4.61k | assert(pos); | 94 | 4.61k | uint16_t beval = htobe16(data); | 95 | 4.61k | memcpy(pos, &beval, sizeof(beval)); | 96 | 4.61k | } |
Unexecuted instantiation: rrset.c:knot_wire_write_u16 Unexecuted instantiation: opt.c:knot_wire_write_u16 tsig.c:knot_wire_write_u16 Line | Count | Source | 92 | 10.7k | { | 93 | 10.7k | assert(pos); | 94 | 10.7k | uint16_t beval = htobe16(data); | 95 | 10.7k | memcpy(pos, &beval, sizeof(beval)); | 96 | 10.7k | } |
tsig-op.c:knot_wire_write_u16 Line | Count | Source | 92 | 7.65k | { | 93 | 7.65k | assert(pos); | 94 | 7.65k | uint16_t beval = htobe16(data); | 95 | 7.65k | memcpy(pos, &beval, sizeof(beval)); | 96 | 7.65k | } |
Unexecuted instantiation: codes.c:knot_wire_write_u16 Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u16 |
97 | | |
98 | | /*! |
99 | | * \brief Writes 4 bytes in wireformat. |
100 | | * |
101 | | * The data are stored in network byte order (big endian). |
102 | | * |
103 | | * \param pos Position where to put the 4 bytes. |
104 | | * \param data Data to put. |
105 | | */ |
106 | | inline static void knot_wire_write_u32(uint8_t *pos, uint32_t data) |
107 | 869 | { |
108 | 869 | assert(pos); |
109 | 869 | uint32_t beval = htobe32(data); |
110 | 869 | memcpy(pos, &beval, sizeof(beval)); |
111 | 869 | } Unexecuted instantiation: dname.c:knot_wire_write_u32 Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u32 Unexecuted instantiation: pkt.c:knot_wire_write_u32 Unexecuted instantiation: rrset-wire.c:knot_wire_write_u32 Unexecuted instantiation: rrset.c:knot_wire_write_u32 Unexecuted instantiation: opt.c:knot_wire_write_u32 Unexecuted instantiation: tsig.c:knot_wire_write_u32 tsig-op.c:knot_wire_write_u32 Line | Count | Source | 107 | 869 | { | 108 | 869 | assert(pos); | 109 | 869 | uint32_t beval = htobe32(data); | 110 | 869 | memcpy(pos, &beval, sizeof(beval)); | 111 | 869 | } |
Unexecuted instantiation: codes.c:knot_wire_write_u32 Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u32 |
112 | | |
113 | | /*! |
114 | | * \brief Writes 6 bytes in wireformat. |
115 | | * |
116 | | * The data are stored in network byte order (big endian). |
117 | | * |
118 | | * \param pos Position where to put the 4 bytes. |
119 | | * \param data Data to put. |
120 | | */ |
121 | | inline static void knot_wire_write_u48(uint8_t *pos, uint64_t data) |
122 | 4.08k | { |
123 | 4.08k | assert(pos); |
124 | 4.08k | uint64_t swapped = htobe64(data << 8); |
125 | 4.08k | memcpy(pos, (uint8_t *)&swapped + 1, 6); |
126 | 4.08k | } Unexecuted instantiation: dname.c:knot_wire_write_u48 Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u48 Unexecuted instantiation: pkt.c:knot_wire_write_u48 Unexecuted instantiation: rrset-wire.c:knot_wire_write_u48 Unexecuted instantiation: rrset.c:knot_wire_write_u48 Unexecuted instantiation: opt.c:knot_wire_write_u48 tsig.c:knot_wire_write_u48 Line | Count | Source | 122 | 2.14k | { | 123 | 2.14k | assert(pos); | 124 | 2.14k | uint64_t swapped = htobe64(data << 8); | 125 | 2.14k | memcpy(pos, (uint8_t *)&swapped + 1, 6); | 126 | 2.14k | } |
tsig-op.c:knot_wire_write_u48 Line | Count | Source | 122 | 1.94k | { | 123 | 1.94k | assert(pos); | 124 | 1.94k | uint64_t swapped = htobe64(data << 8); | 125 | 1.94k | memcpy(pos, (uint8_t *)&swapped + 1, 6); | 126 | 1.94k | } |
Unexecuted instantiation: codes.c:knot_wire_write_u48 Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u48 |
127 | | |
128 | | /*! |
129 | | * \brief Writes 8 bytes in wireformat. |
130 | | * |
131 | | * The data are stored in network byte order (big endian). |
132 | | * |
133 | | * \param pos Position where to put the 8 bytes. |
134 | | * \param data Data to put. |
135 | | */ |
136 | | inline static void knot_wire_write_u64(uint8_t *pos, uint64_t data) |
137 | 0 | { |
138 | 0 | assert(pos); |
139 | 0 | uint64_t beval = htobe64(data); |
140 | 0 | memcpy(pos, &beval, sizeof(beval)); |
141 | 0 | } Unexecuted instantiation: dname.c:knot_wire_write_u64 Unexecuted instantiation: fuzz_tsig.c:knot_wire_write_u64 Unexecuted instantiation: pkt.c:knot_wire_write_u64 Unexecuted instantiation: rrset-wire.c:knot_wire_write_u64 Unexecuted instantiation: rrset.c:knot_wire_write_u64 Unexecuted instantiation: opt.c:knot_wire_write_u64 Unexecuted instantiation: tsig.c:knot_wire_write_u64 Unexecuted instantiation: tsig-op.c:knot_wire_write_u64 Unexecuted instantiation: codes.c:knot_wire_write_u64 Unexecuted instantiation: fuzz_packet.c:knot_wire_write_u64 |
142 | | |
143 | | /*! @} */ |