Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Jul 2026 21:55:26 +0000
From:      Bruce M Simpson <bms@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: e52655a93909 - main - netinet: Promote IFP_TO_IA() from macro to function in_ifprimaryaddr().
Message-ID:  <6a67d3ce.23104.20182398@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by bms:

URL: https://cgit.FreeBSD.org/src/commit/?id=e52655a939099402bab7e603ced58b17af106e23

commit e52655a939099402bab7e603ced58b17af106e23
Author:     Bruce M Simpson <bms@FreeBSD.org>
AuthorDate: 2026-02-18 08:29:58 +0000
Commit:     Bruce M Simpson <bms@FreeBSD.org>
CommitDate: 2026-07-27 21:55:12 +0000

    netinet: Promote IFP_TO_IA() from macro to function in_ifprimaryaddr().
    
    in_ifprimaryaddr() exists only to support IPv4 multicast usage. Since the
    adoption of epoch tracking, ifa_ref() is no longer required in its body;
    that was originally introduced by rwatson in 2009.
    
    We could not use __deprecated1() from <sys/cdefs.h> anyway, as
    IFP_TO_IA() is a macro, not a function.
    
    Approved by:    glebius (2026-02-26)
    Reviewed by:    adrian, glebius, pouria
    Differential Revision:  D55344
---
 sys/netinet/in.c     | 22 ++++++++++++++++++++++
 sys/netinet/in.h     |  1 +
 sys/netinet/in_var.h |  2 +-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index 510cfa79d54b..508bc43bc63c 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -206,6 +206,28 @@ in_ifhasaddr(struct ifnet *ifp, struct in_addr in)
 	return (false);
 }
 
+/*
+ * Return the first configured IPv4 address on the given ifnet.
+ * Replaces deprecated IFP_TO_IA() from 4.3BSD.
+ * Used only by IPv4 multicast, where source-address selection
+ * has not yet been introduced.
+ *
+ * Returns ifa or NULL.
+ */
+struct in_ifaddr *
+in_ifprimaryaddr(struct ifnet *ifp)
+{
+	struct ifaddr *ifa;
+
+	NET_EPOCH_ASSERT();
+
+	CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link)
+		if (ifa->ifa_addr->sa_family == AF_INET)
+			break;
+
+	return ((struct in_ifaddr *)ifa);
+}
+
 /*
  * Return a reference to the interface address which is different to
  * the supplied one but with same IP address value.
diff --git a/sys/netinet/in.h b/sys/netinet/in.h
index 94f4bb682489..c4698b7056eb 100644
--- a/sys/netinet/in.h
+++ b/sys/netinet/in.h
@@ -677,6 +677,7 @@ bool	 in_localip(struct in_addr);
 bool	 in_localip_fib(struct in_addr, uint16_t);
 bool	 in_ifhasaddr(struct ifnet *, struct in_addr);
 struct in_ifaddr *in_findlocal(uint32_t, bool);
+struct in_ifaddr *in_ifprimaryaddr(struct ifnet *);
 int	 inet_aton(const char *, struct in_addr *); /* in libkern */
 char	*inet_ntoa_r(struct in_addr ina, char *buf); /* in libkern */
 char	*inet_ntop(int, const void *, char *, socklen_t); /* in libkern */
diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h
index 6d843cf2f6ef..191f3a54dbe5 100644
--- a/sys/netinet/in_var.h
+++ b/sys/netinet/in_var.h
@@ -153,7 +153,7 @@ do {									\
 
 /*
  * Macro for finding the internet address structure (in_ifaddr) corresponding
- * to a given interface (ifnet structure).
+ * to a given interface (ifnet structure). DEPRECATED.
  */
 #define IFP_TO_IA(ifp, ia)						\
 	/* struct ifnet *ifp; */					\


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?6a67d3ce.23104.20182398>