Download raw body.
in pcb address union
Hi,
I think the padding in inpaddru is a leftover from times when IPv6
compatible addresses should contain IPv4 addreses. Better use a
simple union for IPv4 and IPv6 addresses like everywhere else.
ok?
bluhm
Index: netinet/in_pcb.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v
diff -u -p -r1.296 in_pcb.c
--- netinet/in_pcb.c 29 Feb 2024 12:01:59 -0000 1.296
+++ netinet/in_pcb.c 22 Mar 2024 13:24:39 -0000
@@ -102,11 +102,7 @@
#endif
const struct in_addr zeroin_addr;
-
-const union {
- struct in_addr za_in;
- struct in6_addr za_in6;
-} zeroin46_addr;
+const union inpaddru zeroin46_addr;
/*
* These configure the range of local port addresses assigned to
Index: netinet/in_pcb.h
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.h,v
diff -u -p -r1.152 in_pcb.h
--- netinet/in_pcb.h 13 Feb 2024 12:22:09 -0000 1.152
+++ netinet/in_pcb.h 22 Mar 2024 13:25:46 -0000
@@ -120,11 +120,8 @@
struct pf_state_key;
union inpaddru {
+ struct in_addr iau_addr;
struct in6_addr iau_addr6;
- struct {
- uint8_t pad[12];
- struct in_addr inaddr; /* easier transition */
- } iau_a4u;
};
/*
@@ -142,9 +139,9 @@ struct inpcb {
struct inpcbtable *inp_table; /* [I] inet queue/hash table */
union inpaddru inp_faddru; /* [t] Foreign address. */
union inpaddru inp_laddru; /* [t] Local address. */
-#define inp_faddr inp_faddru.iau_a4u.inaddr
+#define inp_faddr inp_faddru.iau_addr
#define inp_faddr6 inp_faddru.iau_addr6
-#define inp_laddr inp_laddru.iau_a4u.inaddr
+#define inp_laddr inp_laddru.iau_addr
#define inp_laddr6 inp_laddru.iau_addr6
u_int16_t inp_fport; /* [t] foreign port */
u_int16_t inp_lport; /* [t] local port */
in pcb address union