return 0;
}
+size_t dhcp_message_payload_size(sd_dhcp_message *message) {
+ assert(message);
+
+ return MAX(size_add(sizeof(DHCPMessageHeader), tlv_size(&message->options)), BOOTP_MESSAGE_SIZE);
+}
+
+size_t dhcp_message_packet_size(sd_dhcp_message *message) {
+ assert(message);
+
+ return size_add(sizeof(struct iphdr) + sizeof(struct udphdr), dhcp_message_payload_size(message));
+}
+
int dhcp_message_build(sd_dhcp_message *message, struct iovec_wrapper *ret) {
int r;
const struct hw_addr_data *hw_addr,
sd_dhcp_message **ret);
+size_t dhcp_message_payload_size(sd_dhcp_message *message);
+size_t dhcp_message_packet_size(sd_dhcp_message *message);
+
int dhcp_message_build(sd_dhcp_message *message, struct iovec_wrapper *ret);
int dhcp_message_build_json(sd_dhcp_message *message, sd_json_variant **ret);
.msg_iovlen = 1,
};
ssize_t len = ASSERT_OK_ERRNO(recvmsg_safe(socket_fd[1], &msg, MSG_DONTWAIT));
+ ASSERT_EQ((size_t) len, dhcp_message_payload_size(message));
_cleanup_(sd_dhcp_message_unrefp) sd_dhcp_message *m = NULL;
ASSERT_OK(dhcp_message_parse(
.msg_iovlen = 1,
};
ssize_t len = ASSERT_OK_ERRNO(recvmsg_safe(socket_fd[1], &msg, MSG_DONTWAIT));
+ ASSERT_EQ((size_t) len, dhcp_message_packet_size(message));
struct iovec payload;
ASSERT_OK(udp_packet_verify(
_cleanup_(iovec_done) struct iovec joined = {};
ASSERT_OK(iovw_concat(&iovw, &joined));
+ ASSERT_EQ(joined.iov_len, dhcp_message_payload_size(m));
_cleanup_(sd_dhcp_message_unrefp) sd_dhcp_message *m2 = NULL;
ASSERT_OK(dhcp_message_parse(