1 /* blf.h
2  *
3  * BLF file format decoder for the Wiretap library.
4  *
5  * Copyright (c) 2021 by Dr. Lars Voelker <lars.voelker@technica-engineering.de>
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  */
9 
10  /*
11   * The following was used as a reference for the file format:
12   *     https://bitbucket.org/tobylorenz/vector_blf
13   * The repo above includes multiple examples files as well.
14   */
15 
16 #ifndef __W_BLF_H__
17 #define __W_BLF_H__
18 
19 #include "wtap.h"
20 #include <epan/value_string.h>
21 
22 wtap_open_return_val blf_open(wtap *wth, int *err, gchar **err_info);
23 
24 
25 #define BLF_HEADER_TYPE_DEFAULT                   1
26 
27 #define BLF_COMPRESSION_NONE                      0
helper_raise_interrupt(CPUX86State * env,int intno,int next_eip_addend)28 #define BLF_COMPRESSION_ZLIB                      2
29 
30 #define BLF_TIMESTAMP_RESOLUTION_10US             1
31 #define BLF_TIMESTAMP_RESOLUTION_1NS              2
32 
33 typedef struct blf_date {
34     guint16 year;
35     guint16 month;
36     guint16 dayofweek;
37     guint16 day;
38     guint16 hour;
39     guint16 mins;
40     guint16 sec;
41     guint16 ms;
42 } blf_date_t;
43 
check_exception(CPUX86State * env,int intno,int * error_code,uintptr_t retaddr)44 /* BLF Header */
45 typedef struct blf_fileheader {
46     guint8 magic[4];
47     guint32 header_length;
48 
49     guint8 applications[4];
50     guint8 api[4];
51 
52     guint64 len_compressed;
53     guint64 len_uncompressed;
54 
55     guint32 obj_count;
56     guint32 obj_read;
57 
58     blf_date_t start_date;
59     blf_date_t end_date;
60 
61     guint32 length3;
62 } blf_fileheader_t;
63 
64 typedef struct blf_blockheader {
65     guint8  magic[4];
66     guint16 header_length;         /* length of header starting with magic */
67     guint16 header_type;           /* header format ? */
68     guint32 object_length;         /* complete length including header */
69     guint32 object_type;
70 } blf_blockheader_t;
71 
72 typedef struct blf_logcontainerheader {
73     guint16 compression_method;    /* 0 uncompressed, 2 zlib */
74     guint16 res1;
75     guint32 res2;
76     guint32 uncompressed_size;
77     guint32 res4;
78 } blf_logcontainerheader_t;
79 
80 typedef struct blf_logobjectheader {
81     guint32 flags;
82     guint16 client_index;
83     guint16 object_version;
84     guint64 object_timestamp;
85 } blf_logobjectheader_t;
86 
87 typedef struct blf_ethernetframeheader {
88     guint8  src_addr[6];
89     guint16 channel;
raise_interrupt2(CPUX86State * env,int intno,int is_int,int error_code,int next_eip_addend,uintptr_t retaddr)90     guint8  dst_addr[6];
91     guint16 direction;
92     guint16 ethtype;
93     guint16 tpid;
94     guint16 tci;
95     guint16 payloadlength;
96     guint64 res;
97 } blf_ethernetframeheader_t;
98 
99 typedef struct blf_ethernetframeheader_ex {
100     guint16 struct_length;
101     guint16 flags;
102     guint16 channel;
103     guint16 hw_channel;
104     guint64 frame_duration;
105     guint32 frame_checksum;
106     guint16 direction;
107     guint16 frame_length;
108     guint32 frame_handle;
109     guint32 error;
110 } blf_ethernetframeheader_ex_t;
111 
112 typedef struct blf_wlanframeheader {
113     guint16 channel;
raise_interrupt(CPUX86State * env,int intno,int is_int,int error_code,int next_eip_addend)114     guint16 flags;
115     guint8  direction;
116     guint8  radio_channel;
117     guint16 signal_strength;
118     guint16 signal_quality;
119     guint16 frame_length;
raise_exception_err(CPUX86State * env,int exception_index,int error_code)120     guint32 res;
121 } blf_wlanframeheader_t;
122 
123 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanMessage.h */
124 
125 /* shared for CAN message and CAN message2 and CANFD message */
raise_exception_err_ra(CPUX86State * env,int exception_index,int error_code,uintptr_t retaddr)126 #define BLF_CANMESSAGE_FLAG_TX                      0x01
127 #define BLF_CANMESSAGE_FLAG_NERR                    0x20
128 #define BLF_CANMESSAGE_FLAG_WU                      0x40
129 #define BLF_CANMESSAGE_FLAG_RTR                     0x80
130 
131 /* shared for CAN message and CAN message2*/
132 typedef struct blf_canmessage {
133     guint16 channel;
134     guint8  flags;
135     guint8  dlc;
136     guint32 id;
137 } blf_canmessage_t;
138 
139 
140 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanMessage2.h */
141 
142 typedef struct blf_canmessage2_trailer {
143     guint32 frameLength_in_ns;
144     guint8 bitCount;
145     guint8 reserved1;
146     guint16 reserved2;
147 } blf_canmessage2_trailer_t;
148 
149 
150 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanFdMessage.h */
151 
152 /* EDL 0: CAN, 1: CAN-FD*/
153 #define BLF_CANFDMESSAGE_CANFDFLAG_EDL              0x01
154 #define BLF_CANFDMESSAGE_CANFDFLAG_BRS              0x02
155 #define BLF_CANFDMESSAGE_CANFDFLAG_ESI              0x04
156 
157 typedef struct blf_canfdmessage {
158     guint16 channel;
159     guint8  flags;
160     guint8  dlc;
161     guint32 id;
162     guint32 frameLength_in_ns;
163     guint8  canfdflags;
164     guint8  validDataBytes;
165     guint8  reservedCanFdMessage1;
166     guint32  reservedCanFdMessage2;
167     /* DATA */
168     /* guint32 reservedCanFdMessage3 */
169 } blf_canfdmessage_t;
170 
171 
172 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/CanFdMessage64.h */
173 
174 #define BLF_CANFDMESSAGE64_FLAG_NERR                0x000004
175 #define BLF_CANFDMESSAGE64_FLAG_HIGH_VOLT_WAKE_UP   0x000008
176 #define BLF_CANFDMESSAGE64_FLAG_REMOTE_FRAME        0x000010
177 #define BLF_CANFDMESSAGE64_FLAG_TX_ACK              0x000040
178 #define BLF_CANFDMESSAGE64_FLAG_TX_REQ              0x000080
179 #define BLF_CANFDMESSAGE64_FLAG_SRR                 0x000200
180 #define BLF_CANFDMESSAGE64_FLAG_R0                  0x000400
181 #define BLF_CANFDMESSAGE64_FLAG_R1                  0x000800
182 /* EDL 0: CAN, 1: CAN-FD*/
183 #define BLF_CANFDMESSAGE64_FLAG_EDL                 0x001000
184 #define BLF_CANFDMESSAGE64_FLAG_BRS                 0x002000
185 #define BLF_CANFDMESSAGE64_FLAG_ESI                 0x004000
186 #define BLF_CANFDMESSAGE64_FLAG_BURST               0x200000
187 
188 typedef struct blf_canfdmessage64 {
189     guint8  channel;
190     guint8  dlc;
191     guint8  validDataBytes;
192     guint8  txCount;
193     guint32 id;
194     guint32 frameLength_in_ns;
195     guint32 flags;
196     guint32 btrCfgArb;
197     guint32 btrCfgData;
198     guint32 timeOffsetBrsNs;
199     guint32 timeOffsetCrcDelNs;
200     guint16 bitCount;
201     guint8  dir;
202     guint8  extDataOffset;
203     guint32 crc;
204 } blf_canfdmessage64_t;
205 
206 
207 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayData.h */
208 
209 #define BLF_FLEXRAYDATA_FRAME                       0x01
210 #define BLF_FLEXRAYDATA_CHANNEL_B                   0x80
211 
212 typedef struct blf_flexraydata {
213     guint16 channel;
214     guint8  mux;
215     guint8  len;
216     guint16 messageId;
217     guint16 crc;
218     guint8  dir;
219     guint8  reservedFlexRayData1;
220     guint16 reservedFlexRayData2;
221 } blf_flexraydata_t;
222 
223 
224 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayV6Message.h */
225 
226 #define BLF_FLEXRAYMESSAGE_DIR_RX                   0x01
227 #define BLF_FLEXRAYMESSAGE_DIR_TX                   0x02
228 #define BLF_FLEXRAYMESSAGE_DIR_TX_REQ               0x04
229 
230 #define BLF_FLEXRAYMESSAGE_STATE_PPI                0x01
231 #define BLF_FLEXRAYMESSAGE_STATE_SFI                0x02
232 #define BLF_FLEXRAYMESSAGE_STATE_RES_BIT2           0x04
233 #define BLF_FLEXRAYMESSAGE_STATE_NFI                0x08
234 #define BLF_FLEXRAYMESSAGE_STATE_STFI               0x10
235 #define BLF_FLEXRAYMESSAGE_STATE_FORMAT             0xe0
236 
237 #define BLF_FLEXRAYMESSAGE_HEADER_BIT_NM            0x01
238 #define BLF_FLEXRAYMESSAGE_HEADER_BIT_SYNC          0x02
239 #define BLF_FLEXRAYMESSAGE_HEADER_BIT_RES           0x04
240 
241 #define BLF_DLT_FLEXRAY_STFI                        0x08
242 #define BLF_DLT_FLEXRAY_SFI                         0x10
243 #define BLF_DLT_FLEXRAY_NFI                         0x20
244 #define BLF_DLT_FLEXRAY_PPI                         0x40
245 
246 typedef struct blf_flexraymessage {
247     guint16 channel;
248     guint8  dir;            /* Flags: 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/
249     guint8  lowTime;
250     guint32 fpgaTick;
251     guint32 fpgaTickOverflow;
252     guint32 clientIndexFlexRayV6Message;
253     guint32 clusterTime;
254     guint16 frameId;
255     guint16 headerCrc;
256     guint16 frameState;
257     guint8  length;
258     guint8  cycle;
259     guint8  headerBitMask;
260     guint8  reservedFlexRayV6Message1;
261     guint16 reservedFlexRayV6Message2;
262 } blf_flexraymessage_t;
263 
264 
265 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayVFrReceiveMsg.h */
266 
267 #define BLF_FLEXRAYRCVMSG_DIR_RX                  0x01
268 #define BLF_FLEXRAYRCVMSG_DIR_TX                  0x02
269 #define BLF_FLEXRAYRCVMSG_DIR_TX_REQ              0x04
270 
271 #define BLF_FLEXRAYRCVMSG_CHANNELMASK_RES         0x00
272 #define BLF_FLEXRAYRCVMSG_CHANNELMASK_A           0x01
273 #define BLF_FLEXRAYRCVMSG_CHANNELMASK_B           0x02
274 #define BLF_FLEXRAYRCVMSG_CHANNELMASK_AB          0x03
275 
276 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_NULL_FRAME    0x00000001
277 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_VALID_DATA    0x00000002
278 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_SYNC          0x00000004
279 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_STARTUP       0x00000008
280 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_PAYLOAD_PREAM 0x00000010
281 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_RES_20        0x00000020
282 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_ERROR         0x00000040
283 #define BLF_FLEXRAYRCVMSG_DATA_FLAG_RES_80        0x00000080
284 
285 typedef struct blf_flexrayrcvmessage {
286     guint16 channel;
287     guint16 version;
288     guint16 channelMask;    /* 0 res, 1 A, 2 B, 3 A+B */
289     guint16  dir;           /* 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/ /* high byte reserved! */
290     guint32 clientIndex;
291     guint32 clusterNo;
292     guint16 frameId;
293     guint16 headerCrc1;
294     guint16 headerCrc2;
295     guint16 payloadLength;
296     guint16 payloadLengthValid;
297     guint16 cycle;          /* high byte reserved! */
298     guint32 tag;
299     guint32 data;
300     guint32 frameFlags;
301     guint32 appParameter;
302     /* if ext, skip 40 bytes */
303     /* payload bytes */
304     /* guint16 res3 */
305     /* guint32 res4 */
306 } blf_flexrayrcvmessage_t;
307 
308 
309 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/FlexRayVFrReceiveMsgEx.h */
310 
311 /* defines see above BLF_FLEXRAYRCVMSG_* */
312 
313 typedef struct blf_flexrayrcvmessageex {
314     guint16 channel;
315     guint16 version;
316     guint16 channelMask;    /* 0 res, 1 A, 2 B, 3 A+B */
317     guint16 dir;            /* 0 RX, 1 TX, 2 TX Req, 3 internal, 4 internal*/
318     guint32 clientIndex;
319     guint32 clusterNo;
320     guint16 frameId;
321     guint16 headerCrc1;
322     guint16 headerCrc2;
323     guint16 payloadLength;
324     guint16 payloadLengthValid;
325     guint16 cycle;
326     guint32 tag;
327     guint32 data;
328     guint32 frameFlags;
329     guint32 appParameter;
330     guint32 frameCRC;
331     guint32 frameLengthInNs;
332     guint16 frameId1;
333     guint16 pduOffset;
334     guint16 blfLogMask;
335     guint16 res1;
336     guint32 res2;
337     guint32 res3;
338     guint32 res4;
339     guint32 res5;
340     guint32 res6;
341     guint32 res7;
342     /* payload bytes */
343 } blf_flexrayrcvmessageex_t;
344 
345 
346 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/LinMessage.h */
347 
348 typedef struct blf_linmessage {
349     guint16 channel;
350     guint8  id;
351     guint8  dlc;
352 } blf_linmessage_t;
353 
354 typedef struct blf_linmessage_trailer {
355     guint8  fsmId;
356     guint8  fsmState;
357     guint8  headerTime;
358     guint8  fullTime;
359     guint16 crc;
360     guint8  dir;            /* 0 RX, 1 TX Receipt, 2 TX Req */
361     guint8  res1;
362     guint32 res2;
363 } blf_linmessage_trailer_t;
364 
365 /* see https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/ObjectHeaderBase.h */
366 
367 #define BLF_OBJTYPE_UNKNOWN                       0
368 #define BLF_OBJTYPE_CAN_MESSAGE                   1
369 #define BLF_OBJTYPE_CAN_ERROR                     2
370 #define BLF_OBJTYPE_CAN_OVERLOAD                  3
371 #define BLF_OBJTYPE_CAN_STATISTIC                 4
372 #define BLF_OBJTYPE_APP_TRIGGER                   5
373 #define BLF_OBJTYPE_ENV_INTEGER                   6
374 #define BLF_OBJTYPE_ENV_DOUBLE                    7
375 #define BLF_OBJTYPE_ENV_STRING                    8
376 #define BLF_OBJTYPE_ENV_DATA                      9
377 #define BLF_OBJTYPE_LOG_CONTAINER                10
378 #define BLF_OBJTYPE_LIN_MESSAGE                  11
379 #define BLF_OBJTYPE_LIN_CRC_ERROR                12
380 #define BLF_OBJTYPE_LIN_DLC_INFO                 13
381 #define BLF_OBJTYPE_LIN_RCV_ERROR                14
382 #define BLF_OBJTYPE_LIN_SND_ERROR                15
383 #define BLF_OBJTYPE_LIN_SLV_TIMEOUT              16
384 #define BLF_OBJTYPE_LIN_SCHED_MODCH              17
385 #define BLF_OBJTYPE_LIN_SYN_ERROR                18
386 #define BLF_OBJTYPE_LIN_BAUDRATE                 19
387 #define BLF_OBJTYPE_LIN_SLEEP                    20
388 #define BLF_OBJTYPE_LIN_WAKEUP                   21
389 #define BLF_OBJTYPE_MOST_SPY                     22
390 #define BLF_OBJTYPE_MOST_CTRL                    23
391 #define BLF_OBJTYPE_MOST_LIGHTLOCK               24
392 #define BLF_OBJTYPE_MOST_STATISTIC               25
393 #define BLF_OBJTYPE_FLEXRAY_DATA                 29
394 #define BLF_OBJTYPE_FLEXRAY_SYNC                 30
395 #define BLF_OBJTYPE_CAN_DRIVER_ERROR             31
396 #define BLF_OBJTYPE_MOST_PKT                     32
397 #define BLF_OBJTYPE_MOST_PKT2                    33
398 #define BLF_OBJTYPE_MOST_HWMODE                  34
399 #define BLF_OBJTYPE_MOST_REG                     35
400 #define BLF_OBJTYPE_MOST_GENREG                  36
401 #define BLF_OBJTYPE_MOST_NETSTATE                37
402 #define BLF_OBJTYPE_MOST_DATALOST                38
403 #define BLF_OBJTYPE_MOST_TRIGGER                 39
404 #define BLF_OBJTYPE_FLEXRAY_CYCLE                40
405 #define BLF_OBJTYPE_FLEXRAY_MESSAGE              41
406 #define BLF_OBJTYPE_LIN_CHECKSUM_INFO            42
407 #define BLF_OBJTYPE_LIN_SPIKE_EVENT              43
408 #define BLF_OBJTYPE_CAN_DRIVER_SYNC              44
409 #define BLF_OBJTYPE_FLEXRAY_STATUS               45
410 #define BLF_OBJTYPE_GPS_EVENT                    46
411 #define BLF_OBJTYPE_FLEXRAY_ERROR                47
412 #define BLF_OBJTYPE_FLEXRAY_STATUS2              48
413 #define BLF_OBJTYPE_FLEXRAY_STARTCYCLE           49
414 #define BLF_OBJTYPE_FLEXRAY_RCVMESSAGE           50
415 #define BLF_OBJTYPE_REALTIMECLOCK                51
416 #define BLF_OBJTYPE_LIN_STATISTIC                54
417 #define BLF_OBJTYPE_J1708_MESSAGE                55
418 #define BLF_OBJTYPE_J1708_VIRTUAL_MSG            56
419 #define BLF_OBJTYPE_LIN_MESSAGE2                 57
420 #define BLF_OBJTYPE_LIN_SND_ERROR2               58
421 #define BLF_OBJTYPE_LIN_SYN_ERROR2               59
422 #define BLF_OBJTYPE_LIN_CRC_ERROR2               60
423 #define BLF_OBJTYPE_LIN_RCV_ERROR2               61
424 #define BLF_OBJTYPE_LIN_WAKEUP2                  62
425 #define BLF_OBJTYPE_LIN_SPIKE_EVENT2             63
426 #define BLF_OBJTYPE_LIN_LONG_DOM_SIG             64
427 #define BLF_OBJTYPE_APP_TEXT                     65
428 #define BLF_OBJTYPE_FLEXRAY_RCVMESSAGE_EX        66
429 #define BLF_OBJTYPE_MOST_STATISTICEX             67
430 #define BLF_OBJTYPE_MOST_TXLIGHT                 68
431 #define BLF_OBJTYPE_MOST_ALLOCTAB                69
432 #define BLF_OBJTYPE_MOST_STRESS                  70
433 #define BLF_OBJTYPE_ETHERNET_FRAME               71
434 #define BLF_OBJTYPE_SYS_VARIABLE                 72
435 #define BLF_OBJTYPE_CAN_ERROR_EXT                73
436 #define BLF_OBJTYPE_CAN_DRIVER_ERROR_EXT         74
437 #define BLF_OBJTYPE_LIN_LONG_DOM_SIG2            75
438 #define BLF_OBJTYPE_MOST_150_MESSAGE             76
439 #define BLF_OBJTYPE_MOST_150_PKT                 77
440 #define BLF_OBJTYPE_MOST_ETHERNET_PKT            78
441 #define BLF_OBJTYPE_MOST_150_MESSAGE_FRAGMENT    79
442 #define BLF_OBJTYPE_MOST_150_PKT_FRAGMENT        80
443 #define BLF_OBJTYPE_MOST_ETHERNET_PKT_FRAGMENT   81
444 #define BLF_OBJTYPE_MOST_SYSTEM_EVENT            82
445 #define BLF_OBJTYPE_MOST_150_ALLOCTAB            83
446 #define BLF_OBJTYPE_MOST_50_MESSAGE              84
447 #define BLF_OBJTYPE_MOST_50_PKT                  85
448 #define BLF_OBJTYPE_CAN_MESSAGE2                 86
449 #define BLF_OBJTYPE_LIN_UNEXPECTED_WAKEUP        87
450 #define BLF_OBJTYPE_LIN_SHORT_OR_SLOW_RESPONSE   88
451 #define BLF_OBJTYPE_LIN_DISTURBANCE_EVENT        89
452 #define BLF_OBJTYPE_SERIAL_EVENT                 90
453 #define BLF_OBJTYPE_OVERRUN_ERROR                91
454 #define BLF_OBJTYPE_EVENT_COMMENT                92
455 #define BLF_OBJTYPE_WLAN_FRAME                   93
456 #define BLF_OBJTYPE_WLAN_STATISTIC               94
457 #define BLF_OBJTYPE_MOST_ECL                     95
458 #define BLF_OBJTYPE_GLOBAL_MARKER                96
459 #define BLF_OBJTYPE_AFDX_FRAME                   97
460 #define BLF_OBJTYPE_AFDX_STATISTIC               98
461 #define BLF_OBJTYPE_KLINE_STATUSEVENT            99
462 #define BLF_OBJTYPE_CAN_FD_MESSAGE              100
463 #define BLF_OBJTYPE_CAN_FD_MESSAGE_64           101
464 #define BLF_OBJTYPE_ETHERNET_RX_ERROR           102
465 #define BLF_OBJTYPE_ETHERNET_STATUS             103
466 #define BLF_OBJTYPE_CAN_FD_ERROR_64             104
467 #define BLF_OBJTYPE_AFDX_STATUS                 106
468 #define BLF_OBJTYPE_AFDX_BUS_STATISTIC          107
469 #define BLF_OBJTYPE_AFDX_ERROR_EVENT            109
470 #define BLF_OBJTYPE_A429_ERROR                  110
471 #define BLF_OBJTYPE_A429_STATUS                 111
472 #define BLF_OBJTYPE_A429_BUS_STATISTIC          112
473 #define BLF_OBJTYPE_A429_MESSAGE                113
474 #define BLF_OBJTYPE_ETHERNET_STATISTIC          114
475 #define BLF_OBJTYPE_TEST_STRUCTURE              118
476 #define BLF_OBJTYPE_DIAG_REQUEST_INTERPRETATION 119
477 #define BLF_OBJTYPE_ETHERNET_FRAME_EX           120
478 #define BLF_OBJTYPE_ETHERNET_FRAME_FORWARDED    121
479 #define BLF_OBJTYPE_ETHERNET_ERROR_EX           122
480 #define BLF_OBJTYPE_ETHERNET_ERROR_FORWARDED    123
481 #define BLF_OBJTYPE_FUNCTION_BUS                124
482 #define BLF_OBJTYPE_DATA_LOST_BEGIN             125
483 #define BLF_OBJTYPE_DATA_LOST_END               126
484 #define BLF_OBJTYPE_WATER_MARK_EVENT            127
485 #define BLF_OBJTYPE_TRIGGER_CONDITION           128
486 #define BLF_OBJTYPE_CAN_SETTING_CHANGED         129
487 #define BLF_OBJTYPE_DISTRIBUTED_OBJECT_MEMBER   130
488 #define BLF_OBJTYPE_ATTRIBUTE_EVENT             131
489 
490 #endif
491 
492 /*
493  * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
494  *
495  * Local variables:
496  * c-basic-offset: 4
497  * tab-width: 8
498  * indent-tabs-mode: nil
499  * End:
500  *
501  * vi: set shiftwidth=4 tabstop=8 expandtab:
502  * :indentSize=4:tabSize=8:noTabs=true:
503  */
504