[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 4/9] net: dhcp: make grub_net_process_dhcp take an interface
From: |
Andre Przywara |
Subject: |
[PATCH v2 4/9] net: dhcp: make grub_net_process_dhcp take an interface |
Date: |
Tue, 12 Feb 2019 17:46:55 +0000 |
From: Andrei Borzenkov <address@hidden>
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.
Signed-off-by: Andre Przywara <address@hidden>
---
grub-core/net/bootp.c | 29 ++++++++++++++++-------------
grub-core/net/ip.c | 2 +-
include/grub/net.h | 2 +-
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
index fd56de907..573398aa4 100644
--- a/grub-core/net/bootp.c
+++ b/grub-core/net/bootp.c
@@ -396,12 +396,19 @@ out:
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
grub_net_process_dhcp (struct grub_net_buff *nb,
- struct grub_net_card *card)
+ struct grub_net_network_level_interface *iface)
{
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);
if (!name)
@@ -409,22 +416,18 @@ grub_net_process_dhcp (struct grub_net_buff *nb,
grub_print_error ();
return;
}
- grub_net_configure_by_dhcp_ack (name, card,
- 0, (const struct grub_net_bootp_packet *)
nb->data,
- (nb->tail - nb->data), 0, 0, 0);
+ grub_net_configure_by_dhcp_ack (name, card, 0, bp, size, 0, 0, 0);
grub_free (name);
if (grub_errno)
grub_print_error ();
else
{
- FOR_NET_NETWORK_LEVEL_INTERFACES(inf)
- 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)
- {
- grub_net_network_level_interface_unregister (inf);
- break;
- }
+ if (grub_memcmp (iface->name, card->name, grub_strlen (card->name)) == 0
+ && grub_memcmp (iface->name + grub_strlen (card->name),
+ ":dhcp_tmp", sizeof (":dhcp_tmp") - 1) == 0)
+ {
+ grub_net_network_level_interface_unregister (iface);
+ }
}
}
diff --git a/grub-core/net/ip.c b/grub-core/net/ip.c
index 7c95cc746..ea5edf8f1 100644
--- a/grub-core/net/ip.c
+++ b/grub-core/net/ip.c
@@ -279,7 +279,7 @@ handle_dgram (struct grub_net_buff *nb,
&& grub_memcmp (inf->hwaddress.mac, &bootp->mac_addr,
sizeof (inf->hwaddress.mac)) == 0)
{
- grub_net_process_dhcp (nb, inf->card);
+ grub_net_process_dhcp (nb, inf);
grub_netbuff_free (nb);
return GRUB_ERR_NONE;
}
diff --git a/include/grub/net.h b/include/grub/net.h
index 0c7286bd2..3f649d753 100644
--- a/include/grub/net.h
+++ b/include/grub/net.h
@@ -475,7 +475,7 @@ grub_net_add_ipv4_local (struct
grub_net_network_level_interface *inf,
void
grub_net_process_dhcp (struct grub_net_buff *nb,
- struct grub_net_card *card);
+ struct grub_net_network_level_interface *iface);
int
grub_net_hwaddr_cmp (const grub_net_link_level_address_t *a,
--
2.17.1
- [PATCH v2 0/9] net: bootp: add native DHCPv4 support, Andre Przywara, 2019/02/12
- [PATCH v2 1/9] net: dhcp: remove dead code, Andre Przywara, 2019/02/12
- [PATCH v2 2/9] net: dhcp: replace parse_dhcp_vendor() with find_dhcp_option(), Andre Przywara, 2019/02/12
- [PATCH v2 3/9] net: dhcp: refactor DHCP packet transmission into separate function, Andre Przywara, 2019/02/12
- [PATCH v2 4/9] net: dhcp: make grub_net_process_dhcp take an interface,
Andre Przywara <=
- [PATCH v2 5/9] net: dhcp: introduce per-interface timeout, Andre Przywara, 2019/02/12
- [PATCH v2 6/9] net: dhcp: use DHCP options for name and bootfile, Andre Przywara, 2019/02/12
- [PATCH v2 8/9] net: dhcp: actually send out DHCPv4 DISCOVER and REQUEST messages, Andre Przywara, 2019/02/12
- [PATCH v2 7/9] net: dhcp: allow receiving DHCP OFFER and ACK packets, Andre Przywara, 2019/02/12
- [PATCH v2 9/9] net: dhcp: add explicit net_dhcp command, Andre Przywara, 2019/02/12