changeset 4437:5f768f1d37ad draft

BSD: Simplify rtm usage
author Roy Marples <roy@marples.name>
date Mon, 15 Apr 2019 12:39:07 +0100
parents 52c29572025b
children fea97b24d884
files src/if-bsd.c
diffstat 1 files changed, 10 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/if-bsd.c	Mon Apr 15 14:30:14 2019 +0300
+++ b/src/if-bsd.c	Mon Apr 15 12:39:07 2019 +0100
@@ -107,6 +107,12 @@
 	int pf_inet6_fd;
 };
 
+struct rtm
+{
+	struct rt_msghdr hdr;
+	char buffer[sizeof(struct sockaddr_storage) * RTAX_MAX];
+};
+
 int
 if_init(__unused struct interface *iface)
 {
@@ -462,11 +468,7 @@
 if_route(unsigned char cmd, const struct rt *rt)
 {
 	struct dhcpcd_ctx *ctx;
-	struct rtm
-	{
-		struct rt_msghdr hdr;
-		char buffer[sizeof(struct sockaddr_storage) * RTAX_MAX];
-	} rtmsg;
+	struct rtm rtmsg;
 	struct rt_msghdr *rtm = &rtmsg.hdr;
 	char *bp = rtmsg.buffer;
 	struct sockaddr_dl sdl;
@@ -1258,11 +1260,8 @@
 int
 if_handlelink(struct dhcpcd_ctx *ctx)
 {
-	union {
-		struct rt_msghdr rtmsg;
-		unsigned char buf[2048];
-	} u;
-	struct iovec iov = { .iov_base = u.buf, .iov_len = sizeof(u) };
+	struct rtm rtm;
+	struct iovec iov = { .iov_base = &rtm, .iov_len = sizeof(rtm) };
 	struct msghdr msg = { .msg_iov = &iov, .msg_iovlen = 1 };
 	ssize_t len;
 
@@ -1270,7 +1269,7 @@
 	if (len == -1)
 		return -1;
 	if (len != 0)
-		if_dispatch(ctx, &u.rtmsg);
+		if_dispatch(ctx, &rtm.hdr);
 	return 0;
 }