summaryrefslogtreecommitdiffstats
path: root/sys/netinet/in.c
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>1996-03-15 17:08:07 +0000
committerfenner <fenner@FreeBSD.org>1996-03-15 17:08:07 +0000
commit7eae8f5c38e62f3e7ad9cbae40e24d35b91382ef (patch)
treef7e74e8db51ee3c8a8e6539a1f4a285d25149870 /sys/netinet/in.c
parent4bc23fada7ceabb4bc4e4a493c6bb8bd570304b3 (diff)
downloadFreeBSD-src-7eae8f5c38e62f3e7ad9cbae40e24d35b91382ef.zip
FreeBSD-src-7eae8f5c38e62f3e7ad9cbae40e24d35b91382ef.tar.gz
Allow SIOCGIFBRDADDR and SIOCGIFNETMASK to return information about
aliases, if the alias address was passed in the struct ifreq. Default to first address on the list, for backwards compatibility.
Diffstat (limited to 'sys/netinet/in.c')
-rw-r--r--sys/netinet/in.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index fb49a5c..7455b6a 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)in.c 8.4 (Berkeley) 1/9/95
- * $Id: in.c,v 1.21 1996/01/08 20:59:06 guido Exp $
+ * $Id: in.c,v 1.22 1996/03/11 15:13:12 davidg Exp $
*/
#include <sys/param.h>
@@ -155,7 +155,7 @@ in_control(so, cmd, data, ifp)
register struct ifnet *ifp;
{
register struct ifreq *ifr = (struct ifreq *)data;
- register struct in_ifaddr *ia = 0;
+ register struct in_ifaddr *ia = 0, *iap;
register struct ifaddr *ifa;
struct in_ifaddr *oia;
struct in_aliasreq *ifra = (struct in_aliasreq *)data;
@@ -166,11 +166,23 @@ in_control(so, cmd, data, ifp)
/*
* Find address for this interface, if it exists.
+ *
+ * If an alias address was specified, find that one instead of
+ * the first one on the interface.
*/
if (ifp)
- for (ia = in_ifaddr; ia; ia = ia->ia_next)
- if (ia->ia_ifp == ifp)
- break;
+ for (iap = in_ifaddr; iap; iap = iap->ia_next)
+ if (iap->ia_ifp == ifp) {
+ if (((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr.s_addr ==
+ iap->ia_addr.sin_addr.s_addr) {
+ ia = iap;
+ break;
+ } else if (ia == NULL) {
+ ia = iap;
+ if (ifr->ifr_addr.sa_family != AF_INET)
+ break;
+ }
+ }
switch (cmd) {
OpenPOWER on IntegriCloud