http://src.iws.cs.ovgu.de/source/xref/illumos-gate/usr/src/cmd/ipf/tools/ipnat_y.y N .. decnumber H .. hexnumber (recognized by a leading '0x') S .. string EOL .. End Of Line or ';' IPv6 .. IP v6 address LSB .. a semicolon separated list of expressions always enclosed in _curly_ braces. SN .. a known service name or port number (see /etc/inet/services etc.) PN .. a known protocol name or number incl. 'tcp' and 'udp' (see /etc/inet/protocols etc.) file: [ S '=' S ';' ]* [{ map | mapblock | redir } EOL]* map: { 'map' | 'bimap' } S [',' S] // S == interface name { addr |'from' addr [ 'port' {'='|'!='|'<'|'<='|'>'|'>='} SN |'port' SN {'><'|'<>'} SN ] [!]'to' addr [ 'port' {'='|'!='|'<'|'<='|'>'|'>='} SN |'port' SN {'><'|'<>'} SN ] } '->' { addr | 'range' hostname '-' hostname } [ 'proxy' 'port' SN S '/' PN |'portmap' {'tcp' |'udp' |'tcp/udp'} { SN':'SN |'auto' } ['sequential'] |'icmpidmap' S N':'N ] [mapoptions] mapblock: 'map-block' S [',' S] // S == interface name addr '->' addr [N|'auto'] // N == port number [mapoptions] redir: 'rdr' S [',' S] // S == interface name { addr ['port' SN [{'-'|':'} SN] |'from' addr [ 'port' {'='|'!='|'<'|'<='|'>'|'>='} SN |'port' SN {'><'|'<>'} SN ] [!]'to' addr [ 'port' {'='|'!='|'<'|'<='|'>'|'>='} SN |'port' SN {'><'|'<>'} SN ] '->' hostname ['/' N |',' hostname] 'port' ['='] SN [PN|'tcp/udp'] [rdroptions] } | { addr '->' hostname ['/' N |',' hostname] [PN|'tcp/udp'] [rdroptions] } addr: 'any' | hostname ['/' { N['.'N'.'N'.'N] |H |IPv6 } ] hostname: S | N['.'N'.'N'.'N] | [N] IPv6 mapoptions: ['round-robin'] ['frag'] ['age' N ['/' N]] ['mssclamp' N] ['tag' S] [S|N|'tcp'|'udp'|'tcp/udp'] rdroptions: ['round-robin'] ['frag'] ['age' N ['/' N]] ['sticky'] ['mssclamp' N] ['proxy' S | 'proxy' 'port' SN S '/' {N |S |'tcp' |'udp'} ] ['tag' S]