Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions include/netlink/route/nexthop.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ extern int rtnl_route_nh_str2flags(const char *);
extern int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh,
struct nl_addr *addr,
uint8_t ttl);
extern struct nl_addr * rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *);
extern uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *);
#ifdef __cplusplus
}
#endif
Expand Down
8 changes: 0 additions & 8 deletions lib/route/nexthop.c
Original file line number Diff line number Diff line change
Expand Up @@ -344,10 +344,6 @@ int rtnl_route_nh_set_newdst(struct rtnl_nexthop *nh, struct nl_addr *addr)
{
struct nl_addr *old = nh->rtnh_newdst;

if (!nl_addr_valid(nl_addr_get_binary_addr(addr),
nl_addr_get_len(addr)))
return -NLE_INVAL;

if (addr) {
nh->rtnh_newdst = nl_addr_get(addr);
nh->ce_mask |= NH_ATTR_NEWDST;
Expand All @@ -371,10 +367,6 @@ int rtnl_route_nh_set_via(struct rtnl_nexthop *nh, struct nl_addr *addr)
{
struct nl_addr *old = nh->rtnh_via;

if (!nl_addr_valid(nl_addr_get_binary_addr(addr),
nl_addr_get_len(addr)))
return -NLE_INVAL;

if (addr) {
nh->rtnh_via = nl_addr_get(addr);
nh->ce_mask |= NH_ATTR_VIA;
Expand Down
32 changes: 28 additions & 4 deletions lib/route/nh_encap_mpls.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,6 @@ int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh,
if (!addr)
return -NLE_INVAL;

if (!nl_addr_valid(nl_addr_get_binary_addr(addr),
nl_addr_get_len(addr)))
return -NLE_INVAL;

rtnh_encap = calloc(1, sizeof(*rtnh_encap));
if (!rtnh_encap)
return -NLE_NOMEM;
Expand All @@ -132,3 +128,31 @@ int rtnl_route_nh_encap_mpls(struct rtnl_nexthop *nh,

return 0;
}

struct nl_addr *rtnl_route_nh_get_encap_mpls_dst(struct rtnl_nexthop *nh)
{
struct mpls_iptunnel_encap *mpls_encap;

if (!nh->rtnh_encap || nh->rtnh_encap->ops->encap_type != LWTUNNEL_ENCAP_MPLS)
return NULL;

mpls_encap = (struct mpls_iptunnel_encap *)nh->rtnh_encap->priv;
if (!mpls_encap)
return NULL;

return mpls_encap->dst;
}

uint8_t rtnl_route_nh_get_encap_mpls_ttl(struct rtnl_nexthop *nh)
{
struct mpls_iptunnel_encap *mpls_encap;

if (!nh->rtnh_encap || nh->rtnh_encap->ops->encap_type != LWTUNNEL_ENCAP_MPLS)
return 0;

mpls_encap = (struct mpls_iptunnel_encap *)nh->rtnh_encap->priv;
if (!mpls_encap)
return 0;

return mpls_encap->ttl;
}
2 changes: 2 additions & 0 deletions libnl-route-3.sym
Original file line number Diff line number Diff line change
Expand Up @@ -1127,6 +1127,8 @@ global:
rtnl_qdisc_mqprio_set_priomap;
rtnl_qdisc_mqprio_set_queue;
rtnl_qdisc_mqprio_set_shaper;
rtnl_route_nh_get_encap_mpls_dst;
rtnl_route_nh_get_encap_mpls_ttl;
rtnl_rule_get_dport;
rtnl_rule_get_ipproto;
rtnl_rule_get_protocol;
Expand Down