diff options
| author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-04-02 13:47:10 +0000 |
|---|---|---|
| committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-04-02 13:47:10 +0000 |
| commit | c35a43b261f807fd85b8cc30306112eee9dd62ce (patch) | |
| tree | c5e2d3496f1549b560eed0e30642cd6a10e3bea8 /sys/net/route | |
| parent | 4aeb939ecf8b2b6913ae51d828416743bad812ab (diff) | |
Diffstat (limited to 'sys/net/route')
| -rw-r--r-- | sys/net/route/route_ctl.c | 14 | ||||
| -rw-r--r-- | sys/net/route/route_ctl.h | 6 |
2 files changed, 16 insertions, 4 deletions
diff --git a/sys/net/route/route_ctl.c b/sys/net/route/route_ctl.c index 755765869e84..db3728c3cd88 100644 --- a/sys/net/route/route_ctl.c +++ b/sys/net/route/route_ctl.c @@ -96,6 +96,8 @@ static int delete_route(struct rib_head *rnh, struct rtentry *rt, static int rt_delete_conditional(struct rib_head *rnh, struct rtentry *rt, int prio, rib_filter_f_t *cb, void *cbdata, struct rib_cmd_info *rc); +static bool fill_pxmask_family(int family, int plen, struct sockaddr *_dst, + struct sockaddr **pmask); static int get_prio_from_info(const struct rt_addrinfo *info); static int nhop_get_prio(const struct nhop_object *nh); @@ -391,6 +393,18 @@ lookup_prefix(struct rib_head *rnh, const struct rt_addrinfo *info, return (rt); } +const struct rtentry * +rib_lookup_prefix_plen(struct rib_head *rnh, struct sockaddr *dst, int plen, + struct route_nhop_data *rnd) +{ + union sockaddr_union mask_storage; + struct sockaddr *netmask = &mask_storage.sa; + + if (fill_pxmask_family(dst->sa_family, plen, dst, &netmask)) + return (lookup_prefix_bysa(rnh, dst, netmask, rnd)); + return (NULL); +} + static bool fill_pxmask_family(int family, int plen, struct sockaddr *_dst, struct sockaddr **pmask) diff --git a/sys/net/route/route_ctl.h b/sys/net/route/route_ctl.h index b65b64fcdaa0..7a4ed804feb7 100644 --- a/sys/net/route/route_ctl.h +++ b/sys/net/route/route_ctl.h @@ -123,11 +123,9 @@ struct nhop_object; struct nhgrp_object; struct ucred; -const struct rtentry *rib_lookup_prefix(uint32_t fibnum, int family, - const struct sockaddr *dst, const struct sockaddr *netmask, +const struct rtentry * +rib_lookup_prefix_plen(struct rib_head *rnh, struct sockaddr *dst, int plen, struct route_nhop_data *rnd); -const struct rtentry *rib_lookup_lpm(uint32_t fibnum, int family, - const struct sockaddr *dst, struct route_nhop_data *rnd); /* rtentry accessors */ bool rt_is_host(const struct rtentry *rt); |
