mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2026-01-26 22:22:18 +00:00
Add support for 'dscp' selector in ip-rule.
Rules can be added with a numeric DSCP value:
# ip rule add dscp 1 table 100
# ip rule add dscp 0x02 table 200
Or using symbolic names from /usr/share/iproute2/rt_dsfield or
/etc/iproute2/rt_dsfield:
# ip rule add dscp AF42 table 300
Dump output:
$ ip rule show
0: from all lookup local
32763: from all lookup 300 dscp AF42
32764: from all lookup 200 dscp 2
32765: from all lookup 100 dscp 1
32766: from all lookup main
32767: from all lookup default
Dump can be filtered by DSCP value:
$ ip rule show dscp 1
32765: from all lookup 100 dscp 1
Or by a symbolic name:
$ ip rule show dscp AF42
32763: from all lookup 300 dscp AF42
When the numeric option is specified, symbolic names will be translated
to numeric values:
$ ip -N rule show
0: from all lookup 255
32763: from all lookup 300 dscp 36
32764: from all lookup 200 dscp 2
32765: from all lookup 100 dscp 1
32766: from all lookup 254
32767: from all lookup 253
The same applies to the JSON output in order to be consistent with
existing fields such as "tos" and "table":
$ ip -j -p rule show dscp AF42
[ {
"priority": 32763,
"src": "all",
"table": "300",
"dscp": "AF42"
} ]
$ ip -j -p -N rule show dscp AF42
[ {
"priority": 32763,
"src": "all",
"table": "300",
"dscp": "36"
} ]
Signed-off-by: Ido Schimmel <idosch@nvidia.com>
Reviewed-by: Daniel Machon <daniel.machon@microchip.com>
Reviewed-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: David Ahern <dsahern@kernel.org>
50 lines
1.8 KiB
C
50 lines
1.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef RT_NAMES_H_
|
|
#define RT_NAMES_H_ 1
|
|
|
|
#include <asm/types.h>
|
|
|
|
const char *rtnl_rtprot_n2a(int id, char *buf, int len);
|
|
const char *rtnl_addrprot_n2a(__u8 id, char *buf, int len);
|
|
const char *rtnl_rtscope_n2a(int id, char *buf, int len);
|
|
const char *rtnl_rttable_n2a(__u32 id, char *buf, int len);
|
|
const char *rtnl_rtrealm_n2a(int id, char *buf, int len);
|
|
const char *rtnl_dsfield_n2a(int id, char *buf, int len);
|
|
const char *rtnl_dsfield_get_name(int id);
|
|
const char *rtnl_dscp_n2a(int id, char *buf, int len);
|
|
const char *rtnl_group_n2a(int id, char *buf, int len);
|
|
|
|
int rtnl_rtprot_a2n(__u32 *id, const char *arg);
|
|
int rtnl_addrprot_a2n(__u8 *id, const char *arg);
|
|
int rtnl_rtscope_a2n(__u32 *id, const char *arg);
|
|
int rtnl_rttable_a2n(__u32 *id, const char *arg);
|
|
int rtnl_rtrealm_a2n(__u32 *id, const char *arg);
|
|
int rtnl_dsfield_a2n(__u32 *id, const char *arg);
|
|
int rtnl_dscp_a2n(__u32 *id, const char *arg);
|
|
int rtnl_group_a2n(int *id, const char *arg);
|
|
|
|
const char *inet_proto_n2a(int proto, char *buf, int len);
|
|
int inet_proto_a2n(const char *buf);
|
|
|
|
|
|
const char * ll_type_n2a(int type, char *buf, int len);
|
|
const char *ll_addr_n2a(const unsigned char *addr, int alen,
|
|
int type, char *buf, int blen);
|
|
int ll_addr_a2n(char *lladdr, int len, const char *arg);
|
|
|
|
const char * ll_proto_n2a(unsigned short id, char *buf, int len);
|
|
int ll_proto_a2n(unsigned short *id, const char *buf);
|
|
|
|
const char *ppp_proto_n2a(unsigned short id, char *buf, int len);
|
|
int ppp_proto_a2n(unsigned short *id, const char *buf);
|
|
|
|
const char *nl_proto_n2a(int id, char *buf, int len);
|
|
int nl_proto_a2n(__u32 *id, const char *arg);
|
|
|
|
int protodown_reason_a2n(__u32 *id, const char *arg);
|
|
int protodown_reason_n2a(int id, char *buf, int len);
|
|
|
|
extern int numeric;
|
|
|
|
#endif
|