[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 14/14] net: add interfaces when we open a card
From: |
Josef Bacik |
Subject: |
[PATCH 14/14] net: add interfaces when we open a card |
Date: |
Wed, 10 Feb 2016 13:21:08 -0800 |
Since we've started adding addresses to the multicast filter in efi we need to
make sure that any addresses that are added before we call ->open are added as
well. This can happen when we configure interfaces from the dhcp packet left in
the pxe config. Do this in a helper function and have the two people that call
->open use the helper function instead. Thanks,
Signed-off-by: Josef Bacik <address@hidden>
---
grub-core/net/ethernet.c | 12 +++---------
grub-core/net/net.c | 43 +++++++++++++++++++++++++++++++------------
include/grub/net.h | 3 +++
3 files changed, 37 insertions(+), 21 deletions(-)
diff --git a/grub-core/net/ethernet.c b/grub-core/net/ethernet.c
index c397b1b..443ac7b 100644
--- a/grub-core/net/ethernet.c
+++ b/grub-core/net/ethernet.c
@@ -67,15 +67,9 @@ send_ethernet_packet (struct
grub_net_network_level_interface *inf,
grub_memcpy (eth->src, inf->hwaddress.mac, 6);
eth->type = grub_cpu_to_be16 (ethertype);
- if (!inf->card->opened)
- {
- err = GRUB_ERR_NONE;
- if (inf->card->driver->open)
- err = inf->card->driver->open (inf->card);
- if (err)
- return err;
- inf->card->opened = 1;
- }
+ err = net_open_card (inf->card);
+ if (err)
+ return err;
return inf->card->driver->send (inf->card, nb);
}
diff --git a/grub-core/net/net.c b/grub-core/net/net.c
index e04a35b..599a311 100644
--- a/grub-core/net/net.c
+++ b/grub-core/net/net.c
@@ -1460,24 +1460,43 @@ grub_net_fs_close (grub_file_t file)
return GRUB_ERR_NONE;
}
+grub_err_t
+net_open_card (struct grub_net_card *card)
+{
+ struct grub_net_network_level_interface *inf;
+ grub_err_t err = GRUB_ERR_NONE;
+
+ if (card->opened)
+ return err;
+
+ if (card->driver->open)
+ err = card->driver->open (card);
+ if (err)
+ return err;
+ card->opened = 1;
+
+ if (!card->driver->add_addr)
+ return err;
+
+ FOR_NET_NETWORK_LEVEL_INTERFACES (inf)
+ {
+ if (inf->card == card)
+ card->driver->add_addr(card, &inf->address);
+ }
+ return err;
+}
+
static void
receive_packets (struct grub_net_card *card, int *stop_condition)
{
int received = 0;
+ grub_err_t err;
+
if (card->num_ifaces == 0)
return;
- if (!card->opened)
- {
- grub_err_t err = GRUB_ERR_NONE;
- if (card->driver->open)
- err = card->driver->open (card);
- if (err)
- {
- grub_errno = GRUB_ERR_NONE;
- return;
- }
- card->opened = 1;
- }
+ err = net_open_card (card);
+ if (err)
+ return;
while (received < 100)
{
/* Maybe should be better have a fixed number of packets for each card
diff --git a/include/grub/net.h b/include/grub/net.h
index 393ad3c..7e54f55 100644
--- a/include/grub/net.h
+++ b/include/grub/net.h
@@ -341,6 +341,9 @@ grub_net_add_addr (const char *name,
const grub_net_link_level_address_t *hwaddress,
grub_net_interface_flags_t flags);
+grub_err_t
+net_open_card (struct grub_net_card *card);
+
extern struct grub_net_network_level_interface
*grub_net_network_level_interfaces;
#define FOR_NET_NETWORK_LEVEL_INTERFACES(var) for (var =
grub_net_network_level_interfaces; var; var = var->next)
#define FOR_NET_NETWORK_LEVEL_INTERFACES_SAFE(var,next) for (var =
grub_net_network_level_interfaces, next = (var ? var->next : 0); var; var =
next, next = (var ? var->next : 0))
--
1.8.1
- Re: [PATCH 10/14] dns: poll card between each dns request, (continued)
- [PATCH 12/14] icmp6: use default interface as the route interface, Josef Bacik, 2016/02/10
- [PATCH 04/14] tcp: add window scaling and RTTM support, Josef Bacik, 2016/02/10
- [PATCH 01/14] Added net_bootp6 command, Josef Bacik, 2016/02/10
- [PATCH 02/14] UEFI IPv6 PXE support, Josef Bacik, 2016/02/10
- [PATCH 05/14] net: don't free uninitialized sockets in dns, Josef Bacik, 2016/02/10
- [PATCH 07/14] efinet: retransmit if our device is busy, Josef Bacik, 2016/02/10
- [PATCH 03/14] Use UEFI MAC device as default configured by net_bootp6, Josef Bacik, 2016/02/10
- [PATCH 14/14] net: add interfaces when we open a card,
Josef Bacik <=
- [PATCH 06/14] net: fix ipv6 routing, Josef Bacik, 2016/02/10