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);