Looks good, may I include your Signed-off-by tag?
On Tue, Nov 13, 2018 at 11:53:30AM +0100, Jan Engelhardt wrote:
> ---
> Additional fixes on top of V. Skyttä's patch: lots of "a", "the", etc.
> missing, wrong prepositions addressed. Contractions are expanded for
> better write style.
>
> doc/data-types.txt | 6 +-
> doc/libnftables-json.adoc | 145 +++++++++++++++++++------------------
> doc/libnftables.adoc | 10 +--
> doc/nft.txt | 30 ++++----
> doc/primary-expression.txt | 2 +-
> 5 files changed, 97 insertions(+), 96 deletions(-)
>
> diff --git a/doc/data-types.txt b/doc/data-types.txt
> index 5c132f8..90e19a8 100644
> --- a/doc/data-types.txt
> +++ b/doc/data-types.txt
> @@ -9,8 +9,8 @@ variable |
> -
> |===================
>
> -The integer type is used for numeric values. It may be specified as decimal,
> -hexadecimal or octal number. The integer type doesn't have a fixed size, its
> +The integer type is used for numeric values. It may be specified as a
> decimal,
> +hexadecimal or octal number. The integer type does not have a fixed size, its
> size is determined by the expression for which it is used.
>
> BITMASK TYPE
> @@ -39,7 +39,7 @@ variable |
>
> The string type is used for character strings. A string begins with an
> alphabetic character (a-zA-Z) followed by zero or more alphanumeric
> characters
> -or the characters /, -, _ and .. In addition anything enclosed in double
> +or the characters /, -, _ and .. In addition, anything enclosed in double
> quotes (") is recognized as a string.
>
> .String specification
> diff --git a/doc/libnftables-json.adoc b/doc/libnftables-json.adoc
> index c95ab32..5df4643 100644
> --- a/doc/libnftables-json.adoc
> +++ b/doc/libnftables-json.adoc
> @@ -28,14 +28,14 @@ libnftables-json - Supported JSON schema by libnftables
> == DESCRIPTION
> libnftables supports JSON formatted input and output. This is implemented as
> an
> alternative frontend to the standard CLI syntax parser, therefore basic
> -behaviour is identical and for (almost) any operation available in standard
> -syntax there should be an equivalent one in JSON.
> +behaviour is identical and, for (almost) any operation available in standard
> +syntax, there should be an equivalent one in JSON.
>
> JSON input may be provided in a single string as parameter to
> *nft_run_cmd_from_buffer()* or in a file identified by the 'filename'
> parameter
> -of *nft_run_cmd_from_filename()* function.
> +of the *nft_run_cmd_from_filename()* function.
>
> -JSON output has to be enabled via *nft_ctx_output_set_json()* function,
> turning
> +JSON output has to be enabled via the *nft_ctx_output_set_json()* function,
> turning
> library standard output into JSON format. Error output remains unaffected.
>
> == GLOBAL STRUCTURE
> @@ -44,12 +44,12 @@ property named 'nftables'. Its value is an array
> containing commands (for
> input) or ruleset elements (for output).
>
> A command is an object with a single property whose name identifies the
> command.
> -Its value is a ruleset element - basically identical to output elements apart
> +Its value is a ruleset element - basically identical to output elements,
> apart
> from certain properties which may be interpreted differently or are required
> when output generally omits them.
>
> == METAINFO OBJECT
> -In output, the first object in *nftables* array is a special one containing
> +In output, the first object in an *nftables* array is a special one
> containing
> library information. Its content is as follows:
>
> [verse]
> @@ -60,10 +60,10 @@ library information. Its content is as follows:
> *}}*
>
> The values of *version* and *release_name* properties are equal to the
> package
> -version and release name as printed by *nft -v*. The value of
> +version and release name as printed by *nft -v*. The value of the
> *json_schema_version* property is an integer indicating the schema version.
>
> -If supplied in library input, the parser will verify *json_schema_version*
> value
> +If supplied in library input, the parser will verify the
> *json_schema_version* value
> to not exceed the internally hardcoded one (to make sure the given schema is
> fully understood). In future, a lower number than the internal one may
> activate
> compatibility mode to parse outdated and incompatible JSON input.
> @@ -127,7 +127,7 @@ Add a new ruleset element to the kernel.
> [verse]
> *{ "replace":* 'RULE' *}*
>
> -Replace a rule. In 'RULE', *handle* property is mandatory and identifies the
> +Replace a rule. In 'RULE', the *handle* property is mandatory and identifies
> the
> rule to be replaced.
>
> === CREATE
> @@ -151,7 +151,7 @@ properties.
>
> Delete an object from the ruleset. Only the minimal number of properties
> required to uniquely identify an object is generally needed in 'ADD_OBJECT'.
> For
> -most ruleset elements this is *family* and *table* plus either *handle* or
> +most ruleset elements, this is *family* and *table* plus either *handle* or
> *name* (except rules since they don't have a name).
>
> === LIST
> @@ -213,7 +213,7 @@ This object describes a table.
> *name*::
> The table's name.
> *handle*::
> - The table's handle. In input, used only in *delete* command as
> + The table's handle. In input, it is used only in *delete* command as
> alternative to *name*.
>
> === CHAIN
> @@ -240,10 +240,10 @@ This object describes a chain.
> *name*::
> The chain's name.
> *handle*::
> - The chain's handle. In input, used only in *delete* command as
> + The chain's handle. In input, it is used only in *delete* command as
> alternative to *name*.
> *newname*::
> - A new name for the chain, only relevant in *rename* command.
> + A new name for the chain, only relevant in the *rename* command.
>
> The following properties are required for base chains:
>
> @@ -254,7 +254,7 @@ The following properties are required for base chains:
> *prio*::
> The chain's priority.
> *dev*::
> - The chain's bound interface (if in netdev family).
> + The chain's bound interface (if in the netdev family).
> *policy*::
> The chain's policy.
>
> @@ -274,8 +274,8 @@ ____
> 'STATEMENTS' := 'STATEMENT' [*,* 'STATEMENTS' ]
> ____
>
> -This object describes a rule. Basic building blocks of rules are statements,
> -each rule consists of at least a single one.
> +This object describes a rule. Basic building blocks of rules are statements.
> +Each rule consists of at least one.
>
> *family*::
> The table's family.
> @@ -284,14 +284,14 @@ each rule consists of at least a single one.
> *chain*::
> The chain's name.
> *expr*::
> - An array of statements this rule consists of. In input, used in
> + An array of statements this rule consists of. In input, it is used in
> *add*/*insert*/*replace* commands only.
> *handle*::
> - The rule's handle. In *delete*/*replace* commands, serves as identifier
> - of the rule to delete/replace. In *add*/*insert* commands, serves as
> - identifier of an existing rule to append/prepend the rule to.
> + The rule's handle. In *delete*/*replace* commands, it serves as an
> identifier
> + of the rule to delete/replace. In *add*/*insert* commands, it serves as
> + an identifier of an existing rule to append/prepend the rule to.
> *index*::
> - The rule's position for *add*/*insert* commands. Used as alternative to
> + The rule's position for *add*/*insert* commands. It is used as an
> alternative to
> *handle* then.
> *comment*::
> Optional rule comment.
> @@ -347,7 +347,7 @@ that they translate a unique key to a value.
> *name*::
> The set's name.
> *handle*::
> - The set's handle. For input, used in *delete* command only.
> + The set's handle. For input, it is used in the *delete* command only.
> *type*::
> The set's datatype, see below.
> *map*::
> @@ -452,7 +452,7 @@ This object represents a named counter.
> *name*::
> The counter's name.
> *handle*::
> - The counter's handle. In input, used for *delete* command only.
> + The counter's handle. In input, it is used by the *delete* command only.
> *packets*::
> Packet counter value.
> *bytes*::
> @@ -479,13 +479,13 @@ This object represents a named quota.
> *name*::
> The quota's name.
> *handle*::
> - The quota's handle. In input, used for *delete* command only.
> + The quota's handle. In input, it is used by the *delete* command only.
> *bytes*::
> Quota threshold.
> *used*::
> Quota used so far.
> *inv*::
> - If true, match if quota exceeded.
> + If true, match if the quota has been exceeded.
>
> === CT HELPER
> [verse]
> @@ -512,7 +512,7 @@ This object represents a named conntrack helper.
> *name*::
> The ct helper's name.
> *handle*::
> - The ct helper's handle. In input, used for *delete* command only.
> + The ct helper's handle. In input, it is used by the *delete* command
> only.
> *type*::
> The ct helper type name, e.g. *"ftp"* or *"tftp"*.
> *protocol*::
> @@ -547,7 +547,7 @@ This object represents a named limit.
> *name*::
> The limit's name.
> *handle*::
> - The limit's handle. In input, used for *delete* command only.
> + The limit's handle. In input, it is used by the *delete* command only.
> *rate*::
> The limit's rate value.
> *per*::
> @@ -586,19 +586,20 @@ This object represents a named conntrack timeout policy.
> *name*::
> The ct timeout object's name.
> *handle*::
> - The ct timeout object's handle. In input, used for *delete* command
> only.
> + The ct timeout object's handle. In input, it is used by *delete*
> command only.
> *protocol*::
> The ct timeout object's layer 4 protocol.
> *state*::
> - The connection state name, for which timeout value has to be updated,
> e.g. *"established"*, *"syn_sent"*, *"close"* or *"close_wait"*.
> + The connection state name, e.g. *"established"*, *"syn_sent"*,
> *"close"* or
> + *"close_wait"*, for which the timeout value has to be updated.
> *value*::
> - The updated timeout value for specified connection state.
> + The updated timeout value for the specified connection state.
> *l3proto*::
> The ct timeout object's layer 3 protocol, e.g. *"ip"* or *"ip6"*.
>
> == STATEMENTS
> -Statements are the building blocks for rules. Each rule consists of at least
> a
> -single statement.
> +Statements are the building blocks for rules. Each rule consists of at least
> +one.
>
> === VERDICT
> [verse]
> @@ -622,9 +623,9 @@ delegates to a different one.
> "op":* 'STRING'
> *}}*
>
> -Match expression on left hand side (typically a packet header or packet meta
> -info) with expression on right hand side (typically a constant value). If the
> -statement evaluates true, the next statement in this rule is considered. If
> not,
> +This matches the expression on left hand side (typically a packet header or
> packet meta
> +info) with the expression on right hand side (typically a constant value).
> If the
> +statement evaluates to true, the next statement in this rule is considered.
> If not,
> processing continues with the next rule in the same chain.
>
> *left*::
> @@ -650,15 +651,15 @@ processing continues with the next rule in the same
> chain.
> *>=*:: Greater than or equal to
> *in*:: Perform a lookup, i.e. test if bits on RHS are contained in LHS value
>
> -Unlike with standard API, the operator is mandatory here. In standard API,
> -missing operator may be resolved in two ways depending on the type of
> expression
> -on RHS:
> +Unlike with the standard API, the operator is mandatory here. In the
> standard API,
> +a missing operator may be resolved in two ways, depending on the type of
> expression
> +on the RHS:
>
> -- If RHS is a bitmask or a list of bitmasks, the expression resolves into a
> - binary operation with not equal operator, like this: '+LHS & RHS != 0+'.
> -- In any other case, equal operator is simply inserted.
> +- If the RHS is a bitmask or a list of bitmasks, the expression resolves
> into a
> + binary operation with the inequality operator, like this: '+LHS & RHS !=
> 0+'.
> +- In any other case, the equality operator is simply inserted.
>
> -For the non-trivial first case, JSON API supports *in* operator.
> +For the non-trivial first case, the JSON API supports the *in* operator.
>
> === COUNTER
> [verse]
> @@ -671,7 +672,7 @@ ____
> *{ "counter":* 'STRING' *}*
> ____
>
> -This object represents a byte/packet counter. In Input, no properties are
> +This object represents a byte/packet counter. In input, no properties are
> required. If given, they act as initial values for the counter.
>
> The first form creates an anonymous counter which lives in the rule it
> appears
> @@ -689,10 +690,10 @@ in. The second form specifies a reference to a named
> counter object.
> "value":* 'EXPRESSION'
> *}}*
>
> -Change packet data or meta info.
> +This changes the packet data or meta info.
>
> *key*::
> - Packet data to be changed, given as *exthdr*, *payload*, *meta*, *ct* or
> + The packet data to be changed, given as a *exthdr*, *payload*, *meta*,
> *ct* or
> *ct helper* expression.
> *value*::
> Value to change data to.
> @@ -756,7 +757,7 @@ The second form specifies a reference to a named limit
> object.
> Unit of *burst*, ignored if *rate_unit* is *"packets"*. Defaults to
> *"bytes"*.
> *inv*::
> - If *true*, matches if limit was exceeded. Defaults to *false*.
> + If *true*, matches if the limit was exceeded. Defaults to *false*.
>
> === FWD
> [verse]
> @@ -773,13 +774,13 @@ ____
> Forward a packet to a different destination.
>
> *dev*::
> - Interface to forward packet to.
> + Interface to forward the packet on.
> *family*::
> Family of *addr*.
> *addr*::
> IP(v6) address to forward the packet to.
>
> -Both *family* and *addr* are optional, but if given both need to be present.
> +Both *family* and *addr* are optional, but if at least one is given, both
> must be present.
>
> === NOTRACK
> [verse]
> @@ -799,7 +800,7 @@ Duplicate a packet to a different destination.
> *addr*::
> Address to duplicate packet to.
> *dev*::
> - Interface to duplicate packet to. May be omitted to not specify an
> + Interface to duplicate packet on. May be omitted to not specify an
> interface explicitly.
>
> === NETWORK ADDRESS TRANSLATION
> @@ -918,7 +919,7 @@ All properties are optional.
> [verse]
> *{ "ct helper":* 'EXPRESSION' *}*
>
> -Enable specified conntrack helper for this packet.
> +Enable the specified conntrack helper for this packet.
>
> *ct helper*::
> CT helper reference.
> @@ -931,7 +932,7 @@ Enable specified conntrack helper for this packet.
> "stmt":* 'STATEMENT'
> *}}*
>
> -Apply given statement using a meter.
> +Apply a given statement using a meter.
>
> *name*::
> Meter name.
> @@ -981,7 +982,7 @@ Apply a verdict conditionally.
> "inv":* 'BOOLEAN'
> *}}*
>
> -Limit number of connections using conntrack.
> +Limit the number of connections using conntrack.
>
> *val*::
> Connection count threshold.
> @@ -1003,12 +1004,12 @@ Assign connection tracking timeout policy.
> *{ "xt": null }*
>
> This represents an xt statement from xtables compat interface. Sadly, at this
> -point it is not possible to provide any further information about its
> content.
> +point, it is not possible to provide any further information about its
> content.
>
> == EXPRESSIONS
> Expressions are the building blocks of (most) statements. In their most basic
> -form, they are just immediate values represented as JSON string, integer or
> -boolean types.
> +form, they are just immediate values represented as a JSON string, integer or
> +boolean type.
>
> === IMMEDIATES
> [verse]
> @@ -1104,14 +1105,14 @@ ____
> Construct a payload expression, i.e. a reference to a certain part of packet
> data. The first form creates a raw payload expression to point at a random
> number (*len*) of bytes at a certain offset (*offset*) from a given reference
> -point (*base*). Following *base* values are accepted:
> +point (*base*). The following *base* values are accepted:
>
> *"ll"*::
> - Offset is relative to Link Layer header start offset.
> + The offset is relative to Link Layer header start offset.
> *"nh"*::
> - Offset is relative to Network Layer header start offset.
> + The offset is relative to Network Layer header start offset.
> *"th"*::
> - Offset is relative to Transport Layer header start offset.
> + The offset is relative to Transport Layer header start offset.
>
> The second form allows to reference a field by name (*field*) in a named
> packet
> header (*protocol*).
> @@ -1127,8 +1128,8 @@ header (*protocol*).
> Create a reference to a field (*field*) in an IPv6 extension header (*name*).
> *offset* is used only for *rt0* protocol.
>
> -If *field* property is not given, expression is to be used as header
> -existence check in a *match* statement with boolean on right hand side.
> +If the *field* property is not given, the expression is to be used as a
> header
> +existence check in a *match* statement with a boolean on the right hand side.
>
> === TCP OPTION
> [verse]
> @@ -1139,8 +1140,8 @@ existence check in a *match* statement with boolean on
> right hand side.
>
> Create a reference to a field (*field*) of a TCP option header (*name*).
>
> -If *field* property is not given, expression is to be used as TCP option
> -existence check in a *match* statement with boolean on right hand side.
> +If the *field* property is not given, the expression is to be used as a TCP
> option
> +existence check in a *match* statement with a boolean on the right hand side.
>
> === META
> [verse]
> @@ -1191,7 +1192,7 @@ ____
>
> Create a reference to packet conntrack data.
>
> -Some CT keys don't support a direction. In this case *dir* must not be
> +Some CT keys do not support a direction. In this case, *dir* must not be
> given.
>
> === NUMGEN
> @@ -1255,7 +1256,7 @@ Perform kernel Forwarding Information Base lookups.
> *{ "+<<+": [* 'EXPRESSION'*,* 'EXPRESSION' *] }*
> *{ ">>": [* 'EXPRESSION'*,* 'EXPRESSION' *] }*
>
> -All binary operations expect an array of exactly two expressions of which the
> +All binary operations expect an array of exactly two expressions, of which
> the
> first element denotes the left hand side and the second one the right hand
> side.
>
> @@ -1268,7 +1269,7 @@ side.
> *{ "jump": { "target":* 'STRING' *}}*
> *{ "goto": { "target":* 'STRING' *}}*
>
> -Same as *verdict* statement, but for use in verdict maps.
> +Same as the *verdict* statement, but for use in verdict maps.
>
> *jump* and *goto* verdicts expect a target chain name.
>
> @@ -1281,8 +1282,8 @@ Same as *verdict* statement, but for use in verdict
> maps.
> "comment":* 'STRING'
> *}}*
>
> -Explicit set element object, in case *timeout*, *expires* or *comment* are
> -desired. Otherwise may be replaced by the value of *val*.
> +Explicitly set element object, in case *timeout*, *expires* or *comment* are
> +desired. Otherwise, it may be replaced by the value of *val*.
>
> === SOCKET
> [verse]
> @@ -1308,14 +1309,14 @@ ____
> 'OSF_TTL' := *"loose"* | *"skip"*
> ____
>
> -Perform OS fingerprinting. This expression is typically used in LHS of a
> *match*
> +Perform OS fingerprinting. This expression is typically used in the LHS of a
> *match*
> statement.
>
> *key*::
> - What part of the fingerprint info to match against. At this point, only
> + Which part of the fingerprint info to match against. At this point, only
> the OS name is supported.
> *ttl*::
> - Define how packet's TTL value is to be matched. This property is
> - optional. If omitted, TTL value has to match exactly. A value of *loose*
> + Define how the packet's TTL value is to be matched. This property is
> + optional. If omitted, the TTL value has to match exactly. A value of
> *loose*
> accepts TTL values less than the fingerprint one. A value of *skip*
> omits TTL value comparison entirely.
> diff --git a/doc/libnftables.adoc b/doc/libnftables.adoc
> index 7f6eef8..ea9626a 100644
> --- a/doc/libnftables.adoc
> +++ b/doc/libnftables.adoc
> @@ -64,7 +64,7 @@ The *nft_ctx_new*() function allocates and returns a new
> context object.
> The parameter 'flags' is unused at this point and should be set to zero.
> For convenience, the macro *NFT_CTX_DEFAULT* is defined to that value.
>
> -The *nft_ctx_free*() function frees the context object pointed to by 'ctx'
> including any caches or buffers it may hold.
> +The *nft_ctx_free*() function frees the context object pointed to by 'ctx',
> including any caches or buffers it may hold.
>
> === nft_ctx_get_dry_run() and nft_ctx_set_dry_run()
> Dry-run setting controls whether ruleset changes are actually committed on
> kernel side or not.
> @@ -99,12 +99,12 @@ NFT_CTX_OUTPUT_REVERSEDNS::
> NFT_CTX_OUTPUT_SERVICE::
> Print port numbers as services as described in the /etc/services file.
> NFT_CTX_OUTPUT_STATELESS::
> - If stateless output has been requested then stateful data is not
> printed.
> + If stateless output has been requested, then stateful data is not
> printed.
> Stateful data refers to those objects that carry run-time data, e.g.
> the *counter* statement holds packet and byte counter values, making it
> stateful.
> NFT_CTX_OUTPUT_HANDLE::
> Upon insertion into the ruleset, some elements are assigned a unique
> handle for identification purposes.
> For example, when deleting a table or chain, it may be identified
> either by name or handle.
> - Rules on the other hand must be deleted by handle because there is no
> other way to uniquely identify them.
> + Rules on the other hand must be deleted by handle, because there is no
> other way to uniquely identify them.
> This flag makes ruleset listings include handle values.
> NFT_CTX_OUTPUT_JSON::
> If enabled at compile-time, libnftables accepts input in JSON format
> and is able to print output in JSON format as well.
> @@ -181,7 +181,7 @@ The functions return zero on success, non-zero otherwise.
> This may happen if the internal call to *fopencookie*() failed.
>
> The *nft_ctx_unbuffer_output*() and *nft_ctx_unbuffer_error*() functions
> disable library standard or error output buffering.
> -On failure, the functions return non-zero which may only happen if buffering
> wasn't enabled at the time the function was called.
> +On failure, the functions return non-zero which may only happen if buffering
> was not enabled at the time the function was called.
>
> The *nft_ctx_get_output_buffer*() and *nft_ctx_get_error_buffer*() functions
> return a pointer to the buffered output (which may be empty).
>
> @@ -191,7 +191,7 @@ The include path defines where these files are searched
> for.
> Libnftables allows to have a list of those paths which are searched in order.
> The default include path list contains a single compile-time defined entry
> (typically '/etc/').
>
> -The *nft_ctx_add_include_path*() function extends the list of include paths
> in 'ctx' by the one pointed to in 'path'.
> +The *nft_ctx_add_include_path*() function extends the list of include paths
> in 'ctx' by the one given in 'path'.
> The function returns zero on success or non-zero if memory allocation failed.
>
> The *nft_ctx_clear_include_paths*() function removes all include paths, even
> the built-in default one.
> diff --git a/doc/nft.txt b/doc/nft.txt
> index 88f5b0d..45af5bb 100644
> --- a/doc/nft.txt
> +++ b/doc/nft.txt
> @@ -151,7 +151,7 @@ filter input iif $int_ifs accept
> ADDRESS FAMILIES
> ----------------
> Address families determine the type of packets which are processed. For each
> -address family the kernel contains so called hooks at specific stages of the
> +address family, the kernel contains so called hooks at specific stages of the
> packet processing paths, which invoke nftables if rules for these hooks
> exist.
>
> [horizontal]
> @@ -236,7 +236,7 @@ currently in place in kernel. The following *ruleset*
> commands exist:
> [horizontal]
> *list*:: Print the ruleset in human-readable format.
>
> -*flush*:: Clear the whole ruleset. Note that unlike iptables, this will
> remove
> +*flush*:: Clear the whole ruleset. Note that, unlike iptables, this will
> remove
> all tables and whatever they contain, effectively leading to an empty
> ruleset -
> no packet filtering will happen anymore, so the kernel accepts any valid
> packet
> it receives.
> @@ -349,10 +349,10 @@ Apart from the special cases illustrated above (e.g.
> *nat* type not supporting
> *forward* hook or *route* type only supporting *output* hook), there are two
> further quirks worth noticing:
>
> -* netdev family supports merely a single combination, namely *filter* type
> and
> +* The netdev family supports merely a single combination, namely *filter*
> type and
> *ingress* hook. Base chains in this family also require the *device*
> parameter
> to be present since they exist per incoming interface only.
> -* arp family supports only *input* and *output* hooks, both in chains of type
> +* The arp family supports only the *input* and *output* hooks, both in
> chains of type
> *filter*.
>
> The *priority* parameter accepts a signed integer value or a standard
> priority
> @@ -393,7 +393,7 @@ the others. See the following tables that describe the
> values and compatibility.
> |==================
>
> Basic arithmetic expressions (addition and subtraction) can also be achieved
> -with these standard names to ease relative prioritizing, eg. *mangle - 5*
> stands
> +with these standard names to ease relative prioritizing, e.g. *mangle - 5*
> stands
> for *-155*. Values will also be printed like this until the value is not
> further than 10 form the standard value.
>
> @@ -423,8 +423,8 @@ just as if an invalid 'handle' was given.
>
> A 'comment' is a single word or a double-quoted (") multi-word string which
> can
> be used to make notes regarding the actual rule. *Note:* If you use bash for
> -adding rules, you have to escape the quotation marks (eg. \"enable ssh for
> -servers\")
> +adding rules, you have to escape the quotation marks, e.g. \"enable ssh for
> +servers\".
>
> [horizontal]
> *add*:: Add a new rule described by the list of statements. The
> @@ -539,7 +539,7 @@ add *map* ['family'] 'table' 'map' { type 'type' [flags
> 'flags' ;] [elements = {
> {delete | list | flush} *map* ['family'] 'table' 'map'
> {add | delete} *element* ['family'] 'table' 'map' { elements = {
> 'elements'[,...] } ; }
>
> -Maps store data based on some specific key used as input, they are uniquely
> identified by a user-defined name and attached to tables.
> +Maps store data based on some specific key used as input. They are uniquely
> identified by a user-defined name and attached to tables.
>
> [horizontal]
> *add*:: Add a new map in the specified table.
> @@ -584,15 +584,15 @@ protocols. Each entry also caches the destination
> interface and the gateway
> address - to update the destination link-layer address - to forward packets.
> The ttl and hoplimit fields are also decremented. Hence, flowtables provides
> an
> alternative path that allow packets to bypass the classic forwarding path.
> -Flowtables reside in the ingress hook, that is located before the prerouting
> -hook. You can select what flows you want to offload through the flow offload
> +Flowtables reside in the ingress hook that is located before the prerouting
> +hook. You can select which flows you want to offload through the flow offload
> expression from the forward chain. Flowtables are identified by their address
> -family and their name. The address family must be one of ip, ip6, inet. The
> inet
> +family and their name. The address family must be one of ip, ip6, or inet.
> The inet
> address family is a dummy family which is used to create hybrid IPv4/IPv6
> tables. When no address family is specified, ip is used by default.
>
> The *priority* can be a signed integer or *filter* which stands for 0.
> Addition
> -and subtraction can be used to set relative priority eg. filter + 5 equals to
> +and subtraction can be used to set relative priority, e.g. filter + 5 equals
> to
> 5.
>
> [horizontal]
> @@ -622,7 +622,7 @@ include::stateful-objects.txt[]
> EXPRESSIONS
> ------------
> Expressions represent values, either constants like network addresses, port
> -numbers etc. or data gathered from the packet during ruleset evaluation.
> +numbers, etc., or data gathered from the packet during ruleset evaluation.
> Expressions can be combined using binary, logical, relational and other
> types of
> expressions to form complex or relational (match) expressions. They are also
> used as arguments to certain types of operations, like NAT, packet marking
> etc.
> @@ -666,7 +666,7 @@ Types may be derived from lower order types, f.i. the
> IPv4 address type is
> derived from the integer type, meaning an IPv4 address can also be specified
> as
> an integer value. +
>
> -In certain contexts (set and map definitions) it is necessary to explicitly
> +In certain contexts (set and map definitions), it is necessary to explicitly
> specify a data type. Each type has a name which is used for this.
>
> include::data-types.txt[]
> @@ -750,7 +750,7 @@ parts using carets (^). If the error results from the
> combination of two
> expressions or statements, the part imposing the constraints which are
> violated
> is marked using tildes (~). +
>
> -For errors returned by the kernel, nft can't detect which parts of the input
> +For errors returned by the kernel, nft cannot detect which parts of the input
> caused the error and the entire command is marked.
>
> .Error caused by single incorrect expression
> diff --git a/doc/primary-expression.txt b/doc/primary-expression.txt
> index 6995d32..a964ce9 100644
> --- a/doc/primary-expression.txt
> +++ b/doc/primary-expression.txt
> @@ -44,7 +44,7 @@ with the same name is created.
> |Keyword | Description | Type
> |length|
> Length of the packet in bytes|
> -integer (32 bit)
> +integer (32-bit)
> |nfproto|
> real hook protocol family, useful only in inet table|
> integer (32 bit)
> --
> 2.19.1
>