struct dhcphdr *dhcphdr = data;
static const uint8_t overloading = ( DHCP_OPTION_OVERLOAD_FILE |
DHCP_OPTION_OVERLOAD_SNAME );
- int rc;
/* Sanity check */
if ( max_len < sizeof ( *dhcphdr ) )
sizeof ( overloading ) ) == NULL )
return -ENOSPC;
- /* Set DHCP_MESSAGE_TYPE option */
- if ( ( rc = set_dhcp_packet_option ( dhcppkt, DHCP_MESSAGE_TYPE,
- &msgtype,
- sizeof ( msgtype ) ) ) != 0 )
- return rc;
+ /* Set DHCP_MESSAGE_TYPE option within the main options block.
+ * This doesn't seem to be required by the RFCs, but at least
+ * ISC dhcpd and ethereal refuse to recognise it otherwise.
+ */
+ if ( set_dhcp_option ( &dhcppkt->options[OPTS_MAIN],
+ DHCP_MESSAGE_TYPE, &msgtype,
+ sizeof ( msgtype ) ) == NULL )
+ return -ENOSPC;
return 0;
}