Use ifreq_getaddr(). Pass a sockaddr instead of ifreq where sockaddr

will suffice.
This commit is contained in:
dyoung 2007-09-01 03:07:24 +00:00
parent 822a96ea64
commit aade2db1a7
1 changed files with 12 additions and 16 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: if_agrsubr.c,v 1.7 2007/08/02 12:37:47 yamt Exp $ */
/* $NetBSD: if_agrsubr.c,v 1.8 2007/09/01 03:07:24 dyoung Exp $ */
/*-
* Copyright (c)2005 YAMAMOTO Takashi,
@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: if_agrsubr.c,v 1.7 2007/08/02 12:37:47 yamt Exp $");
__KERNEL_RCSID(0, "$NetBSD: if_agrsubr.c,v 1.8 2007/09/01 03:07:24 dyoung Exp $");
#include "bpfilter.h"
#include "opt_inet.h"
@ -52,14 +52,14 @@ struct agr_mc_entry {
};
static struct agr_mc_entry *agr_mc_lookup(struct agr_multiaddrs *,
const struct ifreq *);
const struct sockaddr *);
static int agrport_mc_add_callback(struct agr_port *, void *);
static int agrport_mc_del_callback(struct agr_port *, void *);
static int agrmc_mc_add_callback(struct agr_mc_entry *, void *);
static int agrmc_mc_del_callback(struct agr_mc_entry *, void *);
static int agr_mc_add(struct agr_multiaddrs *, const struct ifreq *);
static int agr_mc_del(struct agr_multiaddrs *, const struct ifreq *);
static int agr_mc_add(struct agr_multiaddrs *, const struct sockaddr *);
static int agr_mc_del(struct agr_multiaddrs *, const struct sockaddr *);
int
agr_mc_purgeall(struct agr_softc *sc, struct agr_multiaddrs *ama)
@ -93,11 +93,9 @@ agr_mc_init(struct agr_softc *sc, struct agr_multiaddrs *ama)
/* ==================== */
static struct agr_mc_entry *
agr_mc_lookup(struct agr_multiaddrs *ama, const struct ifreq *ifr)
agr_mc_lookup(struct agr_multiaddrs *ama, const struct sockaddr *sa)
{
struct agr_mc_entry *ame;
const struct sockaddr *sa;
sa = &ifr->ifr_addr;
TAILQ_FOREACH(ame, &ama->ama_addrs, ame_q) {
if (!memcmp(&ame->ame_ifr.ifr_ss, sa, sa->sa_len))
@ -129,12 +127,11 @@ agr_mc_foreach(struct agr_multiaddrs *ama,
}
static int
agr_mc_add(struct agr_multiaddrs *ama, const struct ifreq *ifr)
agr_mc_add(struct agr_multiaddrs *ama, const struct sockaddr *sa)
{
struct agr_mc_entry *ame;
const struct sockaddr *sa;
ame = agr_mc_lookup(ama, ifr);
ame = agr_mc_lookup(ama, sa);
if (ame) {
ame->ame_refcnt++;
return 0;
@ -144,7 +141,6 @@ agr_mc_add(struct agr_multiaddrs *ama, const struct ifreq *ifr)
if (ame == NULL)
return ENOMEM;
sa = &ifr->ifr_addr;
memcpy(&ame->ame_ifr.ifr_ss, sa, sa->sa_len);
ame->ame_refcnt = 1;
TAILQ_INSERT_TAIL(&ama->ama_addrs, ame, ame_q);
@ -153,11 +149,11 @@ agr_mc_add(struct agr_multiaddrs *ama, const struct ifreq *ifr)
}
static int
agr_mc_del(struct agr_multiaddrs *ama, const struct ifreq *ifr)
agr_mc_del(struct agr_multiaddrs *ama, const struct sockaddr *sa)
{
struct agr_mc_entry *ame;
ame = agr_mc_lookup(ama, ifr);
ame = agr_mc_lookup(ama, sa);
if (ame == NULL)
return ENOENT;
@ -245,9 +241,9 @@ agr_configmulti_ifreq(struct agr_softc *sc, struct agr_multiaddrs *ama,
int error;
if (add)
error = agr_mc_add(ama, ifr);
error = agr_mc_add(ama, ifreq_getaddr(SIOCADDMULTI, ifr));
else
error = agr_mc_del(ama, ifr);
error = agr_mc_del(ama, ifreq_getaddr(SIOCDELMULTI, ifr));
if (error != ENETRESET)
return error;