1
1
/*
2
- * Copyright (c) 2023 , Peter Haag
2
+ * Copyright (c) 2024 , Peter Haag
3
3
* All rights reserved.
4
4
*
5
5
* Redistribution and use in source and binary forms, with or without
@@ -66,11 +66,18 @@ typedef struct recordHeaderV3_s {
66
66
#define V3_FLAG_EVENT 1
67
67
#define V3_FLAG_SAMPLED 2
68
68
#define V3_FLAG_ANON 4
69
+ #define V3_FLAG_PASSED 128
69
70
70
71
uint8_t nfversion ;
71
72
} recordHeaderV3_t ;
72
73
#define OFFtype offsetof(recordHeaderV3_t, type)
73
74
#define SIZEtype MemberSize(recordHeaderV3_t, type)
75
+ #define OFFengineType offsetof(recordHeaderV3_t, engineType)
76
+ #define SIZEengineType MemberSize(recordHeaderV3_t, engineType)
77
+ #define OFFengineID offsetof(recordHeaderV3_t, engineID)
78
+ #define SIZEengineID MemberSize(recordHeaderV3_t, engineID)
79
+ #define OFFexporterID offsetof(recordHeaderV3_t, exporterID)
80
+ #define SIZEexporterID MemberSize(recordHeaderV3_t, exporterID)
74
81
75
82
#define V3HeaderRecordSize sizeof(recordHeaderV3_t)
76
83
#define AddV3Header (p , h ) \
@@ -151,8 +158,13 @@ typedef struct EXgenericFlow_s {
151
158
union {
152
159
uint16_t dstPort ;
153
160
struct {
161
+ #ifdef WORDS_BIGENDIAN
154
162
uint8_t icmpType ;
155
163
uint8_t icmpCode ;
164
+ #else
165
+ uint8_t icmpCode ;
166
+ uint8_t icmpType ;
167
+ #endif
156
168
};
157
169
};
158
170
#endif
@@ -227,9 +239,10 @@ typedef struct EXflowMisc_s {
227
239
uint8_t flowEndReason ;
228
240
#define OFFflowEndReason offsetof(EXflowMisc_t, flowEndReason)
229
241
#define SIZEflowEndReason MemberSize(EXflowMisc_t, flowEndReason)
230
- // align bytes
231
242
uint8_t revTcpFlags ;
232
- uint8_t fill ;
243
+ uint8_t fragmentFlags ;
244
+ #define OFFfragmentFlags offsetof(EXflowMisc_t, fragmentFlags)
245
+ #define SIZEfragmentFlags MemberSize(EXflowMisc_t, fragmentFlags)
233
246
} EXflowMisc_t ;
234
247
#define EXflowMiscSize (sizeof(EXflowMisc_t) + sizeof(elementHeader_t))
235
248
@@ -288,16 +301,16 @@ typedef struct EXbgpNextHopV6_s {
288
301
typedef struct EXipNextHopV4_s {
289
302
#define EXipNextHopV4ID 10
290
303
uint32_t ip ;
291
- #define OFFNext4HopIP offsetof(EXipNextHopV4_t, ip)
292
- #define SIZENext4HopIP MemberSize(EXipNextHopV4_t, ip)
304
+ #define OFFNextHopV4IP offsetof(EXipNextHopV4_t, ip)
305
+ #define SIZENextHopV4IP MemberSize(EXipNextHopV4_t, ip)
293
306
} EXipNextHopV4_t ;
294
307
#define EXipNextHopV4Size (sizeof(EXipNextHopV4_t) + sizeof(elementHeader_t))
295
308
296
309
typedef struct EXipNextHopV6_s {
297
310
#define EXipNextHopV6ID 11
298
311
uint64_t ip [2 ];
299
- #define OFFNext6HopIP offsetof(EXipNextHopV6_t, ip)
300
- #define SIZENext6HopIP MemberSize(EXipNextHopV6_t, ip)
312
+ #define OFFNextHopV6IP offsetof(EXipNextHopV6_t, ip)
313
+ #define SIZENextHopV6IP MemberSize(EXipNextHopV6_t, ip)
301
314
} EXipNextHopV6_t ;
302
315
#define EXipNextHopV6Size (sizeof(EXipNextHopV6_t) + sizeof(elementHeader_t))
303
316
@@ -527,10 +540,11 @@ typedef struct EXnbarApp_s {
527
540
#define EXlabelID 28
528
541
#define EXlabelSize sizeof(elementHeader_t)
529
542
530
- #define EXinPayload_t elementHeader_t
543
+ #define EXinPayload_t void
531
544
#define EXinPayloadID 29
532
545
#define EXinPayloadSize sizeof(elementHeader_t)
533
546
547
+ #define EXoutPayload_t void
534
548
#define EXoutPayloadID 30
535
549
#define EXoutPayloadSize sizeof(elementHeader_t)
536
550
@@ -543,8 +557,8 @@ typedef struct EXtunIPv4_s {
543
557
#define SIZEtunSrc4Addr MemberSize(EXtunIPv4_t, tunSrcAddr)
544
558
#define OFFtunDst4Addr offsetof(EXtunIPv4_t, tunDstAddr)
545
559
#define SIZEtunDst4Addr MemberSize(EXtunIPv4_t, tunDstAddr)
546
- #define OFFtunProto offsetof(EXtunIPv4_t, tunProto)
547
- #define SIZEtunProto MemberSize(EXtunIPv4_t, tunProto)
560
+ #define OFFtunProtoV4 offsetof(EXtunIPv4_t, tunProto)
561
+ #define SIZEtunProtoV4 MemberSize(EXtunIPv4_t, tunProto)
548
562
} EXtunIPv4_t ;
549
563
#define EXtunIPv4Size (sizeof(EXtunIPv4_t) + sizeof(elementHeader_t))
550
564
@@ -557,6 +571,8 @@ typedef struct EXtunIPv6_s {
557
571
#define SIZEtunSrc6Addr MemberSize(EXtunIPv6_t, tunSrcAddr)
558
572
#define OFFtunDst6Addr offsetof(EXtunIPv6_t, tunDstAddr)
559
573
#define SIZEtunDst6Addr MemberSize(EXtunIPv6_t, tunDstAddr)
574
+ #define OFFtunProtoV6 offsetof(EXtunIPv6_t, tunProto)
575
+ #define SIZEtunProtoV6 MemberSize(EXtunIPv6_t, tunProto)
560
576
} EXtunIPv6_t ;
561
577
#define EXtunIPv6Size (sizeof(EXtunIPv6_t) + sizeof(elementHeader_t))
562
578
@@ -613,10 +629,51 @@ typedef struct EXpfinfo_s {
613
629
uint32_t pid ;
614
630
char ifname [4 ];
615
631
} EXpfinfo_t ;
632
+ #define OFFpfAction offsetof(EXpfinfo_t, action)
633
+ #define SIZEpfAction MemberSize(EXpfinfo_t, action)
634
+ #define OFFpfReason offsetof(EXpfinfo_t, reason)
635
+ #define SIZEpfReason MemberSize(EXpfinfo_t, reason)
636
+ #define OFFpfDir offsetof(EXpfinfo_t, dir)
637
+ #define SIZEpfDir MemberSize(EXpfinfo_t, dir)
638
+ #define OFFpfIfName offsetof(EXpfinfo_t, ifname)
639
+ #define SIZEpfIfName MemberSize(EXpfinfo_t, ifname)
640
+ #define OFFpfRuleNr offsetof(EXpfinfo_t, rulenr)
641
+ #define SIZEpfRuleNr MemberSize(EXpfinfo_t, rulenr)
616
642
#define EXpfinfoSize (sizeof(EXpfinfo_t) - 4 + sizeof(elementHeader_t))
617
643
644
+ typedef struct EXlayer2_s {
645
+ #define EXlayer2ID 38
646
+ uint16_t vlanID ;
647
+ uint16_t customerVlanId ;
648
+ uint16_t postVlanID ;
649
+ uint16_t postCustomerVlanId ;
650
+ #define OFFvlanID offsetof(EXlayer2_t, vlanID)
651
+ #define SIZEvlanID MemberSize(EXlayer2_t, vlanID)
652
+ #define OFFpostVlanID offsetof(EXlayer2_t, postVlanID)
653
+ #define SIZEpostVlanID MemberSize(EXlayer2_t, postVlanID)
654
+ #define OFFcustomerVlanId offsetof(EXlayer2_t, customerVlanId)
655
+ #define SIZEcustomerVlanId MemberSize(EXlayer2_t, customerVlanId)
656
+ #define OFFpostCustomerVlanId offsetof(EXlayer2_t, postCustomerVlanId)
657
+ #define SIZEpostCustomerVlanId MemberSize(EXlayer2_t, postCustomerVlanId)
658
+ uint32_t ingress ;
659
+ uint32_t egress ;
660
+ #define OFFphysIngress offsetof(EXlayer2_t, ingress)
661
+ #define SIZEphysIngress MemberSize(EXlayer2_t, ingress)
662
+ #define OFFphysEgress offsetof(EXlayer2_t, egress)
663
+ #define SIZEphysEgress MemberSize(EXlayer2_t, egress)
664
+ uint64_t vxLan ;
665
+ uint16_t etherType ;
666
+ uint8_t ipVersion ;
667
+ #define OFFetherType offsetof(EXlayer2_t, etherType)
668
+ #define SIZEetherType MemberSize(EXlayer2_t, etherType)
669
+ #define OFFipVersion offsetof(EXlayer2_t, ipVersion)
670
+ #define SIZEipVersion MemberSize(EXlayer2_t, ipVersion)
671
+ uint8_t fill ;
672
+ } EXlayer2_t ;
673
+ #define EXlayer2Size (sizeof(EXlayer2_t) + sizeof(elementHeader_t))
674
+
618
675
// max possible elements
619
- #define MAXEXTENSIONS 38
676
+ #define MAXEXTENSIONS 39
620
677
621
678
// push a fixed length extension to the v3 record
622
679
// h v3 record header
@@ -667,6 +724,8 @@ typedef struct EXpfinfo_s {
667
724
h->numElements++; \
668
725
h->size += s;
669
726
727
+ #define ExtensionLength (ext ) (((elementHeader_t *)((void *)ext - sizeof(elementHeader_t)))->length - sizeof(elementHeader_t))
728
+
670
729
#define EXTENSION (s ) \
671
730
{ s##ID, s##Size, #s }
672
731
@@ -682,7 +741,7 @@ static const struct extensionTable_s {
682
741
EXTENSION (EXnselXlateIPv4 ), EXTENSION (EXnselXlateIPv6 ), EXTENSION (EXnselXlatePort ), EXTENSION (EXnselAcl ), EXTENSION (EXnselUser ),
683
742
EXTENSION (EXnelCommon ), EXTENSION (EXnelXlatePort ), EXTENSION (EXnbarApp ), EXTENSION (EXlabel ), EXTENSION (EXinPayload ),
684
743
EXTENSION (EXoutPayload ), EXTENSION (EXtunIPv4 ), EXTENSION (EXtunIPv6 ), EXTENSION (EXobservation ), EXTENSION (EXinmonMeta ),
685
- EXTENSION (EXinmonFrame ), EXTENSION (EXvrf ), EXTENSION (EXpfinfo )};
744
+ EXTENSION (EXinmonFrame ), EXTENSION (EXvrf ), EXTENSION (EXpfinfo ), EXTENSION ( EXlayer2 ) };
686
745
687
746
typedef struct record_map_s {
688
747
recordHeaderV3_t * recordHeader ;
0 commit comments