Skip to content

Commit b6841f6

Browse files
committed
Fix #496 - Add RFC8158 NAT event flags
1 parent dec1d92 commit b6841f6

File tree

7 files changed

+73
-28
lines changed

7 files changed

+73
-28
lines changed

Diff for: src/lib/grammar.y

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2016-2022, Peter Haag
2+
* Copyright (c) 2016-2023, Peter Haag
33
* Copyright (c) 2004-2008, SWITCH - Teleinformatikdienste fuer Lehre und Forschung
44
* All rights reserved.
55
*
@@ -1329,7 +1329,7 @@ term: ANY { /* this is an unconditionally true expression, as a filter applies i
13291329
}
13301330

13311331

1332-
| PAYLOAD REGEX STRING {
1332+
| PAYLOAD REGEX STRING {
13331333
if (strlen($3)>64) {
13341334
yyerror("word too long");
13351335
YYABORT;
@@ -1344,7 +1344,7 @@ term: ANY { /* this is an unconditionally true expression, as a filter applies i
13441344
$$.self = NewBlock(OffsetPayload, 0, 0, CMP_REGEX, FUNC_NONE, (char *)program);
13451345
}
13461346

1347-
| PAYLOAD REGEX STRING STRING{
1347+
| PAYLOAD REGEX STRING STRING{
13481348
if (strlen($3)>64) {
13491349
yyerror("word too long");
13501350
YYABORT;

Diff for: src/lib/nfxV3.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ typedef struct EXflowMisc_s {
235235
#define SIZEflowEndReason MemberSize(EXflowMisc_t, flowEndReason)
236236
// align bytes
237237
uint8_t revTcpFlags;
238-
uint8_t fill;
238+
uint8_t fragmentFlags; // XXX not yet implemented
239239
} EXflowMisc_t;
240240
#define EXflowMiscSize (sizeof(EXflowMisc_t) + sizeof(elementHeader_t))
241241

Diff for: src/lib/output_util.c

+56-14
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2022, Peter Haag
2+
* Copyright (c) 2019-2023, Peter Haag
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -182,6 +182,57 @@ static char *protoList[NumProtos] = {
182182
"MPLS" // 137 MPLS-in-IP
183183
};
184184

185+
// RFC 8158, section 4.3, "Definition of NAT events"
186+
/*
187+
+-------+------------------------------------+
188+
| Value | Event Name |
189+
+-------+------------------------------------+
190+
| 0 | Reserved |
191+
| 1 | NAT translation create (Historic) |
192+
| 2 | NAT translation delete (Historic) |
193+
| 3 | NAT Addresses exhausted |
194+
| 4 | NAT44 session create |
195+
| 5 | NAT44 session delete |
196+
| 6 | NAT64 session create |
197+
| 7 | NAT64 session delete |
198+
| 8 | NAT44 BIB create |
199+
| 9 | NAT44 BIB delete |
200+
| 10 | NAT64 BIB create |
201+
| 11 | NAT64 BIB delete |
202+
| 12 | NAT ports exhausted |
203+
| 13 | Quota Exceeded |
204+
| 14 | Address binding create |
205+
| 15 | Address binding delete |
206+
| 16 | Port block allocation |
207+
| 17 | Port block de-allocation |
208+
| 18 | Threshold Reached |
209+
+-------+------------------------------------+
210+
*/
211+
212+
#define MAX_EVENTS 19
213+
static struct event_flags_s {
214+
char *sname;
215+
char *lname;
216+
} event_flags[MAX_EVENTS] = {{"INVALID", "INVALID"},
217+
{"ADD", "NAT translation create"},
218+
{"DELETE", "NAT translation delete"},
219+
{"EXHAUST", "NAT Addresses exhausted"},
220+
{"ADD44", "NAT44 session create"},
221+
{"DEL44", "NAT44 session delete"},
222+
{"ADD64", "NAT64 session create"},
223+
{"DEL64", "NAT64 session delete"},
224+
{"ADD44BIB", "NAT44 BIB create"},
225+
{"DEL44BIB", "NAT44 BIB delete"},
226+
{"ADD64BIB", "NAT64 BIB create"},
227+
{"DEL64BIB", "NAT64 BIB delete"},
228+
{"PEXHAUST", "NAT ports exhausted"},
229+
{"QUOTAEXH", "Quota Exceeded"},
230+
{"ADDADDR", "Address binding create"},
231+
{"DELADDR", "Address binding delete"},
232+
{"ADDPBLK", "Port block allocation"},
233+
{"DELPBLK", "Port block de-allocation"},
234+
{"THRESHLD", "Threshold Reached"}};
235+
185236
char *ProtoString(uint8_t protoNum, uint32_t plainNumbers) {
186237
static char s[16];
187238

@@ -351,20 +402,11 @@ char *FwEventString(int event) {
351402

352403
} // End of FwEventString
353404

354-
char *EventString(int event) {
355-
switch (event) {
356-
case 0:
357-
return "INVALID";
358-
break;
359-
case 1:
360-
return "ADD";
361-
break;
362-
case 2:
363-
return "DELETE";
364-
break;
365-
default:
366-
return "UNKNOWN";
405+
char *EventString(int event, int longName) {
406+
if (event >= MAX_EVENTS) {
407+
event = 0;
367408
}
409+
return longName ? event_flags[event].lname : event_flags[event].sname;
368410

369411
} // End of EventString
370412

Diff for: src/lib/output_util.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2019-2022, Peter Haag
2+
* Copyright (c) 2019-2023, Peter Haag
33
* All rights reserved.
44
*
55
* Redistribution and use in source and binary forms, with or without
@@ -47,7 +47,9 @@ void CondenseV6(char *s);
4747

4848
char *FwEventString(int event);
4949

50-
char *EventString(int event);
50+
#define SHORTNAME 0
51+
#define LONGNAME 1
52+
char *EventString(int event, int longName);
5153

5254
char *EventXString(int xevent);
5355

Diff for: src/output/output_fmt.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ static struct format_token_list_s {
450450
// NSEL specifics
451451
{"%nfc", 0, " Conn-ID", String_nfc}, // NSEL connection ID
452452
{"%tevt", 0, "Event time ", String_EventTime}, // NSEL Flow start time
453-
{"%evt", 0, " Event", String_evt}, // NSEL event
453+
{"%evt", 0, " Event", String_evt}, // NSEL event
454454
{"%xevt", 0, " XEvent", String_xevt}, // NSEL xevent
455455
{"%sgt", 0, " SGT ", String_sgt}, // NSEL xevent
456456
{"%msec", 0, " Event Time", String_msecEvent}, // NSEL event time in msec
@@ -466,7 +466,7 @@ static struct format_token_list_s {
466466

467467
// NEL
468468
// for v.1.6.10 compatibility, keep NEL specific addr/port format tokens
469-
{"%nevt", 0, " Event", String_evt}, // NAT event
469+
{"%nevt", 0, " Event", String_evt}, // NAT event
470470
{"%nsa", 0, " X-late Src IP", String_xlateSrcAddr}, // NAT XLATE src IP
471471
{"%nda", 0, " X-late Dst IP", String_xlateDstAddr}, // NAT XLATE dst IP
472472
{"%nsp", 0, "XsPort", String_xlateSrcPort}, // NAT XLATE src port
@@ -1700,9 +1700,9 @@ static void String_nfc(FILE *stream, master_record_t *r) { fprintf(stream, "%10u
17001700

17011701
static void String_evt(FILE *stream, master_record_t *r) {
17021702
if (r->fwXevent) {
1703-
fprintf(stream, "%7s", FwEventString(r->event));
1703+
fprintf(stream, "%8s", FwEventString(r->event));
17041704
} else {
1705-
fprintf(stream, "%7s", EventString(r->event));
1705+
fprintf(stream, "%8s", EventString(r->event, SHORTNAME));
17061706
}
17071707

17081708
} // End of String_evt

Diff for: src/output/output_json.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ static void stringEXnselCommon(FILE *stream, master_record_t *r) {
451451
" \"event\" : \"%s\",\n"
452452
" \"xevent_id\" : \"%u\",\n"
453453
" \"t_event\" : \"%s.%llu\",\n",
454-
r->connID, r->event, r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event), r->fwXevent, datestr,
454+
r->connID, r->event, r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event, LONGNAME), r->fwXevent, datestr,
455455
r->msecEvent % 1000LL);
456456

457457
} // End of stringEXnselCommon

Diff for: src/output/output_raw.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,8 @@ static void stringsEXnselCommon(FILE *stream, master_record_t *r) {
481481
" fw event = %5u: %s\n"
482482
" fw ext event = %5u: %s\n"
483483
" Event time = %13llu [%s.%03llu]\n",
484-
r->connID, r->event, r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event), r->fwXevent, EventXString(r->fwXevent),
485-
(long long unsigned)r->msecEvent, datestr, (long long unsigned)(r->msecEvent % 1000L));
484+
r->connID, r->event, r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event, LONGNAME), r->fwXevent,
485+
EventXString(r->fwXevent), (long long unsigned)r->msecEvent, datestr, (long long unsigned)(r->msecEvent % 1000L));
486486

487487
} // End of stringsEXnselCommon
488488

@@ -542,7 +542,8 @@ static void stringsEXnselUserID(FILE *stream, master_record_t *r) {
542542
} // End of stringsEXnselUserID
543543

544544
static void stringsEXnelCommon(FILE *stream, master_record_t *r) {
545-
fprintf(stream, " nat event = %5u: %s\n", r->event, r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event));
545+
fprintf(stream, " nat event = %5u: %s\n", r->event,
546+
r->event_flag == FW_EVENT ? FwEventString(r->event) : EventString(r->event, LONGNAME));
546547

547548
} // End of stringsEXnelCommon
548549

0 commit comments

Comments
 (0)