File grub2-efinet-ipv6-dhcpv6-use-mac-device.patch of Package grub2.2174
Index: grub-2.02~beta2/grub-core/net/bootp.c
===================================================================
--- grub-2.02~beta2.orig/grub-core/net/bootp.c
+++ grub-2.02~beta2/grub-core/net/bootp.c
@@ -1228,6 +1228,10 @@ grub_cmd_bootp6 (struct grub_command *cm
{
if (argc > 0 && grub_strcmp (card->name, args[0]) != 0)
continue;
+#ifdef GRUB_MACHINE_EFI
+ else if (!card->is_efi_mac_device (card))
+ continue;
+#endif
ncards++;
}
@@ -1237,6 +1241,10 @@ grub_cmd_bootp6 (struct grub_command *cm
if (argc > 0 && grub_strcmp (card->name, args[0]) != 0)
continue;
+#ifdef GRUB_MACHINE_EFI
+ else if (!card->is_efi_mac_device (card))
+ continue;
+#endif
ifaces = grub_net_ipv6_get_link_local (card, &card->default_address);
if (!ifaces)
Index: grub-2.02~beta2/grub-core/net/drivers/efi/efinet.c
===================================================================
--- grub-2.02~beta2.orig/grub-core/net/drivers/efi/efinet.c
+++ grub-2.02~beta2/grub-core/net/drivers/efi/efinet.c
@@ -145,6 +145,45 @@ grub_efinet_get_device_handle (struct gr
return card->efi_handle;
}
+static int
+grub_efinet_is_mac_device (struct grub_net_card *card)
+{
+ grub_efi_handle_t efi_handle;
+ grub_efi_device_path_t *dp;
+ grub_efi_device_path_t *next, *p;
+ grub_efi_uint8_t type;
+ grub_efi_uint8_t subtype;
+
+ efi_handle = grub_efinet_get_device_handle (card);
+
+ if (!efi_handle)
+ return 0;
+
+ dp = grub_efi_get_device_path (efi_handle);
+
+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
+ return 0;
+
+ for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p);
+ ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next);
+ p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next))
+ ;
+
+ if (p)
+ {
+ type = GRUB_EFI_DEVICE_PATH_TYPE (p);
+ subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (p);
+
+ if (type == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE
+ && subtype == GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE)
+ {
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
static void
grub_efinet_findcards (void)
{
@@ -211,6 +250,7 @@ grub_efinet_findcards (void)
sizeof (card->default_address.mac));
card->efi_net = net;
card->efi_handle = *handle;
+ card->is_efi_mac_device = grub_efinet_is_mac_device;
grub_net_card_register (card);
}
Index: grub-2.02~beta2/include/grub/net.h
===================================================================
--- grub-2.02~beta2.orig/include/grub/net.h
+++ grub-2.02~beta2/include/grub/net.h
@@ -140,6 +140,7 @@ struct grub_net_card
struct grub_efi_simple_network *efi_net;
grub_efi_handle_t efi_handle;
grub_size_t last_pkt_size;
+ int (*is_efi_mac_device) (struct grub_net_card* card);
};
#endif
void *data;