iproute: extend route get for mpls routes
This patch extends route get to support mpls specific
route attributes like RTA_NEWDST.
Input:
RTA_DST - input label
RTA_NEWDST - labels in packet for multipath selection
By default the getroute handler returns matched
nexthop label, via and oif
With fibmatch keyword (RTM_F_FIB_MATCH flag), full matched
route is returned.
example:
$ip -f mpls route show
101
nexthop as to 102/103 via inet 172.16.2.2 dev virt1-2
nexthop as to 302/303 via inet 172.16.12.2 dev virt1-12
201
nexthop as to 202/203 via inet6 2001:db8:2::2 dev virt1-2
nexthop as to 402/403 via inet6 2001:db8:12::2 dev virt1-12
$ip -f mpls route get 103
RTNETLINK answers: Network is unreachable
$ip -f mpls route get 101
101 as to 102/103 via inet 172.16.2.2 dev virt1-2
$ip -f mpls route get as to 302/303 101
101 as to 302/303 via inet 172.16.12.2 dev virt1-12
$ip -f mpls route get fibmatch 103
RTNETLINK answers: Network is unreachable
$ip -f mpls route get fibmatch 101
101
nexthop as to 102/103 via inet 172.16.2.2 dev virt1-2
nexthop as to 302/303 via inet 172.16.12.2 dev virt1-12
Signed-off-by: Roopa Prabhu <roopa@cumulusnetworks.com>
This commit is contained in:
parent
d09c20e5f8
commit
297d7588d7
10
ip/iproute.c
10
ip/iproute.c
|
|
@ -1731,6 +1731,16 @@ static int iproute_get(int argc, char **argv)
|
|||
addattr32(&req.n, sizeof(req), RTA_UID, uid);
|
||||
} else if (matches(*argv, "fibmatch") == 0) {
|
||||
fib_match = 1;
|
||||
} else if (strcmp(*argv, "as") == 0) {
|
||||
inet_prefix addr;
|
||||
|
||||
NEXT_ARG();
|
||||
if (strcmp(*argv, "to") == 0)
|
||||
NEXT_ARG();
|
||||
get_addr(&addr, *argv, req.r.rtm_family);
|
||||
if (req.r.rtm_family == AF_UNSPEC)
|
||||
req.r.rtm_family = addr.family;
|
||||
addattr_l(&req.n, sizeof(req), RTA_NEWDST, &addr.data, addr.bytelen);
|
||||
} else {
|
||||
inet_prefix addr;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue