net/dhcp: Make grub_net_process_dhcp() take an interface
Change the interface of the function dealing with incoming BOOTP packets to take an interface instead of a card, to allow more fine per-interface state (timeout, handshake state) later on. Use the opportunity to clean up the code a bit. Signed-off-by: Andre Przywara <andre.przywara@arm.com> Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
parent
7ace83295a
commit
5459243465
3 changed files with 16 additions and 17 deletions
|
@ -395,12 +395,19 @@ out:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is called directly from net/ip.c:handle_dgram(), because those
|
||||||
|
* BOOTP/DHCP packets are a bit special due to their improper
|
||||||
|
* sender/receiver IP fields.
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
grub_net_process_dhcp (struct grub_net_buff *nb,
|
grub_net_process_dhcp (struct grub_net_buff *nb,
|
||||||
struct grub_net_card *card)
|
struct grub_net_network_level_interface *iface)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
struct grub_net_network_level_interface *inf;
|
struct grub_net_card *card = iface->card;
|
||||||
|
const struct grub_net_bootp_packet *bp = (const struct grub_net_bootp_packet *) nb->data;
|
||||||
|
grub_size_t size = nb->tail - nb->data;
|
||||||
|
|
||||||
name = grub_xasprintf ("%s:dhcp", card->name);
|
name = grub_xasprintf ("%s:dhcp", card->name);
|
||||||
if (!name)
|
if (!name)
|
||||||
|
@ -408,23 +415,15 @@ grub_net_process_dhcp (struct grub_net_buff *nb,
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
grub_net_configure_by_dhcp_ack (name, card,
|
grub_net_configure_by_dhcp_ack (name, card, 0, bp, size, 0, 0, 0);
|
||||||
0, (const struct grub_net_bootp_packet *) nb->data,
|
|
||||||
(nb->tail - nb->data), 0, 0, 0);
|
|
||||||
grub_free (name);
|
grub_free (name);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
grub_print_error ();
|
grub_print_error ();
|
||||||
else
|
else
|
||||||
{
|
if (grub_memcmp (iface->name, card->name, grub_strlen (card->name)) == 0 &&
|
||||||
FOR_NET_NETWORK_LEVEL_INTERFACES(inf)
|
grub_memcmp (iface->name + grub_strlen (card->name),
|
||||||
if (grub_memcmp (inf->name, card->name, grub_strlen (card->name)) == 0
|
|
||||||
&& grub_memcmp (inf->name + grub_strlen (card->name),
|
|
||||||
":dhcp_tmp", sizeof (":dhcp_tmp") - 1) == 0)
|
":dhcp_tmp", sizeof (":dhcp_tmp") - 1) == 0)
|
||||||
{
|
grub_net_network_level_interface_unregister (iface);
|
||||||
grub_net_network_level_interface_unregister (inf);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char
|
static char
|
||||||
|
|
|
@ -279,7 +279,7 @@ handle_dgram (struct grub_net_buff *nb,
|
||||||
&& grub_memcmp (inf->hwaddress.mac, &bootp->mac_addr,
|
&& grub_memcmp (inf->hwaddress.mac, &bootp->mac_addr,
|
||||||
sizeof (inf->hwaddress.mac)) == 0)
|
sizeof (inf->hwaddress.mac)) == 0)
|
||||||
{
|
{
|
||||||
grub_net_process_dhcp (nb, inf->card);
|
grub_net_process_dhcp (nb, inf);
|
||||||
grub_netbuff_free (nb);
|
grub_netbuff_free (nb);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -475,7 +475,7 @@ grub_net_add_ipv4_local (struct grub_net_network_level_interface *inf,
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_net_process_dhcp (struct grub_net_buff *nb,
|
grub_net_process_dhcp (struct grub_net_buff *nb,
|
||||||
struct grub_net_card *card);
|
struct grub_net_network_level_interface *iface);
|
||||||
|
|
||||||
int
|
int
|
||||||
grub_net_hwaddr_cmp (const grub_net_link_level_address_t *a,
|
grub_net_hwaddr_cmp (const grub_net_link_level_address_t *a,
|
||||||
|
|
Loading…
Reference in a new issue