Click
Loading...
Searching...
No Matches
packet_anno.hh
1#ifndef CLICK_PACKET_ANNO_HH
2#define CLICK_PACKET_ANNO_HH
3#include <click/config.h>
4#include <click/vector.hh>
5#include <click/string.hh>
6#include <click/timestamp.hh>
7
8#define ANNO_SIZE 48
9
10#define MAKE_ANNOTATIONINFO(offset, size) ((size) << 16 | (offset))
11#define ANNOTATIONINFO_SIZE(ai) ((ai) >> 16)
12#define ANNOTATIONINFO_OFFSET(ai) ((uint16_t) (ai))
13
14#define DST_IP_ANNO_OFFSET 0
15#define DST_IP_ANNO_SIZE 4
16
17#define DST_IP6_ANNO_OFFSET 0
18#define DST_IP6_ANNO_SIZE 16
19
20// bytes 16-31
21#define WIFI_EXTRA_ANNO_OFFSET 16
22#define WIFI_EXTRA_ANNO_SIZE 24
23#define WIFI_EXTRA_ANNO(p) ((click_wifi_extra *) ((p)->anno_u8() + WIFI_EXTRA_ANNO_OFFSET))
24
25// bytes 16-23
26#define MIDDLEBOX_BOOLS_OFFSET 16
27#define MIDDLEBOX_BOOLS_SIZE 1
28#define MIDDLEBOX_CONTENTOFFSET_OFFSET 17
29#define MIDDLEBOX_CONTENTOFFSET_SIZE 2
30#define MIDDLEBOX_INIT_ACK_OFFSET 19
31
32// byte 16-17
33#define PAINT2_ANNO_OFFSET 16
34#define PAINT2_ANNO_SIZE 2
35#define PAINT2_ANNO(p) ((p)->anno_u16(PAINT2_ANNO_OFFSET))
36#define SET_PAINT2_ANNO(p, v) ((p)->set_anno_u16(PAINT2_ANNO_OFFSET, (v)))
37
38// byte 16
39#define ICMP_PARAMPROB_ANNO_OFFSET 16
40#define ICMP_PARAMPROB_ANNO_SIZE 1
41#define ICMP_PARAMPROB_ANNO(p) ((p)->anno_u8(ICMP_PARAMPROB_ANNO_OFFSET))
42#define SET_ICMP_PARAMPROB_ANNO(p, v) ((p)->set_anno_u8(ICMP_PARAMPROB_ANNO_OFFSET, (v)))
43
44#define IP6_NXT_ANNO_OFFSET 16
45#define IP6_NXT_ANNO_SIZE 1
46#define IP6_NXT_ANNO(p) ((p)->anno_u8(IP6_NXT_ANNO_OFFSET))
47#define SET_IP6_NXT_ANNO(p, v) ((p)->set_anno_u8(IP6_NXT_ANNO_OFFSET, (v)))
48
49// byte 17 (lower byte of PAINT2)
50#define PAINT_ANNO_OFFSET 17
51#define PAINT_ANNO_SIZE 1
52#define PAINT_ANNO(p) ((p)->anno_u8(PAINT_ANNO_OFFSET))
53#define SET_PAINT_ANNO(p, v) ((p)->set_anno_u8(PAINT_ANNO_OFFSET, (v)))
54
55// byte 19
56#define FIX_IP_SRC_ANNO_OFFSET 19
57#define FIX_IP_SRC_ANNO_SIZE 1
58#define FIX_IP_SRC_ANNO(p) ((p)->anno_u8(FIX_IP_SRC_ANNO_OFFSET))
59#define SET_FIX_IP_SRC_ANNO(p, v) ((p)->set_anno_u8(FIX_IP_SRC_ANNO_OFFSET, (v)))
60
61// bytes 20-21
62#define VLAN_TCI_ANNO_OFFSET 20
63#define VLAN_TCI_ANNO_SIZE 2
64#define VLAN_TCI_ANNO(p) ((p)->anno_u16(VLAN_TCI_ANNO_OFFSET))
65#define SET_VLAN_TCI_ANNO(p, v) ((p)->set_anno_u16(VLAN_TCI_ANNO_OFFSET, (v)))
66
67// bytes 20-23
68#define AGGREGATE_ANNO_OFFSET 20
69#define AGGREGATE_ANNO_SIZE 4
70#define AGGREGATE_ANNO(p) ((p)->anno_u32(AGGREGATE_ANNO_OFFSET))
71#define SET_AGGREGATE_ANNO(p, v) ((p)->set_anno_u32(AGGREGATE_ANNO_OFFSET, (v)))
72
73#define FWD_RATE_ANNO_OFFSET 20
74#define FWD_RATE_ANNO_SIZE 4
75#define FWD_RATE_ANNO(p) ((p)->anno_s32(FWD_RATE_ANNO_OFFSET))
76#define SET_FWD_RATE_ANNO(p, v) ((p)->set_anno_s32(FWD_RATE_ANNO_OFFSET, (v)))
77
78#define MISC_IP_ANNO_OFFSET 20
79#define MISC_IP_ANNO_SIZE 4
80#define MISC_IP_ANNO(p) ((p)->anno_u32(MISC_IP_ANNO_OFFSET))
81#define SET_MISC_IP_ANNO(p, v) ((p)->set_anno_u32(MISC_IP_ANNO_OFFSET, (v).addr()))
82
83// bytes 24-27
84#define REV_RATE_ANNO_OFFSET 24
85#define REV_RATE_ANNO_SIZE 4
86#define REV_RATE_ANNO(p) ((p)->anno_s32(REV_RATE_ANNO_OFFSET))
87#define SET_REV_RATE_ANNO(p, v) ((p)->set_anno_s32(REV_RATE_ANNO_OFFSET, (v)))
88
89// bytes 24-25
90#define BATCH_COUNT_ANNO_OFFSET 24
91#define BATCH_COUNT_ANNO_SIZE 2
92#define BATCH_COUNT_ANNO(p) ((p)->anno_u16(BATCH_COUNT_ANNO_OFFSET))
93#define SET_BATCH_COUNT_ANNO(p, v) ((p)->set_anno_u16(BATCH_COUNT_ANNO_OFFSET, (v)))
94
95// byte 26-37
96#define EXTRA_PACKETS_ANNO_OFFSET 26
97#define EXTRA_PACKETS_ANNO_SIZE 2
98#define EXTRA_PACKETS_ANNO(p) ((p)->anno_u16(EXTRA_PACKETS_ANNO_OFFSET))
99#define SET_EXTRA_PACKETS_ANNO(p, v) ((p)->set_anno_u16(EXTRA_PACKETS_ANNO_OFFSET, (v)))
100
101// byte 26
102#define SEND_ERR_ANNO_OFFSET 26
103#define SEND_ERR_ANNO_SIZE 1
104#define SEND_ERR_ANNO(p) ((p)->anno_u8(SEND_ERR_ANNO_OFFSET))
105#define SET_SEND_ERR_ANNO(p, v) ((p)->set_anno_u8(SEND_ERR_ANNO_OFFSET, (v)))
106
107// byte 27
108#define GRID_ROUTE_CB_ANNO_OFFSET 27
109#define GRID_ROUTE_CB_ANNO_SIZE 1
110#define GRID_ROUTE_CB_ANNO(p) ((p)->anno_u8(GRID_ROUTE_CB_ANNO_OFFSET))
111#define SET_GRID_ROUTE_CB_ANNO(p, v) ((p)->set_anno_u8(GRID_ROUTE_CB_ANNO_OFFSET, (v)))
112
113// bytes 28-31
114#define IPREASSEMBLER_ANNO_OFFSET 28
115#define IPREASSEMBLER_ANNO_SIZE 4
116
117#define EXTRA_LENGTH_ANNO_OFFSET 28
118#define EXTRA_LENGTH_ANNO_SIZE 4
119#define EXTRA_LENGTH_ANNO(p) ((p)->anno_u32(EXTRA_LENGTH_ANNO_OFFSET))
120#define SET_EXTRA_LENGTH_ANNO(p, v) ((p)->set_anno_u32(EXTRA_LENGTH_ANNO_OFFSET, (v)))
121
122
123// bytes 32-39
124#define FIRST_TIMESTAMP_ANNO_OFFSET 32
125#define FIRST_TIMESTAMP_ANNO_SIZE 8
126#define CONST_FIRST_TIMESTAMP_ANNO(p) (*(reinterpret_cast<const Timestamp *>((p)->anno_u8() + FIRST_TIMESTAMP_ANNO_OFFSET)))
127#define FIRST_TIMESTAMP_ANNO(p) (*(reinterpret_cast<Timestamp *>((p)->anno_u8() + FIRST_TIMESTAMP_ANNO_OFFSET)))
128#define SET_FIRST_TIMESTAMP_ANNO(p, v) (*(reinterpret_cast<Timestamp *>((p)->anno_u8() + FIRST_TIMESTAMP_ANNO_OFFSET)) = (v))
129
130// bytes 32-35
131#define PACKET_NUMBER_ANNO_OFFSET 32
132#define PACKET_NUMBER_ANNO_SIZE 4
133#define PACKET_NUMBER_ANNO(p) ((p)->anno_u32(PACKET_NUMBER_ANNO_OFFSET))
134#define SET_PACKET_NUMBER_ANNO(p, v) ((p)->set_anno_u32(PACKET_NUMBER_ANNO_OFFSET, (v)))
135
136#define FLOW_ID_ANNO_OFFSET 32
137#define FLOW_ID_ANNO_SIZE 4
138#define FLOW_ID_ANNO(p) ((p)->anno_u32(FLOW_ID_ANNO_OFFSET))
139#define SET_FLOW_ID_ANNO(p, v) ((p)->set_anno_u32(FLOW_ID_ANNO_OFFSET, (v)))
140
141#define IPSEC_SPI_ANNO_OFFSET 32
142#define IPSEC_SPI_ANNO_SIZE 4
143#define IPSEC_SPI_ANNO(p) ((p)->anno_u32(IPSEC_SPI_ANNO_OFFSET))
144#define SET_IPSEC_SPI_ANNO(p, v) ((p)->set_anno_u32(IPSEC_SPI_ANNO_OFFSET, (v)))
145
146// bytes 36-39
147#define SEQUENCE_NUMBER_ANNO_OFFSET 36
148#define SEQUENCE_NUMBER_ANNO_SIZE 4
149#define SEQUENCE_NUMBER_ANNO(p) ((p)->anno_u32(SEQUENCE_NUMBER_ANNO_OFFSET))
150#define SET_SEQUENCE_NUMBER_ANNO(p, v) ((p)->set_anno_u32(SEQUENCE_NUMBER_ANNO_OFFSET, (v)))
151
152#if SIZEOF_VOID_P == 4
153# define IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET 36
154# define IPSEC_SA_DATA_REFERENCE_ANNO_SIZE 4
155# define IPSEC_SA_DATA_REFERENCE_ANNO(p) ((p)->anno_u32(IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET))
156# define SET_IPSEC_SA_DATA_REFERENCE_ANNO(p, v) ((p)->set_anno_u32(IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET, (v)))
157#endif
158
159#if HAVE_INT64_TYPES
160// bytes 40-47
161# define PERFCTR_ANNO_OFFSET 40
162# define PERFCTR_ANNO_SIZE 8
163# define PERFCTR_ANNO(p) ((p)->anno_u64(PERFCTR_ANNO_OFFSET))
164# define SET_PERFCTR_ANNO(p, v) ((p)->set_anno_u64(PERFCTR_ANNO_OFFSET, (v)))
165
166# if SIZEOF_VOID_P == 8
167# define IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET 40
168# define IPSEC_SA_DATA_REFERENCE_ANNO_SIZE 8
169# define IPSEC_SA_DATA_REFERENCE_ANNO(p) ((p)->anno_u64(IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET))
170# define SET_IPSEC_SA_DATA_REFERENCE_ANNO(p, v) ((p)->set_anno_u64(IPSEC_SA_DATA_REFERENCE_ANNO_OFFSET, (v)))
171# endif
172#endif
173
174CLICK_ENDDECLS
175#endif
Click's String class.
The Timestamp class represents a moment or interval in time.
Click's vector container template.