/*
- * Copyright (c) 2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2009 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
}
#endif /*IPSEC*/
m->m_pkthdr.socket_id = get_socket_id(in6p->in6p_socket);
+#if PKT_PRIORITY
+ if (soisbackground(in6p->in6p_socket))
+ m_prio_background(m);
+#endif /* PKT_PRIORITY */
error = ip6_output(m, in6p->in6p_outputopts, &in6p->in6p_route,
flags, in6p->in6p_moptions, NULL, 0);
+
+#if IFNET_ROUTE_REFCNT
+ /*
+ * Always discard the cached route for unconnected socket
+ * or if it is a multicast route.
+ */
+ if (in6p->in6p_route.ro_rt != NULL &&
+ ((in6p->in6p_route.ro_rt->rt_flags & RTF_MULTICAST) ||
+ in6p->in6p_socket == NULL ||
+ in6p->in6p_socket->so_state != SS_ISCONNECTED)) {
+ rtfree(in6p->in6p_route.ro_rt);
+ in6p->in6p_route.ro_rt = NULL;
+ }
+#endif /* IFNET_ROUTE_REFCNT */
break;
case AF_INET:
error = EAFNOSUPPORT;