The branch main has been updated by donner:

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

commit 32f9c2ceb3ec8266e48ec0f6d1556fd98ef12db6
Author:     Lutz Donnerhacke <don...@freebsd.org>
AuthorDate: 2021-05-25 13:44:34 +0000
Commit:     Lutz Donnerhacke <don...@freebsd.org>
CommitDate: 2021-06-19 17:21:05 +0000

    libalias: Restructure - Separate fully qualified search
    
    Search fully specified links first.  Some performance loss due to need
    to revisit the db twice, if not found.
    
    MFC after:      1 week
    Differential Revision: https://reviews.freebsd.org/D30569
---
 sys/netinet/libalias/alias_db.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c
index 342f6117f878..dfb4cd9c8287 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -1210,18 +1210,27 @@ _FindLinkIn(struct libalias *la, struct in_addr 
dst_addr,
 
        /* Search loop */
        start_point = StartPointIn(alias_addr, alias_port, link_type);
+       if (!(flags_in & LINK_PARTIALLY_SPECIFIED)) {
+               LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) {
+                       INGUARD;
+                       if (lnk->flags & LINK_PARTIALLY_SPECIFIED)
+                               continue;
+                       if (lnk->dst_addr.s_addr == dst_addr.s_addr
+                           && lnk->dst_port == dst_port) {
+                               CleanupLink(la, &lnk);
+                               if (lnk != NULL) {
+                                       lnk->timestamp = LibAliasTime;
+                                       return (lnk);
+                               }
+                       }
+               }
+       }
        LIST_FOREACH(lnk, &la->linkTableIn[start_point], list_in) {
                int flags;
 
                INGUARD;
                flags = flags_in | lnk->flags;
-               if (!(flags & LINK_PARTIALLY_SPECIFIED)) {
-                       if (lnk->dst_addr.s_addr == dst_addr.s_addr
-                           && lnk->dst_port == dst_port) {
-                               lnk_fully_specified = lnk;
-                               break;
-                       }
-               } else if ((flags & LINK_UNKNOWN_DEST_ADDR)
+               if ((flags & LINK_UNKNOWN_DEST_ADDR)
                    && (flags & LINK_UNKNOWN_DEST_PORT)) {
                        if (lnk_unknown_all == NULL)
                                lnk_unknown_all = lnk;
@@ -1239,11 +1248,7 @@ _FindLinkIn(struct libalias *la, struct in_addr dst_addr,
        }
 #undef INGUARD
 
-       CleanupLink(la, &lnk_fully_specified);
-       if (lnk_fully_specified != NULL) {
-               lnk_fully_specified->timestamp = LibAliasTime;
-               lnk = lnk_fully_specified;
-       } else if (lnk_unknown_dst_port != NULL)
+       if (lnk_unknown_dst_port != NULL)
                lnk = lnk_unknown_dst_port;
        else if (lnk_unknown_dst_addr != NULL)
                lnk = lnk_unknown_dst_addr;
_______________________________________________
dev-commits-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-all
To unsubscribe, send any mail to "dev-commits-src-all-unsubscr...@freebsd.org"

Reply via email to