From nobody Thu Jul 3 12:01:06 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bXwMk37Z8z60qfH; Thu, 03 Jul 2025 12:01:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bXwMk2JMmz3mhY; Thu, 03 Jul 2025 12:01:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751544066; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OMBBaThflXBKb2khJQ+wQodQWbMPfSmXin+uF/ZEygI=; b=T3MDDb6a7LC9J5afemPBMBV7XgFig5zUE7AP8LpzbQ6rSlrw9kmlqD1C+TdmiFMYTma1Oj FF4giLHkxCHsMUIYCzVk8ZXGpY+1FPoewLX3x5ybTEmO26EId//wJgZB315kuAyQDkOQV0 oSD5ESt/BSn+TUMV1oU1G8/ik4BvXY4METxhEctlpYt1pvfjsT9ZgrT/FG9LOdX504yJWD +sYYJ5xkmIJYI+6fDm8cH3xY8EUQfcOqkayMRcc2QwhvOT5d82J8LZ2DbjUQoq/OHNo983 ZKx1Uxkjpr5y1Kw1sGRAKeC23jr7jXSzv5Xv4Yt+HO5VyMgwvxGEsA3Ndnleeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1751544066; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=OMBBaThflXBKb2khJQ+wQodQWbMPfSmXin+uF/ZEygI=; b=FowVt0BRcN5g6iHlzqQTVmor44LO/XVOethNPtESukMxGzrrPy9SuRo8qgN8eLQNaJrNZe CDdj3QeGn1XynJX/Oe3BPJrrbkUZENMho6BIfmh9tBDALVTsHY1IX8pd/Nb3p0lSfc0/k/ JFHVhh/Cqzf5Wi76xhl1rulnxm/661MYKaxVDF0eQUdit9L1wH9bZDfJhS/9wemtN6Q1NW FlF7xV5AEccgdFZibz3hbhkCZlq+sXlZWrZU1qpIAcsZHEZH7+cNVWSRDYe39mSDRIcSig XUwrofM3gcpbqM9egxm5SvBT0kpNGkhqAUnyC+gya3VIjgNzlEMvDglbqA5lxA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1751544066; a=rsa-sha256; cv=none; b=cHOoFg5fKBwjgBvhFlg3DKQvoc+8ZYhh/0w2tg+8GkVcJ5e1Hsj2povX+vzQqV+1objwS4 lGq2D4XjwfgsL6aOnWJJi6Z3dUxHgx5+w1LXA1sIPhkMHXmq53xnUzMLDFImlWLANfKZ/U SZUZtWAsKn9yPyPK7SKcPKh1tng+vEpjW/Y2gWb0dxQK5zj9R21N9vPHgb70FdKU10acVf Vr16JkbxmYuCdqPV3plZsBukiC+ajt2nBfJPnHirAbhBlsC0fCdtpSN+rWvEAvJmEcUIf1 lEuO0FducAsUIVFUFyPo30KkKJQ+2dQHRvKfwr/groYrl64SL4Y4MEVso1bWOg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bXwMk1hdhz13vL; Thu, 03 Jul 2025 12:01:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 563C16Hj051911; Thu, 3 Jul 2025 12:01:06 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 563C16Qq051908; Thu, 3 Jul 2025 12:01:06 GMT (envelope-from git) Date: Thu, 3 Jul 2025 12:01:06 GMT Message-Id: <202507031201.563C16Qq051908@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kristof Provost Subject: git: 3092ea37de7d - main - pfctl: Introduce copy_satopfaddr() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3092ea37de7db89a253ed35cfd225e538916beb5 Auto-Submitted: auto-generated The branch main has been updated by kp: URL: https://cgit.FreeBSD.org/src/commit/?id=3092ea37de7db89a253ed35cfd225e538916beb5 commit 3092ea37de7db89a253ed35cfd225e538916beb5 Author: Kristof Provost AuthorDate: 2025-06-27 14:52:45 +0000 Commit: Kristof Provost CommitDate: 2025-07-03 07:16:13 +0000 pfctl: Introduce copy_satopfaddr() Move the same dance around v4/v6 for copying IP addresses from sockaddr into pf_addr to avoid duplicate code and improve readability. Feedback and OK bluhm Obtained from: OpenBSD, kn , 675ff33b8c Sponsored by: Rubicon Communications, LLC ("Netgate") --- sbin/pfctl/pfctl_parser.c | 76 ++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 50 deletions(-) diff --git a/sbin/pfctl/pfctl_parser.c b/sbin/pfctl/pfctl_parser.c index 6b47d75f77f3..244531ead280 100644 --- a/sbin/pfctl/pfctl_parser.c +++ b/sbin/pfctl/pfctl_parser.c @@ -66,6 +66,7 @@ #include "pfctl_parser.h" #include "pfctl.h" +void copy_satopfaddr(struct pf_addr *, struct sockaddr *); void print_op (u_int8_t, const char *, const char *); void print_port (u_int8_t, u_int16_t, u_int16_t, const char *, int); void print_ugid (u_int8_t, unsigned, unsigned, const char *, unsigned); @@ -229,6 +230,15 @@ pfctl_parser_init(void) err(1, "Failed to create interface group query response map"); } +void +copy_satopfaddr(struct pf_addr *pfa, struct sockaddr *sa) +{ + if (sa->sa_family == AF_INET6) + pfa->v6 = ((struct sockaddr_in6 *)sa)->sin6_addr; + else + pfa->v4 = ((struct sockaddr_in *)sa)->sin_addr; +} + const struct icmptypeent * geticmptypebynumber(u_int8_t type, sa_family_t af) { @@ -1502,42 +1512,20 @@ ifa_load(void) } #endif n->ifindex = 0; - if (n->af == AF_INET) { - memcpy(&n->addr.v.a.addr, &((struct sockaddr_in *) - ifa->ifa_addr)->sin_addr.s_addr, - sizeof(struct in_addr)); - memcpy(&n->addr.v.a.mask, &((struct sockaddr_in *) - ifa->ifa_netmask)->sin_addr.s_addr, - sizeof(struct in_addr)); - if (ifa->ifa_broadaddr != NULL) - memcpy(&n->bcast, &((struct sockaddr_in *) - ifa->ifa_broadaddr)->sin_addr.s_addr, - sizeof(struct in_addr)); - if (ifa->ifa_dstaddr != NULL) - memcpy(&n->peer, &((struct sockaddr_in *) - ifa->ifa_dstaddr)->sin_addr.s_addr, - sizeof(struct in_addr)); - } else if (n->af == AF_INET6) { - memcpy(&n->addr.v.a.addr, &((struct sockaddr_in6 *) - ifa->ifa_addr)->sin6_addr.s6_addr, - sizeof(struct in6_addr)); - memcpy(&n->addr.v.a.mask, &((struct sockaddr_in6 *) - ifa->ifa_netmask)->sin6_addr.s6_addr, - sizeof(struct in6_addr)); - if (ifa->ifa_broadaddr != NULL) - memcpy(&n->bcast, &((struct sockaddr_in6 *) - ifa->ifa_broadaddr)->sin6_addr.s6_addr, - sizeof(struct in6_addr)); - if (ifa->ifa_dstaddr != NULL) - memcpy(&n->peer, &((struct sockaddr_in6 *) - ifa->ifa_dstaddr)->sin6_addr.s6_addr, - sizeof(struct in6_addr)); - n->ifindex = ((struct sockaddr_in6 *) - ifa->ifa_addr)->sin6_scope_id; - } else if (n->af == AF_LINK) { - ifa_add_groups_to_map(ifa->ifa_name); + if (n->af == AF_LINK) { n->ifindex = ((struct sockaddr_dl *) ifa->ifa_addr)->sdl_index; + ifa_add_groups_to_map(ifa->ifa_name); + } else { + copy_satopfaddr(&n->addr.v.a.addr, ifa->ifa_addr); + copy_satopfaddr(&n->addr.v.a.mask, ifa->ifa_netmask); + if (ifa->ifa_broadaddr != NULL) + copy_satopfaddr(&n->bcast, ifa->ifa_broadaddr); + if (ifa->ifa_dstaddr != NULL) + copy_satopfaddr(&n->peer, ifa->ifa_dstaddr); + if (n->af == AF_INET6) + n->ifindex = ((struct sockaddr_in6 *) + ifa->ifa_addr) ->sin6_scope_id; } if ((n->ifname = strdup(ifa->ifa_name)) == NULL) err(1, "%s: strdup", __func__); @@ -1918,9 +1906,7 @@ host_v6(const char *s, int mask) err(1, "address: calloc"); h->ifname = NULL; h->af = AF_INET6; - memcpy(&h->addr.v.a.addr, - &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, - sizeof(h->addr.v.a.addr)); + copy_satopfaddr(&h->addr.v.a.addr, res->ai_addr); h->ifindex = ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; set_ipmask(h, mask); @@ -1974,20 +1960,10 @@ host_dns(const char *s, int mask, int numeric) err(1, "host_dns: calloc"); n->ifname = NULL; n->af = res->ai_family; - if (res->ai_family == AF_INET) { - memcpy(&n->addr.v.a.addr, - &((struct sockaddr_in *) - res->ai_addr)->sin_addr.s_addr, - sizeof(struct in_addr)); - } else { - memcpy(&n->addr.v.a.addr, - &((struct sockaddr_in6 *) - res->ai_addr)->sin6_addr.s6_addr, - sizeof(struct in6_addr)); + copy_satopfaddr(&n->addr.v.a.addr, res->ai_addr); + if (res->ai_family == AF_INET6) n->ifindex = - ((struct sockaddr_in6 *) - res->ai_addr)->sin6_scope_id; - } + ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; set_ipmask(n, mask); n->next = NULL; n->tail = n;