+
+ if (ret != NULL && (rt->rt_flags & RTF_DYNAMIC))
+ in6dynroutes++;
+
+ if (!verbose)
+ goto done;
+
+ if (ret != NULL) {
+ if (flags != rt->rt_flags) {
+ log(LOG_DEBUG, "%s: route to %s->%s->%s inserted, "
+ "oflags=%b, flags=%b\n", __func__,
+ dbuf, gbuf, (rt->rt_ifp != NULL) ?
+ rt->rt_ifp->if_xname : "", flags, RTF_BITS,
+ rt->rt_flags, RTF_BITS);
+ } else {
+ log(LOG_DEBUG, "%s: route to %s->%s->%s inserted, "
+ "flags=%b\n", __func__, dbuf, gbuf,
+ (rt->rt_ifp != NULL) ? rt->rt_ifp->if_xname : "",
+ rt->rt_flags, RTF_BITS);
+ }
+ } else {
+ log(LOG_DEBUG, "%s: unable to insert route to %s->%s->%s, "
+ "flags=%b, already exists\n", __func__, dbuf, gbuf,
+ (rt->rt_ifp != NULL) ? rt->rt_ifp->if_xname : "",
+ rt->rt_flags, RTF_BITS);
+ }
+done:
+ return (ret);
+}
+
+static struct radix_node *
+in6_deleteroute(void *v_arg, void *netmask_arg, struct radix_node_head *head)
+{
+ struct radix_node *rn;
+
+ lck_mtx_assert(rnh_lock, LCK_MTX_ASSERT_OWNED);
+
+ rn = rn_delete(v_arg, netmask_arg, head);
+ if (rn != NULL) {
+ struct rtentry *rt = (struct rtentry *)rn;
+
+ RT_LOCK(rt);
+ if (rt->rt_flags & RTF_DYNAMIC)
+ in6dynroutes--;
+ if (rt_verbose > 1) {
+ char dbuf[MAX_IPv6_STR_LEN], gbuf[MAX_IPv6_STR_LEN];
+
+ rt_str(rt, dbuf, sizeof (dbuf), gbuf, sizeof (gbuf));
+ log(LOG_DEBUG, "%s: route to %s->%s->%s deleted, "
+ "flags=%b\n", __func__, dbuf, gbuf,
+ (rt->rt_ifp != NULL) ? rt->rt_ifp->if_xname : "",
+ rt->rt_flags, RTF_BITS);
+ }
+ RT_UNLOCK(rt);
+ }
+ return (rn);