</para>
<para>
- Tables are containers for chains and sets. They are identified by their address family
+ Tables are containers for chains, sets and stateful objects. They are identified by their address family
and their name. The address family must be one of
<simplelist type="inline">
</variablelist>
</refsect1>
+ <refsect1>
+ <title>Stateful objects</title>
+ <para>
+ <cmdsynopsis>
+ <group choice="req">
+ <arg>add</arg>
+ <arg>delete</arg>
+ <arg>list</arg>
+ <arg>reset</arg>
+ </group>
+ <command> type</command>
+ <arg choice="opt"><replaceable>family</replaceable></arg>
+ <arg choice="req"><replaceable>table</replaceable></arg>
+ <arg choice="req"><replaceable>object</replaceable></arg>
+ </cmdsynopsis>
+ </para>
+ <para>
+ Stateful objects are attached to tables and are identified by an unique name. They group stateful information from rules, to reference them in rules the keywords "type name" are used e.g. "counter name".
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>add</option></term>
+ <listitem>
+ <para>
+ Add a new stateful object in the specified table.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>delete</option></term>
+ <listitem>
+ <para>
+ Delete the specified object.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>list</option></term>
+ <listitem>
+ <para>
+ Display stateful information the object holds.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>reset</option></term>
+ <listitem>
+ <para>
+ List-and-reset stateful object.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <refsect2>
+ <title>Counter</title>
+ <para>
+ <cmdsynopsis>
+ <command>counter</command>
+ <arg choice="opt">packets bytes</arg>
+ </cmdsynopsis>
+ </para>
+ <table frame="all">
+ <title>Counter specifications</title>
+ <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <thead>
+ <row>
+ <entry>Keyword</entry>
+ <entry>Description</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>packets</entry>
+ <entry>initial count of packets</entry>
+ <entry>unsigned integer (64 bit)</entry>
+ </row>
+ <row>
+ <entry>bytes</entry>
+ <entry>initial count of bytes</entry>
+ <entry>unsigned integer (64 bit)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </refsect2>
+
+ <refsect2>
+ <title>Quota</title>
+ <para>
+ <cmdsynopsis>
+ <command>quota</command>
+ <group choice="opt">
+ <arg>over</arg>
+ <arg>until</arg>
+ </group>
+ <arg choice="opt">used</arg>
+ </cmdsynopsis>
+ </para>
+ <table frame="all">
+ <title>Quota specifications</title>
+ <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+ <colspec colname='c1'/>
+ <colspec colname='c2'/>
+ <colspec colname='c3'/>
+ <thead>
+ <row>
+ <entry>Keyword</entry>
+ <entry>Description</entry>
+ <entry>Type</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>quota</entry>
+ <entry>quota limit, used as the quota name</entry>
+ <entry>Two arguments, unsigned interger (64 bit) and string: bytes, kbytes, mbytes. "over" and "until" go before these arguments</entry>
+ </row>
+ <row>
+ <entry>used</entry>
+ <entry>initial value of used quota</entry>
+ <entry>Two arguments, unsigned interger (64 bit) and string: bytes, kbytes, mbytes</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </refsect2>
+ </refsect1>
+
<refsect1>
<title>Expressions</title>
<para>