git: d5419034381d - main - libalias: Restructure - Outgoing search

Lutz Donnerhacke donner at FreeBSD.org
Sat Jun 19 18:26:35 UTC 2021


The branch main has been updated by donner:

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

commit d5419034381d0e8e8c99f0f678118b197144bfff
Author:     Lutz Donnerhacke <donner at FreeBSD.org>
AuthorDate: 2021-05-26 07:09:19 +0000
Commit:     Lutz Donnerhacke <donner at FreeBSD.org>
CommitDate: 2021-06-19 18:25:08 +0000

    libalias: Restructure - Outgoing search
    
    Factor out the outgoing search function.
    Preparation for a new data structure.
    
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D30572
---
 sys/netinet/libalias/alias_db.c | 67 ++++++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 27 deletions(-)

diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c
index 229ca24bfe29..3fd7cf5e0acc 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -1097,50 +1097,65 @@ ReLink(struct alias_link *old_lnk,
 	return (new_lnk);
 }
 
-static struct alias_link *
-_FindLinkOut(struct libalias *la, struct in_addr src_addr,
-    struct in_addr dst_addr,
-    u_short src_port,
-    u_short dst_port,
-    int link_type,
-    int replace_partial_links)
-{
-	u_int i;
-	struct alias_link *lnk;
 
 #define OUTGUARD					\
    if (lnk->src_port != src_port ||			\
        lnk->src_addr.s_addr != src_addr.s_addr ||	\
+       lnk->dst_addr.s_addr != dst_addr.s_addr ||	\
+       lnk->dst_port != dst_port ||			\
        lnk->link_type != link_type ||			\
        lnk->server != NULL)				\
 	   continue;
 
-	LIBALIAS_LOCK_ASSERT(la);
+static struct alias_link *
+_SearchLinkOut(struct libalias *la, struct in_addr src_addr,
+    struct in_addr dst_addr,
+    u_short src_port,
+    u_short dst_port,
+    int link_type) {
+	u_int i;
+	struct alias_link *lnk;
+
 	i = StartPointOut(src_addr, dst_addr, src_port, dst_port, link_type);
 	LIST_FOREACH(lnk, &la->linkTableOut[i], list_out) {
 		OUTGUARD;
-		if (lnk->dst_addr.s_addr == dst_addr.s_addr &&
-		    lnk->dst_port == dst_port)
-			break;
+		CleanupLink(la, &lnk);
+		if (lnk != NULL)
+			lnk->timestamp = LibAliasTime;
+		return (lnk);
 	}
 
-	CleanupLink(la, &lnk);
-	if (lnk != NULL)
-		lnk->timestamp = LibAliasTime;
+	return (NULL);
+}
+
+#undef OUTGUARD
+
+static struct alias_link *
+_FindLinkOut(struct libalias *la, struct in_addr src_addr,
+    struct in_addr dst_addr,
+    u_short src_port,
+    u_short dst_port,
+    int link_type,
+    int replace_partial_links)
+{
+	struct alias_link *lnk;
+
+	LIBALIAS_LOCK_ASSERT(la);
+	lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, dst_port, link_type);
 
 	/* Search for partially specified links. */
 	if (lnk == NULL && replace_partial_links) {
 		if (dst_port != 0 && dst_addr.s_addr != INADDR_ANY) {
-			lnk = _FindLinkOut(la, src_addr, dst_addr, src_port, 0,
-			    link_type, 0);
+			lnk = _SearchLinkOut(la, src_addr, dst_addr, src_port, 0,
+			    link_type);
 			if (lnk == NULL)
-				lnk = _FindLinkOut(la, src_addr, ANY_ADDR, src_port,
-				    dst_port, link_type, 0);
+				lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port,
+				    dst_port, link_type);
 		}
 		if (lnk == NULL &&
 		    (dst_port != 0 || dst_addr.s_addr != INADDR_ANY)) {
-			lnk = _FindLinkOut(la, src_addr, ANY_ADDR, src_port, 0,
-			    link_type, 0);
+			lnk = _SearchLinkOut(la, src_addr, ANY_ADDR, src_port, 0,
+			    link_type);
 		}
 		if (lnk != NULL) {
 			lnk = ReLink(lnk,
@@ -1149,7 +1164,6 @@ _FindLinkOut(struct libalias *la, struct in_addr src_addr,
 			    link_type);
 		}
 	}
-#undef OUTGUARD
 	return (lnk);
 }
 
@@ -1230,10 +1244,9 @@ _FindLinkIn(struct libalias *la, struct in_addr dst_addr,
 			if (lnk->dst_addr.s_addr == dst_addr.s_addr
 			    && lnk->dst_port == dst_port) {
 				CleanupLink(la, &lnk);
-				if (lnk != NULL) {
+				if (lnk != NULL)
 					lnk->timestamp = LibAliasTime;
-					return (lnk);
-				}
+				return (lnk);
 			}
 		}
 	} else {


More information about the dev-commits-src-all mailing list