The branch main has been updated by kp:

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

commit 95fda90b84d79959109b781db6dab4f5547203b4
Author:     Kristof Provost <k...@freebsd.org>
AuthorDate: 2025-08-04 15:46:32 +0000
Commit:     Kristof Provost <k...@freebsd.org>
CommitDate: 2025-08-20 08:08:46 +0000

    pf: rewrite the pf_state_peer_ntoh and pf_state_peer_hton macros as 
functions.
    
    I can read this code as functions, but it takes too much effort as macros.
    
    Obtained from:  OpenBSD, dlg <d...@openbsd.org>, 4103306ead
    Sponsored by:   Rubicon Communications, LLC ("Netgate")
---
 sys/net/pfvar.h     | 37 ++++---------------------------------
 sys/netpfil/pf/pf.c | 38 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+), 33 deletions(-)

diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index fe12df0f7dc8..d6c13470f2eb 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -1303,39 +1303,10 @@ extern pflog_packet_t           *pflog_packet_ptr;
 
 /* for copies to/from network byte order */
 /* ioctl interface also uses network byte order */
-#define pf_state_peer_hton(s,d) do {           \
-       (d)->seqlo = htonl((s)->seqlo);         \
-       (d)->seqhi = htonl((s)->seqhi);         \
-       (d)->seqdiff = htonl((s)->seqdiff);     \
-       (d)->max_win = htons((s)->max_win);     \
-       (d)->mss = htons((s)->mss);             \
-       (d)->state = (s)->state;                \
-       (d)->wscale = (s)->wscale;              \
-       if ((s)->scrub) {                                               \
-               (d)->scrub.pfss_flags =                                 \
-                   htons((s)->scrub->pfss_flags & PFSS_TIMESTAMP);     \
-               (d)->scrub.pfss_ttl = (s)->scrub->pfss_ttl;             \
-               (d)->scrub.pfss_ts_mod = htonl((s)->scrub->pfss_ts_mod);\
-               (d)->scrub.scrub_flag = PF_SCRUB_FLAG_VALID;            \
-       }                                                               \
-} while (0)
-
-#define pf_state_peer_ntoh(s,d) do {           \
-       (d)->seqlo = ntohl((s)->seqlo);         \
-       (d)->seqhi = ntohl((s)->seqhi);         \
-       (d)->seqdiff = ntohl((s)->seqdiff);     \
-       (d)->max_win = ntohs((s)->max_win);     \
-       (d)->mss = ntohs((s)->mss);             \
-       (d)->state = (s)->state;                \
-       (d)->wscale = (s)->wscale;              \
-       if ((s)->scrub.scrub_flag == PF_SCRUB_FLAG_VALID &&             \
-           (d)->scrub != NULL) {                                       \
-               (d)->scrub->pfss_flags =                                \
-                   ntohs((s)->scrub.pfss_flags) & PFSS_TIMESTAMP;      \
-               (d)->scrub->pfss_ttl = (s)->scrub.pfss_ttl;             \
-               (d)->scrub->pfss_ts_mod = ntohl((s)->scrub.pfss_ts_mod);\
-       }                                                               \
-} while (0)
+void    pf_state_peer_hton(const struct pf_state_peer *,
+           struct pf_state_peer_export *);
+void    pf_state_peer_ntoh(const struct pf_state_peer_export *,
+           struct pf_state_peer *);
 
 #define pf_state_counter_hton(s,d) do {                                \
        d[0] = htonl((s>>32)&0xffffffff);                       \
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 9d83e7b82e6f..8cd4fff95b15 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -2069,6 +2069,44 @@ pf_find_state_all_exists(const struct pf_state_key_cmp 
*key, u_int dir)
        return (false);
 }
 
+void
+pf_state_peer_hton(const struct pf_state_peer *s, struct pf_state_peer_export 
*d)
+{
+       d->seqlo = htonl(s->seqlo);
+       d->seqhi = htonl(s->seqhi);
+       d->seqdiff = htonl(s->seqdiff);
+       d->max_win = htons(s->max_win);
+       d->mss = htons(s->mss);
+       d->state = s->state;
+       d->wscale = s->wscale;
+       if (s->scrub) {
+               d->scrub.pfss_flags = htons(
+                   s->scrub->pfss_flags & PFSS_TIMESTAMP);
+               d->scrub.pfss_ttl = (s)->scrub->pfss_ttl;
+               d->scrub.pfss_ts_mod = htonl((s)->scrub->pfss_ts_mod);
+               d->scrub.scrub_flag = PF_SCRUB_FLAG_VALID;
+       }
+}
+
+void
+pf_state_peer_ntoh(const struct pf_state_peer_export *s, struct pf_state_peer 
*d)
+{
+       d->seqlo = ntohl(s->seqlo);
+       d->seqhi = ntohl(s->seqhi);
+       d->seqdiff = ntohl(s->seqdiff);
+       d->max_win = ntohs(s->max_win);
+       d->mss = ntohs(s->mss);
+       d->state = s->state;
+       d->wscale = s->wscale;
+       if (s->scrub.scrub_flag == PF_SCRUB_FLAG_VALID &&
+           d->scrub != NULL) {
+               d->scrub->pfss_flags = ntohs(s->scrub.pfss_flags) &
+                   PFSS_TIMESTAMP;
+               d->scrub->pfss_ttl = s->scrub.pfss_ttl;
+               d->scrub->pfss_ts_mod = ntohl(s->scrub.pfss_ts_mod);
+       }
+}
+
 struct pf_udp_mapping *
 pf_udp_mapping_create(sa_family_t af, struct pf_addr *src_addr, uint16_t 
src_port,
     struct pf_addr *nat_addr, uint16_t nat_port)

Reply via email to