svn commit: r293315 - head/sys/netgraph/netflow

Alexander V. Chernikov melifaro at FreeBSD.org
Thu Jan 7 12:22:31 UTC 2016


Author: melifaro
Date: Thu Jan  7 12:22:29 2016
New Revision: 293315
URL: https://svnweb.freebsd.org/changeset/base/293315

Log:
  Do not use 'struct route_in6' inside hash6_insert().
  
  rin6 was used only as sockaddr_in6 storage. Make rtalloc1_fib()
    use on-stack sin6 and return rtenry directly, instead of doing
    useless work with 'struct route_in6'.

Modified:
  head/sys/netgraph/netflow/netflow.c

Modified: head/sys/netgraph/netflow/netflow.c
==============================================================================
--- head/sys/netgraph/netflow/netflow.c	Thu Jan  7 12:08:15 2016	(r293314)
+++ head/sys/netgraph/netflow/netflow.c	Thu Jan  7 12:22:29 2016	(r293315)
@@ -395,9 +395,8 @@ hash6_insert(priv_p priv, struct flow_ha
 	int plen, uint8_t flags, uint8_t tcp_flags)
 {
 	struct flow6_entry *fle6;
-	struct sockaddr_in6 *src, *dst;
+	struct sockaddr_in6 sin6;
 	struct rtentry *rt;
-	struct route_in6 rin6;
 
 	mtx_assert(&hsh6->mtx, MA_OWNED);
 
@@ -425,16 +424,14 @@ hash6_insert(priv_p priv, struct flow_ha
 	 * fill in out_ifx, dst_mask, nexthop, and dst_as in future releases.
 	 */
 	if ((flags & NG_NETFLOW_CONF_NODSTLOOKUP) == 0) {
-		bzero(&rin6, sizeof(struct route_in6));
-		dst = (struct sockaddr_in6 *)&rin6.ro_dst;
-		dst->sin6_len = sizeof(struct sockaddr_in6);
-		dst->sin6_family = AF_INET6;
-		dst->sin6_addr = r->dst.r_dst6;
+		bzero(&sin6, sizeof(struct sockaddr_in6));
+		sin6.sin6_len = sizeof(struct sockaddr_in6);
+		sin6.sin6_family = AF_INET6;
+		sin6.sin6_addr = r->dst.r_dst6;
 
-		rin6.ro_rt = rtalloc1_fib((struct sockaddr *)dst, 0, 0, r->fib);
+		rt = rtalloc1_fib((struct sockaddr *)&sin6, 0, 0, r->fib);
 
-		if (rin6.ro_rt != NULL) {
-			rt = rin6.ro_rt;
+		if (rt != NULL) {
 			fle6->f.fle_o_ifx = rt->rt_ifp->if_index;
 
 			if (rt->rt_flags & RTF_GATEWAY &&
@@ -453,17 +450,14 @@ hash6_insert(priv_p priv, struct flow_ha
 
 	if ((flags & NG_NETFLOW_CONF_NOSRCLOOKUP) == 0) {
 		/* Do route lookup on source address, to fill in src_mask. */
-		bzero(&rin6, sizeof(struct route_in6));
-		src = (struct sockaddr_in6 *)&rin6.ro_dst;
-		src->sin6_len = sizeof(struct sockaddr_in6);
-		src->sin6_family = AF_INET6;
-		src->sin6_addr = r->src.r_src6;
+		bzero(&sin6, sizeof(struct sockaddr_in6));
+		sin6.sin6_len = sizeof(struct sockaddr_in6);
+		sin6.sin6_family = AF_INET6;
+		sin6.sin6_addr = r->src.r_src6;
 
-		rin6.ro_rt = rtalloc1_fib((struct sockaddr *)src, 0, 0, r->fib);
-
-		if (rin6.ro_rt != NULL) {
-			rt = rin6.ro_rt;
+		rt = rtalloc1_fib((struct sockaddr *)&sin6, 0, 0, r->fib);
 
+		if (rt != NULL) {
 			if (rt_mask(rt))
 				fle6->f.src_mask = RT_MASK6(rt);
 			else


More information about the svn-src-head mailing list