Module Name:    src
Committed By:   christos
Date:           Thu Apr  7 21:41:02 UTC 2016

Modified Files:
        src/sys/net: rtsock.c

Log Message:
Use sockaddr_dl_init


To generate a diff of this commit:
cvs rdiff -u -r1.180 -r1.181 src/sys/net/rtsock.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/rtsock.c
diff -u src/sys/net/rtsock.c:1.180 src/sys/net/rtsock.c:1.181
--- src/sys/net/rtsock.c:1.180	Wed Apr  6 13:34:33 2016
+++ src/sys/net/rtsock.c	Thu Apr  7 17:41:02 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: rtsock.c,v 1.180 2016/04/06 17:34:33 christos Exp $	*/
+/*	$NetBSD: rtsock.c,v 1.181 2016/04/07 21:41:02 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.180 2016/04/06 17:34:33 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.181 2016/04/07 21:41:02 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -448,16 +448,10 @@ static void
 route_get_sdl(const struct ifnet *ifp, const struct sockaddr *dst,
     struct sockaddr_dl *sdl, int *flags)
 {
-	struct llentry *la = NULL;
+	struct llentry *la;
 
 	KASSERT(ifp != NULL);
 
-	memset(sdl, 0, sizeof(*sdl));
-	sdl->sdl_family = AF_LINK;
-	sdl->sdl_len = sizeof(*sdl);
-	sdl->sdl_index = ifp->if_index;
-	sdl->sdl_type = ifp->if_type;
-
 	IF_AFDATA_RLOCK(ifp);
 	switch (dst->sa_family) {
 	case AF_INET:
@@ -467,19 +461,18 @@ route_get_sdl(const struct ifnet *ifp, c
 		la = lla_lookup(LLTABLE6(ifp), 0, dst);
 		break;
 	default:
+		la = NULL;
 		KASSERTMSG(0, "Invalid AF=%d\n", dst->sa_family);
 		break;
 	}
 	IF_AFDATA_RUNLOCK(ifp);
 
-	if (LLE_IS_VALID(la) &&
-	    (la->la_flags & LLE_VALID) == LLE_VALID) {
-		sdl->sdl_alen = ifp->if_addrlen;
-		memcpy(LLADDR(sdl), &la->ll_addr, ifp->if_addrlen);
-	} else {
-		sdl->sdl_alen = 0;
-		memset(LLADDR(sdl), 0, ifp->if_addrlen);
-	}
+	void *a = (LLE_IS_VALID(la) && (la->la_flags & LLE_VALID) == LLE_VALID)
+	    ? &la->ll_addr : NULL;
+
+	a = sockaddr_dl_init(sdl, sizeof(*sdl), ifp->if_index, ifp->if_type,
+		NULL, 0, a, ifp->if_addrlen);
+	KASSERT(a != NULL);
 
 	if (la != NULL) {
 		*flags = la->la_flags;
@@ -1035,6 +1028,7 @@ COMPATNAME(rt_msg1)(int type, struct rt_
 	rtm->rtm_msglen = len;
 	rtm->rtm_version = RTM_XVERSION;
 	rtm->rtm_type = type;
+printf("%s: type=%#x len=%d\n", __func__, type, len);
 	return m;
 out:
 	m_freem(m);

Reply via email to