| 1 | Basic syntax |
| 2 | file ::= empty | file stmt [`;'] |
| 3 | stmt ::= option-stmt | fw-stmt |
| 4 | fw-stmt ::= `fw' source options [`to'|`->'] target options |
| 5 | options ::= `{' option-seq `}' |
| 6 | option-seq ::= empty | option-stmt [`;'] option-seq |
| 7 | |
| 8 | Option syntax |
| 9 | option-stmt ::= q-option |
| 10 | q-option ::= option |
| 11 | | prefix `.' q-option |
| 12 | | prefix `{' option-seq `}' |
| 13 | prefix ::= word |
| 14 | |
| 15 | File source and target |
| 16 | source ::= file |
| 17 | target ::= file |
| 18 | file ::= `file' [`.'] fspec [`,' fspec] |
| 19 | fspec ::= fd-spec | name-spec | null-spec |
| 20 | fd-spec ::= [[`:']`fd'[`:']] number|`stdin'|`stdout' |
| 21 | name-spec ::= [[`:']`file'[`:']] file-name |
| 22 | file-name ::= path-seq | [ path-seq ] |
| 23 | path-seq ::= path-elt | path-seq path-elt |
| 24 | path-elt ::= `/' | word |
| 25 | null-spec ::= [`:']`null'[`:'] |
| 26 | |
| 27 | Exec source and target |
| 28 | source ::= exec |
| 29 | target ::= exec |
| 30 | exec ::= `exec' [`.'] cmd-spec |
| 31 | cmd-spec ::= shell-cmd | [prog-name] `[' argv0 arg-seq `]' |
| 32 | arg-seq ::= word | arg-seq word |
| 33 | shell-cmd ::= word |
| 34 | argv0 ::= word |
| 35 | |
| 36 | Socket source and target |
| 37 | source ::= socket-source |
| 38 | target ::= socket-target |
| 39 | socket-source ::= [`socket'[`.']] [[`:']addr-type[`:']] source-addr |
| 40 | socket-target ::= [`socket'[`.']] [[`:']addr-type[`:']] target-addr |
| 41 | |
| 42 | inet-source-addr ::= [port] port |
| 43 | inet-target-addr ::= address [`:'] port |
| 44 | address ::= addr-elt | address addr-elt |
| 45 | addr-elt ::= `.' | word |
| 46 | |
| 47 | unix-source-addr ::= file-name |
| 48 | unix-target-addr ::= file-name |
| 49 | |
| 50 | File attributes (`fattr') |
| 51 | prefix.fattr.mode [=] mode |
| 52 | prefix.fattr.owner [=] user |
| 53 | prefix.fattr.group [=] group |
| 54 | |
| 55 | File options |
| 56 | file.create [=] yes|no |
| 57 | file.open [=] no|truncate|append |
| 58 | file.fattr.* |
| 59 | |
| 60 | Exec options |
| 61 | exec.logging [=] yes|no |
| 62 | exec.dir [=] file-name |
| 63 | exec.root [=] file-name |
| 64 | exec.user [=] user |
| 65 | exec.group [=] group |
| 66 | exec.rlimit.limit[.hard|.soft] [=] value |
| 67 | exec.env.clear |
| 68 | exec.env.unset var |
| 69 | exec.env.[set] var [=] value |
| 70 | |
| 71 | Socket options |
| 72 | socket.conn [=] number|unlimited|one-shot |
| 73 | socket.logging [=] yes|no |
| 74 | socket.inet.[allow|deny] [from] address [/ address] |
| 75 | socket.unix.fattr.* |