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.

Reply via email to