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-main
mailing list