| 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 | |
| 75 | socket.inet.source.[allow|deny] priv-port |
| 76 | socket.inet.source.[allow|deny] [host] ADDR [/ ADDR] |
| 77 | socket.inet.source.addr [=] any|ADDR |
| 78 | socket.inet.dest.addr [=] any|ADDR |
| 79 | |
| 80 | socket.unix.source.fattr.* |