* @NFT_META_SDIF: slave device interface index
* @NFT_META_SDIFNAME: slave device interface name
* @NFT_META_BRI_BROUTE: packet br_netfilter_broute bit
+ * @NFT_META_BRI_IIFHWADDR: packet input bridge interface ethernet address
*/
enum nft_meta_keys {
NFT_META_LEN,
NFT_META_SDIFNAME,
NFT_META_BRI_BROUTE,
__NFT_META_IIFTYPE,
+ NFT_META_BRI_IIFHWADDR,
};
/**
#include <arpa/inet.h>
#include <linux/netfilter.h>
#include <linux/pkt_sched.h>
+#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <time.h>
BYTEORDER_HOST_ENDIAN),
[NFT_META_BRI_BROUTE] = META_TEMPLATE("broute", &integer_type,
1 , BYTEORDER_HOST_ENDIAN),
+ [NFT_META_BRI_IIFHWADDR] = META_TEMPLATE("ibrhwaddr", ðeraddr_type,
+ ETH_ALEN * BITS_PER_BYTE,
+ BYTEORDER_BIG_ENDIAN),
};
static bool meta_key_is_unqualified(enum nft_meta_keys key)
meta protocol ip6 udp dport 67;ok
meta broute set 1;fail
+meta ibrhwaddr;fail
--- /dev/null
+:prerouting;type filter hook prerouting priority 0
+
+*bridge;test-bridge;prerouting
+
+ether daddr set meta ibrhwaddr;ok
+meta ibrhwaddr set 00:1a:2b:3c:4d:5e;fail
--- /dev/null
+# ether daddr set meta ibrhwaddr
+[
+ {
+ "mangle": {
+ "key": {
+ "payload": {
+ "field": "daddr",
+ "protocol": "ether"
+ }
+ },
+ "value": {
+ "meta": {
+ "key": "ibrhwaddr"
+ }
+ }
+ }
+ }
+]
+
--- /dev/null
+# ether daddr set meta ibrhwaddr
+bridge test-bridge prerouting
+ [ meta load ibrhwaddr => reg 1 ]
+ [ payload write reg 1 => 6b @ link header + 0 csum_type 0 csum_off 0 csum_flags 0x0 ]