Module Name: src Committed By: dyoung Date: Wed Oct 19 01:52:22 UTC 2011
Modified Files: src/sys/netinet: in.c ip_carp.c ip_mroute.c Log Message: Use if_addr_init() and if_mcast_op() instead of ifp->if_ioctl(). To generate a diff of this commit: cvs rdiff -u -r1.138 -r1.139 src/sys/netinet/in.c cvs rdiff -u -r1.45 -r1.46 src/sys/netinet/ip_carp.c cvs rdiff -u -r1.120 -r1.121 src/sys/netinet/ip_mroute.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/netinet/in.c diff -u src/sys/netinet/in.c:1.138 src/sys/netinet/in.c:1.139 --- src/sys/netinet/in.c:1.138 Sat May 15 05:02:46 2010 +++ src/sys/netinet/in.c Wed Oct 19 01:52:22 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: in.c,v 1.138 2010/05/15 05:02:46 oki Exp $ */ +/* $NetBSD: in.c,v 1.139 2011/10/19 01:52:22 dyoung Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.138 2010/05/15 05:02:46 oki Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.139 2011/10/19 01:52:22 dyoung Exp $"); #include "opt_inet.h" #include "opt_inet_conf.h" @@ -454,7 +454,7 @@ in_control(struct socket *so, u_long cmd return (EINVAL); oldaddr = ia->ia_dstaddr; ia->ia_dstaddr = *satocsin(ifreq_getdstaddr(cmd, ifr)); - if ((error = (*ifp->if_ioctl)(ifp, SIOCSIFDSTADDR, ia)) != 0) { + if ((error = if_addr_init(ifp, &ia->ia_ifa, false)) != 0) { ia->ia_dstaddr = oldaddr; return error; } @@ -813,7 +813,7 @@ in_ifinit(struct ifnet *ifp, struct in_i * if this is its first address, * and to validate the address if necessary. */ - if ((error = (*ifp->if_ioctl)(ifp, SIOCINITIFADDR, ia)) != 0) + if ((error = if_addr_init(ifp, &ia->ia_ifa, true)) != 0) goto bad; splx(s); if (scrub) { @@ -1045,7 +1045,6 @@ in_addmulti(struct in_addr *ap, struct i { struct sockaddr_in sin; struct in_multi *inm; - struct ifreq ifr; int s = splsoftnet(); /* @@ -1078,8 +1077,7 @@ in_addmulti(struct in_addr *ap, struct i * filter appropriately for the new address. */ sockaddr_in_init(&sin, ap, 0); - ifreq_setaddr(SIOCADDMULTI, &ifr, sintosa(&sin)); - if ((*ifp->if_ioctl)(ifp, SIOCADDMULTI, &ifr) != 0) { + if (if_mcast_op(ifp, SIOCADDMULTI, sintosa(&sin)) != 0) { LIST_REMOVE(inm, inm_list); pool_put(&inmulti_pool, inm); splx(s); @@ -1107,7 +1105,6 @@ void in_delmulti(struct in_multi *inm) { struct sockaddr_in sin; - struct ifreq ifr; int s = splsoftnet(); if (--inm->inm_refcount == 0) { @@ -1126,8 +1123,7 @@ in_delmulti(struct in_multi *inm) * filter. */ sockaddr_in_init(&sin, &inm->inm_addr, 0); - ifreq_setaddr(SIOCDELMULTI, &ifr, sintosa(&sin)); - (*inm->inm_ifp->if_ioctl)(inm->inm_ifp, SIOCDELMULTI, &ifr); + if_mcast_op(inm->inm_ifp, SIOCDELMULTI, sintosa(&sin)); pool_put(&inmulti_pool, inm); } splx(s); Index: src/sys/netinet/ip_carp.c diff -u src/sys/netinet/ip_carp.c:1.45 src/sys/netinet/ip_carp.c:1.46 --- src/sys/netinet/ip_carp.c:1.45 Sun Jul 17 20:54:53 2011 +++ src/sys/netinet/ip_carp.c Wed Oct 19 01:52:22 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_carp.c,v 1.45 2011/07/17 20:54:53 joerg Exp $ */ +/* $NetBSD: ip_carp.c,v 1.46 2011/10/19 01:52:22 dyoung Exp $ */ /* $OpenBSD: ip_carp.c,v 1.113 2005/11/04 08:11:54 mcbride Exp $ */ /* @@ -30,7 +30,7 @@ #include "opt_inet.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.45 2011/07/17 20:54:53 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_carp.c,v 1.46 2011/10/19 01:52:22 dyoung Exp $"); /* * TODO: @@ -2151,7 +2151,7 @@ carp_ether_addmulti(struct carp_softc *s memcpy(&mc->mc_addr, sa, sa->sa_len); LIST_INSERT_HEAD(&sc->carp_mc_listhead, mc, mc_entries); - error = (*ifp->if_ioctl)(ifp, SIOCADDMULTI, ifr); + error = if_mcast_op(ifp, SIOCADDMULTI, sa); if (error != 0) goto ioctl_failed; @@ -2203,7 +2203,7 @@ carp_ether_delmulti(struct carp_softc *s return (error); /* We no longer use this multicast address. Tell parent so. */ - error = (*ifp->if_ioctl)(ifp, SIOCDELMULTI, ifr); + error = if_mcast_op(ifp, SIOCDELMULTI, sa); if (error == 0) { /* And forget about this address. */ LIST_REMOVE(mc, mc_entries); @@ -2222,22 +2222,12 @@ carp_ether_purgemulti(struct carp_softc { struct ifnet *ifp = sc->sc_carpdev; /* Parent. */ struct carp_mc_entry *mc; - union { - struct ifreq ifreq; - struct { - char ifr_name[IFNAMSIZ]; - struct sockaddr_storage ifr_ss; - } ifreq_storage; - } u; - struct ifreq *ifr = &u.ifreq; if (ifp == NULL) return; - memcpy(ifr->ifr_name, ifp->if_xname, IFNAMSIZ); while ((mc = LIST_FIRST(&sc->carp_mc_listhead)) != NULL) { - memcpy(&ifr->ifr_addr, &mc->mc_addr, mc->mc_addr.ss_len); - (void)(*ifp->if_ioctl)(ifp, SIOCDELMULTI, ifr); + (void)if_mcast_op(ifp, SIOCDELMULTI, sstosa(&mc->mc_addr)); LIST_REMOVE(mc, mc_entries); free(mc, M_DEVBUF); } Index: src/sys/netinet/ip_mroute.c diff -u src/sys/netinet/ip_mroute.c:1.120 src/sys/netinet/ip_mroute.c:1.121 --- src/sys/netinet/ip_mroute.c:1.120 Wed Aug 31 18:31:03 2011 +++ src/sys/netinet/ip_mroute.c Wed Oct 19 01:52:22 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_mroute.c,v 1.120 2011/08/31 18:31:03 plunky Exp $ */ +/* $NetBSD: ip_mroute.c,v 1.121 2011/10/19 01:52:22 dyoung Exp $ */ /* * Copyright (c) 1992, 1993 @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.120 2011/08/31 18:31:03 plunky Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.121 2011/10/19 01:52:22 dyoung Exp $"); #include "opt_inet.h" #include "opt_ipsec.h" @@ -787,7 +787,6 @@ add_vif(struct vifctl *vifcp) struct vif *vifp; struct ifaddr *ifa; struct ifnet *ifp; - struct ifreq ifr; int error, s; struct sockaddr_in sin; @@ -867,8 +866,7 @@ add_vif(struct vifctl *vifcp) /* Enable promiscuous reception of all IP multicasts. */ sockaddr_in_init(&sin, &zeroin_addr, 0); - ifreq_setaddr(SIOCADDMULTI, &ifr, sintosa(&sin)); - error = (*ifp->if_ioctl)(ifp, SIOCADDMULTI, &ifr); + error = if_mcast_op(ifp, SIOCADDMULTI, sintosa(&sin)); if (error) return (error); } @@ -926,7 +924,6 @@ reset_vif(struct vif *vifp) { struct mbuf *m, *n; struct ifnet *ifp; - struct ifreq ifr; struct sockaddr_in sin; callout_stop(&vifp->v_repq_ch); @@ -951,9 +948,8 @@ reset_vif(struct vif *vifp) #endif } else { sockaddr_in_init(&sin, &zeroin_addr, 0); - ifreq_setaddr(SIOCDELMULTI, &ifr, sintosa(&sin)); ifp = vifp->v_ifp; - (*ifp->if_ioctl)(ifp, SIOCDELMULTI, &ifr); + if_mcast_op(ifp, SIOCDELMULTI, sintosa(&sin)); } memset((void *)vifp, 0, sizeof(*vifp)); }