Treat xid as a uint32_t in network byte order on the wire. Internally this doesn't matter since we only care about equality. This makes logging output comparable to tcpdump(8).
Pointed out by joel@ OK? diff --git engine.c engine.c index 60f81d6f3c8..4fbdf2f16ef 100644 --- engine.c +++ engine.c @@ -848,7 +848,7 @@ parse_dhcp(struct dhcpleased_iface *iface, struct imsg_dhcp *dhcp) return; } - if (dhcp_hdr->xid != iface->xid) + if (ntohl(dhcp_hdr->xid) != iface->xid) return; /* silently ignore wrong xid */ if (rem < sizeof(cookie)) @@ -1770,7 +1770,7 @@ log_dhcp_hdr(struct dhcp_hdr *dhcp_hdr) "Unknown", dhcp_hdr->htype); log_debug("dhcp_hdr hlen: %d", dhcp_hdr->hlen); log_debug("dhcp_hdr hops: %d", dhcp_hdr->hops); - log_debug("dhcp_hdr xid: 0x%x", dhcp_hdr->xid); + log_debug("dhcp_hdr xid: 0x%x", ntohl(dhcp_hdr->xid)); log_debug("dhcp_hdr secs: %u", dhcp_hdr->secs); log_debug("dhcp_hdr flags: 0x%x", dhcp_hdr->flags); log_debug("dhcp_hdr ciaddr: %s", inet_ntop(AF_INET, &dhcp_hdr->ciaddr, diff --git frontend.c frontend.c index 53b61cafb77..ab644285451 100644 --- frontend.c +++ frontend.c @@ -935,7 +935,7 @@ build_packet(uint8_t message_type, char *if_name, uint32_t xid, hdr->htype = HTYPE_ETHER; hdr->hlen = 6; hdr->hops = 0; - hdr->xid = xid; + hdr->xid = htonl(xid); hdr->secs = 0; hdr->ciaddr = *ciaddr; memcpy(hdr->chaddr, hw_address, sizeof(*hw_address)); -- I'm not entirely sure you are real.