@@ -978,6 +978,8 @@ filter output ip6 daddr ::1
<arg>l4proto</arg>
<arg>protocol</arg>
<arg>priority</arg>
+ <arg>nexthop</arg>
+ <arg>nexthop6</arg>
</group>
</cmdsynopsis>
<cmdsynopsis>
@@ -1134,6 +1136,16 @@ filter output ip6 daddr ::1
<entry>pseudo-random number</entry>
<entry>integer (32 bits)</entry>
</row>
+ <row>
+ <entry>nexthop</entry>
+ <entry>next hop address for the IPv4 packet</entry>
+ <entry>ipv4_addr</entry>
+ </row>
+ <row>
+ <entry>nexthop6</entry>
+ <entry>next hop address for the IPv6 packet</entry>
+ <entry>ipv6_addr</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -721,6 +721,8 @@ enum nft_meta_keys {
NFT_META_OIFGROUP,
NFT_META_CGROUP,
NFT_META_PRANDOM,
+ NFT_META_NEXTHOP,
+ NFT_META_NEXTHOP6,
};
/**
@@ -432,6 +432,12 @@ static const struct meta_template meta_templates[] = {
[NFT_META_PRANDOM] = META_TEMPLATE("random", &integer_type,
4 * BITS_PER_BYTE,
BYTEORDER_BIG_ENDIAN), /* avoid conversion; doesn't have endianess */
+ [NFT_META_NEXTHOP] = META_TEMPLATE("nexthop", &ipaddr_type,
+ 4 * BITS_PER_BYTE,
+ BYTEORDER_BIG_ENDIAN),
+ [NFT_META_NEXTHOP6] = META_TEMPLATE("nexthop6", &ip6addr_type,
+ 16 * BITS_PER_BYTE,
+ BYTEORDER_BIG_ENDIAN),
};
static bool meta_key_is_qualified(enum nft_meta_keys key)
@@ -443,6 +449,8 @@ static bool meta_key_is_qualified(enum nft_meta_keys key)
case NFT_META_PROTOCOL:
case NFT_META_PRIORITY:
case NFT_META_PRANDOM:
+ case NFT_META_NEXTHOP:
+ case NFT_META_NEXTHOP6:
return true;
default:
return false;
@@ -339,6 +339,8 @@ static void location_update(struct location *loc, struct location *rhs, int n)
%token IIFGROUP "iifgroup"
%token OIFGROUP "oifgroup"
%token CGROUP "cgroup"
+%token NEXTHOP "nexthop"
+%token NEXTHOP6 "nexthop6"
%token CT "ct"
%token DIRECTION "direction"
@@ -2438,6 +2440,8 @@ meta_key_qualified : LENGTH { $$ = NFT_META_LEN; }
| PROTOCOL { $$ = NFT_META_PROTOCOL; }
| PRIORITY { $$ = NFT_META_PRIORITY; }
| RANDOM { $$ = NFT_META_PRANDOM; }
+ | NEXTHOP { $$ = NFT_META_NEXTHOP; }
+ | NEXTHOP6 { $$ = NFT_META_NEXTHOP6; }
;
meta_key_unqualified : MARK { $$ = NFT_META_MARK; }
@@ -455,6 +455,8 @@ addrstring ({macaddr}|{ip4addr}|{ip6addr})
"iifgroup" { return IIFGROUP; }
"oifgroup" { return OIFGROUP; }
"cgroup" { return CGROUP; }
+"nexthop" { return NEXTHOP; }
+"nexthop6" { return NEXTHOP6; }
"ct" { return CT; }
"direction" { return DIRECTION; }