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