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.