aboutsummaryrefslogtreecommitdiff
path: root/sys/net/route
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-02 13:47:10 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-02 13:47:10 +0000
commitc35a43b261f807fd85b8cc30306112eee9dd62ce (patch)
treec5e2d3496f1549b560eed0e30642cd6a10e3bea8 /sys/net/route
parent4aeb939ecf8b2b6913ae51d828416743bad812ab (diff)
Diffstat (limited to 'sys/net/route')
-rw-r--r--sys/net/route/route_ctl.c14
-rw-r--r--sys/net/route/route_ctl.h6
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);