summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/netinet/in_var.h19
-rw-r--r--sys/netinet/ip_output.c16
2 files changed, 12 insertions, 23 deletions
diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h
index e76cdba5f71..5f0b1da06ef 100644
--- a/sys/netinet/in_var.h
+++ b/sys/netinet/in_var.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: in_var.h,v 1.28 2013/11/21 16:34:33 mikeb Exp $ */
+/* $OpenBSD: in_var.h,v 1.29 2013/11/27 08:37:08 mpi Exp $ */
/* $NetBSD: in_var.h,v 1.16 1996/02/13 23:42:15 christos Exp $ */
/*
@@ -82,23 +82,6 @@ TAILQ_HEAD(in_ifaddrhead, in_ifaddr);
extern struct in_ifaddrhead in_ifaddr;
/*
- * Macro for finding the interface (ifnet structure) corresponding to one
- * of our IP addresses.
- */
-#define INADDR_TO_IFP(addr, ifp, rtableid) \
- /* struct in_addr addr; */ \
- /* struct ifnet *ifp; */ \
-do { \
- struct in_ifaddr *ia; \
- \
- TAILQ_FOREACH(ia, &in_ifaddr, ia_list) \
- if (ia->ia_ifp->if_rdomain == rtable_l2(rtableid) && \
- ia->ia_addr.sin_addr.s_addr == (addr).s_addr) \
- break; \
- (ifp) = (ia == NULL) ? NULL : ia->ia_ifp; \
-} while (/* CONSTCOND */ 0)
-
-/*
* Macro for finding the internet address structure (in_ifaddr) corresponding
* to a given interface (ifnet structure).
*/
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index 9a2372f22e1..2f0f519c0fb 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ip_output.c,v 1.250 2013/10/25 18:44:36 lteo Exp $ */
+/* $OpenBSD: ip_output.c,v 1.251 2013/11/27 08:37:08 mpi Exp $ */
/* $NetBSD: ip_output.c,v 1.28 1996/02/13 23:43:07 christos Exp $ */
/*
@@ -1702,6 +1702,7 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
u_char loop;
int i;
struct in_addr addr;
+ struct in_ifaddr *ia;
struct ip_mreq *mreq;
struct ifnet *ifp;
struct ip_moptions *imo = *imop;
@@ -1753,7 +1754,9 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
* IP address. Find the interface and confirm that
* it supports multicasting.
*/
- INADDR_TO_IFP(addr, ifp, rtableid);
+ ia = in_iawithaddr(addr, rtableid);
+ if (ia)
+ ifp = ia->ia_ifp;
if (ifp == NULL || (ifp->if_flags & IFF_MULTICAST) == 0) {
error = EADDRNOTAVAIL;
break;
@@ -1820,7 +1823,9 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
ifp = ro.ro_rt->rt_ifp;
rtfree(ro.ro_rt);
} else {
- INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid);
+ ia = in_iawithaddr(mreq->imr_interface, rtableid);
+ if (ia)
+ ifp = ia->ia_ifp;
}
/*
* See if we found an interface, and confirm that it
@@ -1906,11 +1911,12 @@ ip_setmoptions(int optname, struct ip_moptions **imop, struct mbuf *m,
if (mreq->imr_interface.s_addr == INADDR_ANY)
ifp = NULL;
else {
- INADDR_TO_IFP(mreq->imr_interface, ifp, rtableid);
- if (ifp == NULL) {
+ ia = in_iawithaddr(mreq->imr_interface, rtableid);
+ if (ia == NULL) {
error = EADDRNOTAVAIL;
break;
}
+ ifp = ia->ia_ifp;
}
/*
* Find the membership in the membership array.