[if gte mso 9]>
Subject: Re: [edk2] Ipv6 support in DxePxeBaseCode driver
From: Ari Zigler <firstname.lastname@example.org>
To: "Fu, Siyuan" <email@example.com>
Date: 2013-11-19 15:55:28
Thanks for your prompt reply.
I want to use my UNDI driver over Infiniband (IB) medium and I currently don’t want to implement the L3-L2 translations (as I use IPoIB implementation and things get nasty there once Ipv6 in picture).
I think that implicitly depending on specific network protocol (in this case – Ethernet) is not recommended and should not be taken for granted in specs. Moreover – the spec doesn’t say anything about Ipv6Supported being used only for translation but rather for support as a whole (including L3-L2 translations).
I also think that I have backed my theorem with the PxeBC section in the spec that states that the Ipv6Available flag shall only be used if the SNP driver supports Ipv6. And that thing is not being enforced in the current implementation.
I’m familiar with the implementation of MnpDxe and indeed it does the translation if the IfType is PXE_IFTYPE_ETHERNET but that is not our case, and the translation is being forwarded to Snp and eventually to our UNDI implementation.
Bottom line – I think there is place to start thinking of how to align current Implementation to spec (involves, AFAIK, SnpDxe and Ipv6Dxe drivers).
First we need to know whether you are using Ethernet or another network medium. The SNP driver doesn’t check the Ipv6Supported from UNDI driver indeed, and it’s not necessary on Ethernet. The “Ipv6Supported” in UNDI layer typically means the IPv6 to MAC address translate commands, and over Ethernet the address translation mechanism is defined in RFCs and implemented in EDKII MnpDxe driver. So I think EDKII IPv6 drivers can provide IPv6 support to PXE driver, even though the UNDI doesn’t support IPv6. But if you are not using Ethernet, then the IPv6 support from UNDI driver is needed at least we need it to translate the multicast address.
I have a UNDI driver that doesn’t support Ipv6. I explicitly set Undi protocol structure’s “Ipv6Supported” field to FALSE.
The UEFI spec (2.4) dictates that PxeBC shall set its “Ipv6Available” field according to its underlying SNP Ipv6 capability (p. 996):
“Ipv6AvailableTRUE if the Simple Network Protocol being used supports IPv6.”
Nevertheless, it seems like all of the drivers being used by PxeBC ignores the UNDI’s “Ipv6Supported” flag, especially DxeIpv6 driver which shall NOT support SNP driver if its UNDI driver doesn’t support Ipv6. As a consequence, PxeBC display an option to boot over IPv6, even though it’s impossible!
The problem gets even more complicated when we look at SNP spec as (and I say that humbly) there is actually no way of getting this information out of SNP.
Am I missing something? What is the proper way to inform PxeBC of Ipv6 support?
You help will be highly appreciated.