Hello Jiaxin,
We've run into one more problem with PXE boot. The PXE boot is not
happening when the server tries to assign an IP address whose last octet is
zero.
The below is my configuration:
[Server Configuration]
Ipv4 address : 192.168.0.1/16
Netmask: 255.255.0.0
DHCPv4 Scope:
Range: 192.168.0.2 to 192.168.10.10
Netmask: 255.255.0.0
I've observed that in the given address range, if the server tries to
allocate any IP address with the last octet as 0 i.e., for instance 192.168.A.0
where A vary from 1 to 10, then the PXE boot fails saying "PXE-E09: Could not
allocate I/O buffers."
I agree that the x.y.z.0 and x.y.z.255 are network address any can't be
assigned based on the subnet (In this case, 192.168.0.0 and 192.168.255.255).
But here, the Netmask is different which expects the IP address x.y.a.0 which
is within the range is valid and can be assigned to any client in the network.
I captured Wireshark log and as per it, the D.O.R.A process is finished
but the client is sending a Decline packet. I suspect the function
NetIp4IsUnicast() has a role to play in this.
Please provide your comments on this.
Best regards,
Naveen
-----Original Message-----
From: Santhapur Naveen
Sent: Friday, September 02, 2016 11:46 AM
To: 'Wu, Jiaxin'; '[email protected]'
Cc: 'Ye, Ting'; 'Fu, Siyuan'
Subject: RE: [edk2] [Patch] MdeModulePkg: Support classless IP for DHCPv4
TransmitReceive()
Hello Jiaxin,
My sincere apologies for the delayed response.
I've verified the patch from my side and PXE boot is happening
successfully even in classless IP network.
May I know whether this will be included in EDK2? If yes, can you
please provide any schedule for the same?
Best regards,
Naveen
-----Original Message-----
From: Santhapur Naveen
Sent: Thursday, August 18, 2016 11:14 AM
To: 'Wu, Jiaxin'; [email protected]
Cc: Ye, Ting; Fu, Siyuan; Sivaraman Nainar; Madhan B. Santharam
Subject: RE: [edk2] [Patch] MdeModulePkg: Support classless IP for DHCPv4
TransmitReceive()
Jiaxin,
We will verify the patch and update you the result.
Thanks,
Naveen
-----Original Message-----
From: Wu, Jiaxin [mailto:[email protected]]
Sent: Thursday, August 18, 2016 11:12 AM
To: Santhapur Naveen; Wu, Jiaxin; [email protected]
Cc: Ye, Ting; Fu, Siyuan; Sivaraman Nainar; Madhan B. Santharam
Subject: RE: [edk2] [Patch] MdeModulePkg: Support classless IP for DHCPv4
TransmitReceive()
Naveen,
Can you help to verify this patch to support the classless IP.
Thanks,
Jiaxin
> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of
> Jiaxin Wu
> Sent: Thursday, August 18, 2016 1:39 PM
> To: [email protected]
> Cc: Ye, Ting <[email protected]>; Fu, Siyuan <[email protected]>;
> Santhapur Naveen <[email protected]>
> Subject: [edk2] [Patch] MdeModulePkg: Support classless IP for DHCPv4
> TransmitReceive()
>
> The IP address should not be treated as classful one if DHCP options
> contain a classless IP with its true subnet mask. Otherwise, DHCPv4
> TransmitReceive() will failed. This real subnet mask will be parsed
> and recorded in DhcpSb->Netmask. So, we need check it before get the
> IP's corresponding subnet mask.
>
> Cc: Santhapur Naveen <[email protected]>
> Cc: Ye Ting <[email protected]>
> Cc: Fu Siyuan <[email protected]>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Jiaxin Wu <[email protected]>
> ---
> .../Universal/Network/Dhcp4Dxe/Dhcp4Impl.c | 28 +++++++++++++++-
> ------
> 1 file changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c
> b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c
> index 4f491b4..79f7cde 100644
> --- a/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c
> +++ b/MdeModulePkg/Universal/Network/Dhcp4Dxe/Dhcp4Impl.c
> @@ -1,9 +1,9 @@
> /** @file
> This file implement the EFI_DHCP4_PROTOCOL interface.
>
> -Copyright (c) 2006 - 2015, Intel Corporation. All rights
> reserved.<BR>
> +Copyright (c) 2006 - 2016, Intel Corporation. All rights
> +reserved.<BR>
> This program and the accompanying materials are licensed and made
> available under the terms and conditions of the BSD License which
> accompanies this distribution. The full text of the license may be
> found at http://opensource.org/licenses/bsd-license.php
>
> @@ -1186,18 +1186,20 @@ Dhcp4InstanceConfigUdpIo (
> IN UDP_IO *UdpIo,
> IN VOID *Context
> )
> {
> DHCP_PROTOCOL *Instance;
> + DHCP_SERVICE *DhcpSb;
> EFI_DHCP4_TRANSMIT_RECEIVE_TOKEN *Token;
> EFI_UDP4_CONFIG_DATA UdpConfigData;
> IP4_ADDR ClientAddr;
> IP4_ADDR Ip;
> INTN Class;
> IP4_ADDR SubnetMask;
>
> Instance = (DHCP_PROTOCOL *) Context;
> + DhcpSb = Instance->Service;
> Token = Instance->Token;
>
> ZeroMem (&UdpConfigData, sizeof (EFI_UDP4_CONFIG_DATA));
>
> UdpConfigData.AcceptBroadcast = TRUE;
> @@ -1206,14 +1208,19 @@ Dhcp4InstanceConfigUdpIo (
> UdpConfigData.DoNotFragment = TRUE;
>
> ClientAddr = EFI_NTOHL (Token->Packet->Dhcp4.Header.ClientAddr);
> Ip = HTONL (ClientAddr);
> CopyMem (&UdpConfigData.StationAddress, &Ip, sizeof
> (EFI_IPv4_ADDRESS));
> -
> - Class = NetGetIpClass (ClientAddr);
> - ASSERT (Class < IP4_ADDR_CLASSE);
> - SubnetMask = gIp4AllMasks[Class << 3];
> +
> + if (DhcpSb->Netmask == 0) {
> + Class = NetGetIpClass (ClientAddr);
> + ASSERT (Class < IP4_ADDR_CLASSE);
> + SubnetMask = gIp4AllMasks[Class << 3]; } else {
> + SubnetMask = DhcpSb->Netmask;
> + }
> +
> Ip = HTONL (SubnetMask);
> CopyMem (&UdpConfigData.SubnetMask, &Ip, sizeof
> (EFI_IPv4_ADDRESS));
>
> if ((Token->ListenPointCount == 0) ||
> (Token->ListenPoints[0].ListenPort
> == 0)) {
> UdpConfigData.StationPort = DHCP_CLIENT_PORT; @@ -1574,16
> +1581,21 @@ EfiDhcp4TransmitReceive (
> EndPoint.RemotePort = DHCP_SERVER_PORT;
> } else {
> EndPoint.RemotePort = Token->RemotePort;
> }
>
> + if (DhcpSb->Netmask == 0) {
> + Class = NetGetIpClass (ClientAddr);
> + ASSERT (Class < IP4_ADDR_CLASSE);
> + SubnetMask = gIp4AllMasks[Class << 3]; } else {
> + SubnetMask = DhcpSb->Netmask;
> + }
> +
> //
> // Get the gateway.
> //
> - Class = NetGetIpClass (ClientAddr);
> - ASSERT (Class < IP4_ADDR_CLASSE);
> - SubnetMask = gIp4AllMasks[Class << 3];
> ZeroMem (&Gateway, sizeof (Gateway));
> if (!IP4_NET_EQUAL (ClientAddr, EndPoint.RemoteAddr.Addr[0],
> SubnetMask)) {
> CopyMem (&Gateway.v4, &Token->GatewayAddress, sizeof
> (EFI_IPv4_ADDRESS));
> Gateway.Addr[0] = NTOHL (Gateway.Addr[0]);
> }
> --
> 1.9.5.msysgit.1
>
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel