% pfsense status info, work in progress % % usage: % % context --environment=x-pfs-01 filename.xml % % or % % \setupbodyfont [dejavu,10pt] \setuplayout [topspace=1cm, backspace=1cm, footer=0pt, header=1cm, width=middle, height=middle] \setupheader [style=bold] \setuphead [section] [style=\bfb] \setuphead [subsection] [style=\bfa] \setuppagenumbering [location=] \dontcomplain % todo: show all values and map keys onto longer names via labels \startxmlsetups xml:system \startsection[title={System}] \startsubsection[title={Properties}] \starttabulate[|B|T|] \NC hostname \NC \xmlfirst{#1}{hostname} \NC \NR \NC domain \NC \xmlfirst{#1}{domain} \NC \NR \NC timezone \NC \xmlfirst{#1}{timezone} \NC \NR \NC timeservers \NC \xmlfirst{#1}{timeservers} \NC \NR \NC dnsserver \NC \xmlfirst{#1}{dnsserver} \NC \NR \stoptabulate \stopsubsection \startsubsection[title={Groups}] \xmlfilter{#1}{group/command(xml:system:group)} \stopsubsection \startsubsection[title={Users}] \xmlfilter{#1}{user/command(xml:system:user)} \stopsubsection \stopsection \stopxmlsetups \startxmlsetups xml:system:group \starttabulate[|B|T|] \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC scope \NC \xmlfirst{#1}{/scope} \NC \NR \NC gid \NC \xmlfirst{#1}{/gid} \NC \NR \NC privilege \NC \xmlfirst{#1}{/priv} \NC \NR \NC members \NC \xmlconcat{#1}{/member}{ } \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:system:user \starttabulate[|B|T|] \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC scope \NC \xmlfirst{#1}{/scope} \NC \NR \NC uid \NC \xmlfirst{#1}{/uid} \NC \NR \NC group \NC \xmlfirst{#1}{/groupname} \NC \NR \NC privilege \NC \xmlfirst{#1}{/priv} \NC \NR \NC password \NC \xmldoifelsetext{#1}{/password}{set}{unset} \NC \NR \NC ipsec psk \NC \xmldoifelsetext{#1}{/ipsecpsk}{set}{unset} \NC \NR \NC certificate \NC \xmldoifelsetext{#1}{/cert} {set}{unset} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:interfaces \startsection[title={Interfaces}] \xmlfilter{#1}{*/command(xml:interfaces:network)} \stopsection \stopxmlsetups \startxmlsetups xml:interfaces:network \startsubsection[title={\xmltag{#1}}] % \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/if} \NC \NR \NC block private \NC \xmldoifelse{#1}{/blockpriv} {yes}{no} \NC \NR \NC block bogons \NC \xmldoifelse{#1}{/blockbogons}{yes}{no} \NC \NR \NC spoof mac address \NC \xmldoifelse{#1}{/spoofmac} {yes}{no} \NC \NR \NC enable interface \NC \xmldoifelse{#1}{/enable} {yes}{no} \NC \NR \NC ipaddress \NC \xmlfirst{#1}{/ipaddr} \NC \NR \NC subnet \NC \xmlfirst{#1}{/subnet} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \stoptabulate \stopsubsection \stopxmlsetups \startxmlsetups xml:gateways \startsection[title={Gateways}] \xmlfilter{#1}{*/command(xml:gateways:entry)} \stopsection \stopxmlsetups \startxmlsetups xml:gateways:entry \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/interface} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC name \NC \xmlfirst{#1}{/name} \NC \NR \NC weight \NC \xmlfirst{#1}{/weight} \NC \NR \NC interval \NC \xmlfirst{#1}{/interval} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \NC disable monitor \NC \xmlfirst{#1}{/monitor_disable} \NC \NR \NC default gateway \NC \xmlfirst{#1}{/defaultgw} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:virtualips \startsection[title={Virtual ipadresses}] \xmlfilter{#1}{*/command(xml:virtualips:entry)} \stopsection \stopxmlsetups \startxmlsetups xml:virtualips:entry \starttabulate[|B|T|] \NC interface \NC \xmlfirst{#1}{/interface} \NC \NR \NC type \NC \xmlfirst{#1}{/type} \NC \NR \NC mode \NC \xmlfirst{#1}{/mode} \NC \NR \NC subnet \NC \xmlfirst{#1}{/subnet} /\xmlfirst{#1}{/subnet_bits} \NC \NR \NC description \NC \xmlfirst{#1}{/descr} \NC \NR \stoptabulate \stopxmlsetups \startxmlsetups xml:dhcp \startsection[title={DHCP}] \xmlfilter{#1}{*/command(xml:dhcp:network)} \stopsection \stopxmlsetups \startxmlsetups xml:dhcp:network \startsubsection[title={\xmltag{#1}}] \starttabulate[|B|T|] \NC range \NC \xmlfirst{#1}{/range/from} \endash\ \xmlfirst{#1}{/range/to} \NC \NR \NC domain \NC \xmlfirst{#1}{/domain} \NC \NR \NC dnsserver \NC \xmlfirst{#1}{/dnsserver} \NC \NR \NC gateway \NC \xmlfirst{#1}{/gateway} \NC \NR \NC ddnsdomain \NC \xmlfirst{#1}{/ddnsdomain} \NC \NR \stoptabulate \xmldoif {#1} {/staticmap} { \starttabulate[|T|T|T|p|] \NC \rm\bf macaddress \NC \rm\bf ipaddress \NC \rm\bf hostname \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/staticmap/command(xml:dhcp:network:entry)} \stoptabulate } \stopsubsection \stopxmlsetups \startxmlsetups xml:dhcp:network:entry \NC \xmlfirst{#1}{/mac} \NC \xmlfirst{#1}{/ipaddr} \NC \xmlfirst{#1}{/hostname} \NC \xmlfirst{#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:dnsmasq \startsection[title={DNS MASQ}] \starttabulate[|T|T|T|p|] \NC \rm\bf host \NC \rm\bf domain \NC \rm\bf ipaddress \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/hosts/command(xml:dnsmasq:hosts)} \stoptabulate \stopsection \stopxmlsetups \startxmlsetups xml:dnsmasq:hosts \NC \xmlfirst{#1}{/host} \NC \xmlfirst{#1}{/domain} \NC \xmlfirst{#1}{/ip} \NC \xmlfirst{#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:nat \startsection[title={NAT}] \startsubsection[title={Rules}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf target \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/rule/command(xml:nat:rule)} \stoptabulate \stopsubsection \startsubsection[title={One to one}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf external \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/onetoone/command(xml:nat:onetoone)} \stoptabulate \stopsubsection \stopsection \stopxmlsetups \startxmlsetups xml:nat:rule \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfilter{#1}{/target/command(xml:checked)} :\xmlfilter{#1}{/local-port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:nat:onetoone \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfilter{#1}{/external/command(xml:checked)} :\xmlfilter{#1}{/local-port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \startxmlsetups xml:checked \xmldoifelse {#1} {/any} { * } { \xmldoifelsetext {#1} {.} { \xmlflush{#1} } { * } } \stopxmlsetups \startxmlsetups xml:filter \startsection[title={Filter}] \startsubsection[title={Rules}] \starttabulate[|T|T|T|T|T|p|] \NC \rm\bf type \NC \rm\bf interface \NC \rm\bf protocol \NC \rm\bf source \NC \rm\bf destination \NC \rm\bf description \NC \NR \HL \xmlfilter{#1}{/rule/command(xml:filter:rule)} \stoptabulate \stopsubsection \stopsubsection \stopxmlsetups \startxmlsetups xml:filter:rule \NC \xmlfilter{#1}{/type/command(xml:checked)} \NC \xmlfilter{#1}{/interface/command(xml:checked)} \NC \xmlfilter{#1}{/protocol/command(xml:checked)} \NC \xmlfilter{#1}{/source/(address|any)/command(xml:checked)}: :\xmlfilter{#1}{/source/port/command(xml:checked)} \NC \xmlfilter{#1}{/destination/(address|any)/command(xml:checked)} :\xmlfilter{#1}{/destination/port/command(xml:checked)} \NC \xmlfirst {#1}{/descr} \NC \NR \stopxmlsetups \starttext \doifelse {\inputfilename} {x-pfs-01.mkiv} { \xmlloadonly{main}{router.xml}{} \setupheadertexts[router.xml][\pagenumber] } { \xmlloadonly{main}{\inputfilename}{} \setupheadertexts[\inputfilename][\pagenumber] } \xmlfilter{main}{/pfsense/system/command(xml:system)} \xmlfilter{main}{/pfsense/interfaces/command(xml:interfaces)} \xmlfilter{main}{/pfsense/gateways/command(xml:gateways)} \xmlfilter{main}{/pfsense/virtualip/command(xml:virtualips)} \xmlfilter{main}{/pfsense/dhcpd/command(xml:dhcp)} \xmlfilter{main}{/pfsense/dnsmasq/command(xml:dnsmasq)} \xmlfilter{main}{/pfsense/nat/command(xml:nat)} \xmlfilter{main}{/pfsense/filter/command(xml:filter)} \stoptext