mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-11-02 22:36:03 +00:00
lib: parse_mapping: Recognize a keyword "all"
The DCB tool will have to provide an interface to a number of fixed-size arrays. Unlike the egress- and ingress-qos-map, it makes good sense to have an interface to set all members to the same value. For example to set strict priority on all TCs besides select few, or to reset allocated bandwidth to all zeroes, again besides several explicitly-given ones. To support this usage, extend the parse_mapping() with a boolean that determines whether this special use is supported. If "all" is given and recognized, mapping_cb is called with the key of -1. Have iplink_vlan pass false for allow_all. Signed-off-by: Petr Machata <me@pmachata.org> Signed-off-by: David Ahern <dsahern@gmail.com>
This commit is contained in:
parent
bc3523ae70
commit
66a2d71487
@ -329,7 +329,7 @@ int parse_one_of(const char *msg, const char *realval, const char * const *list,
|
||||
size_t len, int *p_err);
|
||||
bool parse_on_off(const char *msg, const char *realval, int *p_err);
|
||||
|
||||
int parse_mapping(int *argcp, char ***argvp,
|
||||
int parse_mapping(int *argcp, char ***argvp, bool allow_all,
|
||||
int (*mapping_cb)(__u32 key, char *value, void *data),
|
||||
void *mapping_cb_data);
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ static int vlan_parse_qos_map(int *argcp, char ***argvp, struct nlmsghdr *n,
|
||||
|
||||
tail = addattr_nest(n, 1024, attrtype);
|
||||
|
||||
if (parse_mapping(argcp, argvp, &parse_qos_mapping, n))
|
||||
if (parse_mapping(argcp, argvp, false, &parse_qos_mapping, n))
|
||||
return 1;
|
||||
|
||||
addattr_nest_end(n, tail);
|
||||
|
||||
@ -1764,7 +1764,7 @@ bool parse_on_off(const char *msg, const char *realval, int *p_err)
|
||||
return parse_one_of(msg, realval, values_on_off, ARRAY_SIZE(values_on_off), p_err);
|
||||
}
|
||||
|
||||
int parse_mapping(int *argcp, char ***argvp,
|
||||
int parse_mapping(int *argcp, char ***argvp, bool allow_all,
|
||||
int (*mapping_cb)(__u32 key, char *value, void *data),
|
||||
void *mapping_cb_data)
|
||||
{
|
||||
@ -1780,7 +1780,9 @@ int parse_mapping(int *argcp, char ***argvp,
|
||||
break;
|
||||
*colon = '\0';
|
||||
|
||||
if (get_u32(&key, *argv, 0)) {
|
||||
if (allow_all && matches(*argv, "all") == 0) {
|
||||
key = (__u32) -1;
|
||||
} else if (get_u32(&key, *argv, 0)) {
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user