diff options
author | Florian Obser <florian@cvs.openbsd.org> | 2024-06-02 14:07:20 +0000 |
---|---|---|
committer | Florian Obser <florian@cvs.openbsd.org> | 2024-06-02 14:07:20 +0000 |
commit | d4bb84ae2a9f5157c513f0d2d2544dc43f02b2ce (patch) | |
tree | c9cd3e50d01a94271871a591a445172698475b8b /sbin | |
parent | 2fb1a2fa5981c4e09f2964b51a8966ecc050065e (diff) |
Unlike DHCPv4 we will only send multicast messages.
Initialize destination address once and fold udp_send_packet()
into send_packet().
While here improve debugging output a bit.
Diffstat (limited to 'sbin')
-rw-r--r-- | sbin/dhcp6leased/frontend.c | 35 |
1 files changed, 14 insertions, 21 deletions
diff --git a/sbin/dhcp6leased/frontend.c b/sbin/dhcp6leased/frontend.c index 1a92debbee6..7db0d50e09a 100644 --- a/sbin/dhcp6leased/frontend.c +++ b/sbin/dhcp6leased/frontend.c @@ -1,4 +1,4 @@ -/* $OpenBSD: frontend.c,v 1.4 2024/06/02 13:55:37 florian Exp $ */ +/* $OpenBSD: frontend.c,v 1.5 2024/06/02 14:07:19 florian Exp $ */ /* * Copyright (c) 2017, 2021, 2024 Florian Obser <florian@openbsd.org> @@ -84,7 +84,6 @@ void set_udpsock(int, uint32_t); void iface_data_from_imsg(struct iface*, struct imsg_req_dhcp *); ssize_t build_packet(uint8_t, struct iface *, char *); void send_packet(uint8_t, struct iface *); -void udp_send_packet(struct iface *, uint8_t *, ssize_t); int iface_conf_cmp(struct iface_conf *, struct iface_conf *); LIST_HEAD(, iface) interfaces; @@ -92,6 +91,7 @@ struct dhcp6leased_conf *frontend_conf; static struct imsgev *iev_main; static struct imsgev *iev_engine; struct event ev_route; +struct sockaddr_in6 dst; int ioctlsock; uint8_t dhcp_packet[1500]; @@ -160,6 +160,14 @@ frontend(int debug, int verbose) if (vendor_class_len == -1) fatal("Cannot generate vendor-class-data"); + memset(&dst, 0, sizeof(dst)); + dst.sin6_family = AF_INET6; + if (inet_pton(AF_INET6, ALL_DHCP_RELAY_AGENTS_AND_SERVERS, + &dst.sin6_addr.s6_addr) != 1) + fatal("inet_pton"); + + dst.sin6_port = ntohs(SERVER_PORT); + event_init(); /* Setup signal handler. */ @@ -932,29 +940,14 @@ send_packet(uint8_t message_type, struct iface *iface) == NULL) return; /* iface went away, nothing to do */ - log_debug("%s on %s", message_type == DHCPSOLICIT ? "DHCPSOLICIT" : - "DHCPREQUEST", if_name); + log_debug("%s on %s", dhcp_message_type2str(message_type), if_name); pkt_len = build_packet(message_type, iface, if_name); - udp_send_packet(iface, dhcp_packet, pkt_len); -} - -void -udp_send_packet(struct iface *iface, uint8_t *packet, ssize_t len) -{ - struct sockaddr_in6 to; - - memset(&to, 0, sizeof(to)); - to.sin6_family = AF_INET6; - if (inet_pton(AF_INET6, ALL_DHCP_RELAY_AGENTS_AND_SERVERS, - &to.sin6_addr.s6_addr) != 1) - fatal("inet_pton"); - to.sin6_port = ntohs(SERVER_PORT); - to.sin6_scope_id = iface->ifinfo.if_index; + dst.sin6_scope_id = iface->ifinfo.if_index; - if (sendto(EVENT_FD(&iface->udpev), packet, len, 0, - (struct sockaddr *)&to, sizeof(to)) == -1) + if (sendto(EVENT_FD(&iface->udpev), dhcp_packet, pkt_len, 0, + (struct sockaddr *)&dst, sizeof(dst)) == -1) log_warn("sendto"); } |