Tag the bootp request as a DHCP discover
This commit is contained in:
parent
ec0051a569
commit
75b4826d15
1 changed files with 21 additions and 7 deletions
|
@ -25,11 +25,14 @@
|
||||||
#include <grub/net/udp.h>
|
#include <grub/net/udp.h>
|
||||||
#include <grub/datetime.h>
|
#include <grub/datetime.h>
|
||||||
|
|
||||||
static grub_uint8_t grub_userclass[] = {GRUB_NET_BOOTP_RFC1048_MAGIC_0,
|
static grub_uint8_t dhcp_option_header[] = {GRUB_NET_BOOTP_RFC1048_MAGIC_0,
|
||||||
GRUB_NET_BOOTP_RFC1048_MAGIC_1,
|
GRUB_NET_BOOTP_RFC1048_MAGIC_1,
|
||||||
GRUB_NET_BOOTP_RFC1048_MAGIC_2,
|
GRUB_NET_BOOTP_RFC1048_MAGIC_2,
|
||||||
GRUB_NET_BOOTP_RFC1048_MAGIC_3,
|
GRUB_NET_BOOTP_RFC1048_MAGIC_3};
|
||||||
0x4D, 0x05, 'G', 'R', 'U', 'B', '2'};
|
static grub_uint8_t grub_userclass[] = {0x4D, 0x05, 'G', 'R', 'U', 'B', '2'};
|
||||||
|
static grub_uint8_t grub_dhcpdiscover[] = {0x35, 0x01, 0x01};
|
||||||
|
static grub_uint8_t grub_dhcptime[] = {0x33, 0x04, 0x00, 0x00, 0x0e, 0x10};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask)
|
parse_dhcp_vendor (const char *name, const void *vend, int limit, int *mask)
|
||||||
{
|
{
|
||||||
|
@ -493,10 +496,14 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
struct udphdr *udph;
|
struct udphdr *udph;
|
||||||
grub_net_network_level_address_t target;
|
grub_net_network_level_address_t target;
|
||||||
grub_net_link_level_address_t ll_target;
|
grub_net_link_level_address_t ll_target;
|
||||||
|
grub_uint8_t *offset;
|
||||||
|
|
||||||
if (!ifaces[j].prev)
|
if (!ifaces[j].prev)
|
||||||
continue;
|
continue;
|
||||||
nb = grub_netbuff_alloc (sizeof (*pack) + 64 + 128);
|
nb = grub_netbuff_alloc (sizeof (*pack) + sizeof(dhcp_option_header)
|
||||||
|
+ sizeof(grub_userclass)
|
||||||
|
+ sizeof(grub_dhcpdiscover)
|
||||||
|
+ sizeof(grub_dhcptime) + 64 + 128);
|
||||||
if (!nb)
|
if (!nb)
|
||||||
{
|
{
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
|
@ -530,7 +537,14 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
pack->seconds = grub_cpu_to_be16 (t);
|
pack->seconds = grub_cpu_to_be16 (t);
|
||||||
|
|
||||||
grub_memcpy (&pack->mac_addr, &ifaces[j].hwaddress.mac, 6);
|
grub_memcpy (&pack->mac_addr, &ifaces[j].hwaddress.mac, 6);
|
||||||
grub_memcpy (&pack->vendor, grub_userclass, sizeof(grub_userclass));
|
offset = (grub_uint8_t *)&pack->vendor;
|
||||||
|
grub_memcpy (offset, dhcp_option_header, sizeof(dhcp_option_header));
|
||||||
|
offset += sizeof(dhcp_option_header);
|
||||||
|
grub_memcpy (offset, grub_dhcpdiscover, sizeof(grub_dhcpdiscover));
|
||||||
|
offset += sizeof(grub_dhcpdiscover);
|
||||||
|
grub_memcpy (offset, grub_userclass, sizeof(grub_userclass));
|
||||||
|
offset += sizeof(grub_userclass);
|
||||||
|
grub_memcpy (offset, grub_dhcptime, sizeof(grub_dhcptime));
|
||||||
|
|
||||||
grub_netbuff_push (nb, sizeof (*udph));
|
grub_netbuff_push (nb, sizeof (*udph));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue