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

Reply via email to