Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F116021581
D36197.id109321.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
5 KB
Referenced Files
None
Subscribers
None
D36197.id109321.diff
View Options
Index: sys/net/route.h
===================================================================
--- sys/net/route.h
+++ sys/net/route.h
@@ -440,9 +440,6 @@
* but this will change..
*/
int rtioctl_fib(u_long, caddr_t, u_int);
-int rib_lookup_info(uint32_t, const struct sockaddr *, uint32_t, uint32_t,
- struct rt_addrinfo *);
-void rib_free_info(struct rt_addrinfo *info);
/* New API */
void rib_flush_routes_family(int family);
Index: sys/net/route.c
===================================================================
--- sys/net/route.c
+++ sys/net/route.c
@@ -317,151 +317,6 @@
return (ifa);
}
-/*
- * Copy most of @rt data into @info.
- *
- * If @flags contains NHR_COPY, copies dst,netmask and gw to the
- * pointers specified by @info structure. Assume such pointers
- * are zeroed sockaddr-like structures with sa_len field initialized
- * to reflect size of the provided buffer. if no NHR_COPY is specified,
- * point dst,netmask and gw @info fields to appropriate @rt values.
- *
- * if @flags contains NHR_REF, do refcouting on rt_ifp and rt_ifa.
- *
- * Returns 0 on success.
- */
-static int
-rt_exportinfo(struct rtentry *rt, struct nhop_object *nh,
- struct rt_addrinfo *info, int flags)
-{
- struct rt_metrics *rmx;
- struct sockaddr *src, *dst;
- int sa_len;
-
- if (flags & NHR_COPY) {
- /* Copy destination if dst is non-zero */
- src = rt_key(rt);
- dst = info->rti_info[RTAX_DST];
- sa_len = src->sa_len;
- if (dst != NULL) {
- if (src->sa_len > dst->sa_len)
- return (ENOMEM);
- memcpy(dst, src, src->sa_len);
- info->rti_addrs |= RTA_DST;
- }
-
- /* Copy mask if set && dst is non-zero */
- src = rt_mask(rt);
- dst = info->rti_info[RTAX_NETMASK];
- if (src != NULL && dst != NULL) {
- /*
- * Radix stores different value in sa_len,
- * assume rt_mask() to have the same length
- * as rt_key()
- */
- if (sa_len > dst->sa_len)
- return (ENOMEM);
- memcpy(dst, src, src->sa_len);
- info->rti_addrs |= RTA_NETMASK;
- }
-
- /* Copy gateway is set && dst is non-zero */
- src = &nh->gw_sa;
- dst = info->rti_info[RTAX_GATEWAY];
- if ((nhop_get_rtflags(nh) & RTF_GATEWAY) &&
- src != NULL && dst != NULL) {
- if (src->sa_len > dst->sa_len)
- return (ENOMEM);
- memcpy(dst, src, src->sa_len);
- info->rti_addrs |= RTA_GATEWAY;
- }
- } else {
- info->rti_info[RTAX_DST] = rt_key(rt);
- info->rti_addrs |= RTA_DST;
- if (rt_mask(rt) != NULL) {
- info->rti_info[RTAX_NETMASK] = rt_mask(rt);
- info->rti_addrs |= RTA_NETMASK;
- }
- if (nhop_get_rtflags(nh) & RTF_GATEWAY) {
- info->rti_info[RTAX_GATEWAY] = &nh->gw_sa;
- info->rti_addrs |= RTA_GATEWAY;
- }
- }
-
- rmx = info->rti_rmx;
- if (rmx != NULL) {
- info->rti_mflags |= RTV_MTU;
- rmx->rmx_mtu = nh->nh_mtu;
- }
-
- info->rti_flags = rt->rte_flags | nhop_get_rtflags(nh);
- info->rti_ifp = nh->nh_ifp;
- info->rti_ifa = nh->nh_ifa;
- if (flags & NHR_REF) {
- if_ref(info->rti_ifp);
- ifa_ref(info->rti_ifa);
- }
-
- return (0);
-}
-
-/*
- * Lookups up route entry for @dst in RIB database for fib @fibnum.
- * Exports entry data to @info using rt_exportinfo().
- *
- * If @flags contains NHR_REF, refcouting is performed on rt_ifp and rt_ifa.
- * All references can be released later by calling rib_free_info().
- *
- * Returns 0 on success.
- * Returns ENOENT for lookup failure, ENOMEM for export failure.
- */
-int
-rib_lookup_info(uint32_t fibnum, const struct sockaddr *dst, uint32_t flags,
- uint32_t flowid, struct rt_addrinfo *info)
-{
- RIB_RLOCK_TRACKER;
- struct rib_head *rh;
- struct radix_node *rn;
- struct rtentry *rt;
- struct nhop_object *nh;
- int error;
-
- KASSERT((fibnum < rt_numfibs), ("rib_lookup_rte: bad fibnum"));
- rh = rt_tables_get_rnh(fibnum, dst->sa_family);
- if (rh == NULL)
- return (ENOENT);
-
- RIB_RLOCK(rh);
- rn = rh->rnh_matchaddr(__DECONST(void *, dst), &rh->head);
- if (rn != NULL && ((rn->rn_flags & RNF_ROOT) == 0)) {
- rt = RNTORT(rn);
- nh = nhop_select(rt->rt_nhop, flowid);
- /* Ensure route & ifp is UP */
- if (RT_LINK_IS_UP(nh->nh_ifp)) {
- flags = (flags & NHR_REF) | NHR_COPY;
- error = rt_exportinfo(rt, nh, info, flags);
- RIB_RUNLOCK(rh);
-
- return (error);
- }
- }
- RIB_RUNLOCK(rh);
-
- return (ENOENT);
-}
-
-/*
- * Releases all references acquired by rib_lookup_info() when
- * called with NHR_REF flags.
- */
-void
-rib_free_info(struct rt_addrinfo *info)
-{
-
- ifa_free(info->rti_ifa);
- if_rele(info->rti_ifp);
-}
-
/*
* Delete Routes for a Network Interface
*
Index: sys/net/rtsock.c
===================================================================
--- sys/net/rtsock.c
+++ sys/net/rtsock.c
@@ -630,16 +630,7 @@
*/
if (info->rti_info[RTAX_GATEWAY] != NULL &&
info->rti_info[RTAX_GATEWAY]->sa_family != AF_LINK) {
- struct rt_addrinfo ginfo;
- struct sockaddr *gdst;
- struct sockaddr_storage ss;
-
- bzero(&ginfo, sizeof(ginfo));
- bzero(&ss, sizeof(ss));
- ss.ss_len = sizeof(ss);
-
- ginfo.rti_info[RTAX_GATEWAY] = (struct sockaddr *)&ss;
- gdst = info->rti_info[RTAX_GATEWAY];
+ struct nhop_object *nh;
/*
* A host route through the loopback interface is
@@ -651,13 +642,11 @@
* AF_LINK sa_family type of the gateway, and the
* rt_ifp has the IFF_LOOPBACK flag set.
*/
- if (rib_lookup_info(fibnum, gdst, NHR_REF, 0, &ginfo) == 0) {
- if (ss.ss_family == AF_LINK &&
- ginfo.rti_ifp->if_flags & IFF_LOOPBACK) {
+ nh = rib_lookup(fibnum, info->rti_info[RTAX_GATEWAY], NHR_NONE, 0);
+ if (nh != NULL && nh->gw_sa.sa_family == AF_LINK &&
+ nh->nh_ifp->if_flags & IFF_LOOPBACK) {
info->rti_flags &= ~RTF_GATEWAY;
info->rti_flags |= RTF_GWFLAG_COMPAT;
- }
- rib_free_info(&ginfo);
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, May 2, 5:42 PM (2 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17908925
Default Alt Text
D36197.id109321.diff (5 KB)
Attached To
Mode
D36197: routing: retire rib_lookup_info()
Attached
Detach File
Event Timeline
Log In to Comment