path: root/extensions
diff options
authorPhil Sutter <>2020-02-13 17:49:53 +0100
committerPhil Sutter <>2020-02-18 17:03:15 +0100
commitc33bae9c6c7a49c8af16df846e6112fc4727e643 (patch)
tree2e272106667f9ab63f5901c1e244a65707b3d4eb /extensions
parent94488d4eb912f5af4c88d148b39b38eb8a3c1f0b (diff)
ebtables: among: Support mixed MAC and MAC/IP entries
Powered by Stefano's support for concatenated ranges, a full among match replacement can be implemented. The trick is to add MAC-only elements as a concatenation of MAC and zero-length prefix, i.e. a range from till Although not quite needed, detection of pure MAC-only matches is left in place. For those, no implicit 'meta protocol' match is added (which is required otherwise at least to keep nft output correct) and no concat type is used for the set. Signed-off-by: Phil Sutter <>
Diffstat (limited to 'extensions')
2 files changed, 2 insertions, 6 deletions
diff --git a/extensions/libebt_among.c b/extensions/libebt_among.c
index 715d559f..2b9a1b65 100644
--- a/extensions/libebt_among.c
+++ b/extensions/libebt_among.c
@@ -63,10 +63,6 @@ parse_nft_among_pair(char *buf, struct nft_among_pair *pair, bool have_ip)
char *sep = index(buf, '=');
struct ether_addr *ether;
- if (have_ip ^ !!sep)
- xtables_error(PARAMETER_PROBLEM,
- "among: Mixed MAC and MAC=IP not allowed.");
if (sep) {
*sep = '\0';
@@ -205,7 +201,7 @@ static void __bramong_print(struct nft_among_pair *pairs,
isep = ",";
printf("%s", ether_ntoa(&pairs[i].ether));
- if (have_ip)
+ if (pairs[i].in.s_addr != INADDR_ANY)
printf("=%s", inet_ntoa(pairs[i].in));
printf(" ");
diff --git a/extensions/libebt_among.t b/extensions/libebt_among.t
index 56b29916..a02206f3 100644
--- a/extensions/libebt_among.t
+++ b/extensions/libebt_among.t
@@ -13,4 +13,4 @@
--among-src 00:11=;=;FAIL
--among-src de:ad:0:be:ee:ff=;=;FAIL
---among-src de:ad:0:be:ee:ff,c0:ff:ee:0:ba:be=;=;FAIL
+--among-src c0:ff:ee:0:ba:be=,de:ad:0:be:ee:ff;=;OK