summaryrefslogtreecommitdiffstats
path: root/sys/net/route.h
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-11-30 05:51:14 +0000
committermelifaro <melifaro@FreeBSD.org>2015-11-30 05:51:14 +0000
commite1984564835422629dc73f3551f3be70602c551a (patch)
tree0be60b29fa72a36767c89b7639430ba4896bcf2a /sys/net/route.h
parent48efdd4beccfc6adef1e3c7e8cb51a875a76a814 (diff)
downloadFreeBSD-src-e1984564835422629dc73f3551f3be70602c551a.zip
FreeBSD-src-e1984564835422629dc73f3551f3be70602c551a.tar.gz
Add new rt_foreach_fib_walk_del() function for deleting route entries
by filter function instead of picking into routing table details in each consumer. Remove now-unused rt_expunge() (eliminating last external RTF_RNH_LOCKED user). This simplifies future nexthops/mulitipath changes and rtrequest1_fib() locking refactoring. Actual changes: Add "rt_chain" field to permit rte grouping while doing batched delete from routing table (thus growing rte 200->208 on amd64). Add "rti_filter" / "rti_filterdata" / "rti_spare" fields to rt_addrinfo to pass filter function to various routing subsystems in standard way. Convert all rt_expunge() customers to new rt_addinfo-based api and eliminate rt_expunge().
Diffstat (limited to 'sys/net/route.h')
-rw-r--r--sys/net/route.h21
1 files changed, 14 insertions, 7 deletions
diff --git a/sys/net/route.h b/sys/net/route.h
index e62aaa6..ffbcb3c 100644
--- a/sys/net/route.h
+++ b/sys/net/route.h
@@ -128,6 +128,7 @@ struct rtentry {
#define rt_endzero rt_pksent
counter_u64_t rt_pksent; /* packets sent using this route */
struct mtx rt_mtx; /* mutex for routing entry */
+ struct rtentry *rt_chain; /* pointer to next rtentry to delete */
};
#endif /* _KERNEL || _WANT_RTENTRY */
@@ -259,14 +260,19 @@ struct rt_msghdr {
#define RTAX_BRD 7 /* for NEWADDR, broadcast or p-p dest addr */
#define RTAX_MAX 8 /* size of array to allocate */
+typedef int rt_filter_f_t(const struct rtentry *, void *);
+
struct rt_addrinfo {
- int rti_addrs;
- struct sockaddr *rti_info[RTAX_MAX];
- int rti_flags;
- struct ifaddr *rti_ifa;
- struct ifnet *rti_ifp;
- u_long rti_mflags;
- struct rt_metrics *rti_rmx;
+ int rti_addrs; /* Route RTF_ flags */
+ int rti_flags; /* Route RTF_ flags */
+ struct sockaddr *rti_info[RTAX_MAX]; /* Sockaddr data */
+ struct ifaddr *rti_ifa; /* value of rt_ifa addr */
+ struct ifnet *rti_ifp; /* route interface */
+ rt_filter_f_t *rti_filter; /* filter function */
+ void *rti_filterdata; /* filter paramenters */
+ u_long rti_mflags; /* metrics RTV_ flags */
+ u_long rti_spare; /* Will be used for fib */
+ struct rt_metrics *rti_rmx; /* Pointer to route metrics */
};
/*
@@ -383,6 +389,7 @@ void rt_updatemtu(struct ifnet *);
typedef int rt_walktree_f_t(struct rtentry *, void *);
typedef void rt_setwarg_t(struct radix_node_head *, uint32_t, int, void *);
void rt_foreach_fib_walk(int af, rt_setwarg_t *, rt_walktree_f_t *, void *);
+void rt_foreach_fib_walk_del(int af, rt_filter_f_t *filter_f, void *arg);
void rt_flushifroutes(struct ifnet *ifp);
/* XXX MRT COMPAT VERSIONS THAT SET UNIVERSE to 0 */
OpenPOWER on IntegriCloud