-
Notifications
You must be signed in to change notification settings - Fork 6
/
geneva.bnf
68 lines (50 loc) · 1.25 KB
/
geneva.bnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
; Quick BNF(-ish?) grammar to help me get my head around the syntax
_alpha : 'a'-'z' | 'A'-'Z' ;
_alnum : _alpha | '0'..'9' ;
_number : [ '-' ] '1'..'9' { '0'..'9' } ;
field : _alnum | { _alnum | '-' } ;
value : _alnum ;
offset : _number ;
!whitespace : ' ' | '\t' | '\r' | '\n' ;
Strategy : Forest "\\/" Forest ;
Forest : Forest ActionTree
| empty
;
ActionTree : Trigger "-" Action "-|" ;
Trigger : "[" Proto ":" field ":" value "]" ;
Proto : "IP"
| "ip"
| "TCP"
| "tcp"
;
Action : Duplicate
| Fragment
| Tamper
| Drop
| Send
| empty
;
;;;;;;;;; duplicate rule
Duplicate : "duplicate(" Action "," Action ")" ;
;;;;;;;;; fragment rule
Fragment : "fragment" FragmentRule
| "fragment" FragmentRule "(" Action "," Action ")"
;
FragmentRule : "{" Proto ":" offset ":" InOrder "}"
InOrder : "True"
| "False"
;
;;;;;;;;; tamper rule
Tamper : "tamper" TamperRule
| "tamper" TamperRule "(" Action "," Action ")"
;
TamperRule : "{" Proto ":" field ":" TamperMode "}" ;
TamperMode : Replace
| Corrupt
;
Replace : "replace:" value ;
Corrupt : "corrupt" ;
;;;;;;;;; drop rule
Drop : "drop" ;
;;;;;;;;; send rule
Send : "send" ;