diff options
author | Phil Sutter <phil@nwl.cc> | 2020-02-13 17:49:53 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2020-02-18 17:03:15 +0100 |
commit | c33bae9c6c7a49c8af16df846e6112fc4727e643 (patch) | |
tree | 2e272106667f9ab63f5901c1e244a65707b3d4eb /extensions | |
parent | 94488d4eb912f5af4c88d148b39b38eb8a3c1f0b (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
0.0.0.0 till 255.255.255.255.
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 <phil@nwl.cc>
Diffstat (limited to 'extensions')
-rw-r--r-- | extensions/libebt_among.c | 6 | ||||
-rw-r--r-- | extensions/libebt_among.t | 2 |
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;=;FAIL --among-src 00:11=10.0.0.1;=;FAIL --among-src de:ad:0:be:ee:ff=10.256.0.1;=;FAIL ---among-src de:ad:0:be:ee:ff,c0:ff:ee:0:ba:be=192.168.1.1;=;FAIL +--among-src c0:ff:ee:0:ba:be=192.168.1.1,de:ad:0:be:ee:ff;=;OK |