summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/route.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lib/route.c b/src/lib/route.c
index cd3e8978..2eac0a05 100644
--- a/src/lib/route.c
+++ b/src/lib/route.c
@@ -141,11 +141,13 @@ void nl_cli_route_parse_nexthop(struct rtnl_route *route, char *subopts,
NH_DEV,
NH_VIA,
NH_WEIGHT,
+ NH_AS,
};
static char *const tokens[] = {
"dev",
"via",
"weight",
+ "as",
NULL,
};
struct rtnl_nexthop *nh;
@@ -175,8 +177,20 @@ void nl_cli_route_parse_nexthop(struct rtnl_route *route, char *subopts,
break;
case NH_VIA:
- addr = nl_cli_addr_parse(arg,rtnl_route_get_family(route));
- rtnl_route_nh_set_gateway(nh, addr);
+ if (rtnl_route_get_family(route) == AF_MPLS) {
+ addr = nl_cli_addr_parse(arg, 0);
+ rtnl_route_nh_set_via(nh, addr);
+ } else {
+ addr = nl_cli_addr_parse(arg,rtnl_route_get_family(route));
+ rtnl_route_nh_set_gateway(nh, addr);
+ }
+ nl_addr_put(addr);
+ break;
+
+ case NH_AS:
+ addr = nl_cli_addr_parse(arg,
+ rtnl_route_get_family(route));
+ rtnl_route_nh_set_newdst(nh, addr);
nl_addr_put(addr);
break;