Hi, We can avoid some casts by using the sa field of union sockaddr_union.
ok? bluhm Index: net/pfkeyv2.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/sys/net/pfkeyv2.c,v retrieving revision 1.151 diff -u -p -r1.151 pfkeyv2.c --- net/pfkeyv2.c 14 Feb 2017 09:47:40 -0000 1.151 +++ net/pfkeyv2.c 24 Feb 2017 17:56:15 -0000 @@ -413,7 +413,7 @@ pfkeyv2_policy(struct ipsec_acquire *ipa break; #endif /* INET6 */ } - export_address(&p, (struct sockaddr *) &sunion); + export_address(&p, &sunion.sa); if (dir == IPSP_DIRECTION_OUT) headers[SADB_X_EXT_SRC_MASK] = p; @@ -432,7 +432,7 @@ pfkeyv2_policy(struct ipsec_acquire *ipa break; #endif /* INET6 */ } - export_address(&p, (struct sockaddr *) &sunion); + export_address(&p, &sunion.sa); if (dir == IPSP_DIRECTION_OUT) headers[SADB_X_EXT_DST_FLOW] = p; @@ -451,7 +451,7 @@ pfkeyv2_policy(struct ipsec_acquire *ipa break; #endif /* INET6 */ } - export_address(&p, (struct sockaddr *) &sunion); + export_address(&p, &sunion.sa); if (dir == IPSP_DIRECTION_OUT) headers[SADB_X_EXT_DST_MASK] = p; @@ -470,7 +470,7 @@ pfkeyv2_policy(struct ipsec_acquire *ipa break; #endif /* INET6 */ } - export_address(&p, (struct sockaddr *) &sunion); + export_address(&p, &sunion.sa); headers[SADB_X_EXT_FLOW_TYPE] = p; sp = p; @@ -607,11 +607,11 @@ pfkeyv2_get(struct tdb *sa, void **heade /* Export TDB source address */ headers[SADB_EXT_ADDRESS_SRC] = p; - export_address(&p, (struct sockaddr *) &sa->tdb_src); + export_address(&p, &sa->tdb_src.sa); /* Export TDB destination address */ headers[SADB_EXT_ADDRESS_DST] = p; - export_address(&p, (struct sockaddr *) &sa->tdb_dst); + export_address(&p, &sa->tdb_dst.sa); /* Export source/destination identities, if present */ if (sa->tdb_ids) @@ -883,10 +883,8 @@ pfkeyv2_send(struct socket *socket, void &sa1->tdb_sproto, 0))) goto ret; - import_address((struct sockaddr *) &sa1->tdb_src, - headers[SADB_EXT_ADDRESS_SRC]); - import_address((struct sockaddr *) &sa1->tdb_dst, - headers[SADB_EXT_ADDRESS_DST]); + import_address(&sa1->tdb_src.sa, headers[SADB_EXT_ADDRESS_SRC]); + import_address(&sa1->tdb_dst.sa, headers[SADB_EXT_ADDRESS_DST]); /* Find an unused SA identifier */ sprng = (struct sadb_spirange *) headers[SADB_EXT_SPIRANGE]; @@ -974,9 +972,9 @@ pfkeyv2_send(struct socket *socket, void /* Initialize SA */ import_sa(newsa, headers[SADB_EXT_SA], &ii); - import_address((struct sockaddr *) &newsa->tdb_src, + import_address(&newsa->tdb_src.sa, headers[SADB_EXT_ADDRESS_SRC]); - import_address((struct sockaddr *) &newsa->tdb_dst, + import_address(&newsa->tdb_dst.sa, headers[SADB_EXT_ADDRESS_DST]); import_lifetime(newsa, headers[SADB_EXT_LIFETIME_CURRENT], @@ -1125,9 +1123,9 @@ pfkeyv2_send(struct socket *socket, void } import_sa(newsa, headers[SADB_EXT_SA], &ii); - import_address((struct sockaddr *) &newsa->tdb_src, + import_address(&newsa->tdb_src.sa, headers[SADB_EXT_ADDRESS_SRC]); - import_address((struct sockaddr *) &newsa->tdb_dst, + import_address(&newsa->tdb_dst.sa, headers[SADB_EXT_ADDRESS_DST]); import_lifetime(newsa, @@ -1958,10 +1956,10 @@ pfkeyv2_expire(struct tdb *sa, u_int16_t PFKEYV2_LIFETIME_SOFT : PFKEYV2_LIFETIME_HARD); headers[SADB_EXT_ADDRESS_SRC] = p; - export_address(&p, (struct sockaddr *) &sa->tdb_src); + export_address(&p, &sa->tdb_src.sa); headers[SADB_EXT_ADDRESS_DST] = p; - export_address(&p, (struct sockaddr *) &sa->tdb_dst); + export_address(&p, &sa->tdb_dst.sa); if ((rval = pfkeyv2_sendmessage(headers, PFKEYV2_SENDMESSAGE_BROADCAST, NULL, 0, 0, sa->tdb_rdomain)) != 0) @@ -2124,13 +2122,13 @@ pfkeyv2_dump_policy(struct ipsec_policy /* Local address. */ if (ipo->ipo_src.sa.sa_family) { headers[SADB_EXT_ADDRESS_SRC] = p; - export_address(&p, (struct sockaddr *)&ipo->ipo_src); + export_address(&p, &ipo->ipo_src.sa); } /* Remote address. */ if (ipo->ipo_dst.sa.sa_family) { headers[SADB_EXT_ADDRESS_DST] = p; - export_address(&p, (struct sockaddr *)&ipo->ipo_dst); + export_address(&p, &ipo->ipo_dst.sa); } /* Get actual flow. */