]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/IScsiDxe/IScsiConfig.c
NetworkPkg: Update IP4 stack drivers for classless address unicast check.
[mirror_edk2.git] / NetworkPkg / IScsiDxe / IScsiConfig.c
index 16a90a6206aae7040f64933d6deb8677f8af345b..57571ad17b7d8c81fd892b327741fb730f4819d2 100644 (file)
@@ -164,7 +164,10 @@ IpIsUnicast (
   )\r
 {\r
   if (IpMode == IP_MODE_IP4) {\r
-    return NetIp4IsUnicast (NTOHL (Ip->Addr[0]), 0);\r
+    if (IP4_IS_UNSPECIFIED (NTOHL (Ip->Addr[0])) || IP4_IS_LOCAL_BROADCAST (NTOHL (Ip->Addr[0])))   {\r
+      return FALSE;\r
+    }\r
+    return TRUE;\r
   } else if (IpMode == IP_MODE_IP6) {\r
     return NetIp6IsValidUnicast (&Ip->v6);\r
   } else {\r
@@ -2349,7 +2352,9 @@ IScsiFormCallback (
 \r
     case KEY_LOCAL_IP:\r
       Status = NetLibStrToIp4 (IfrNvData->LocalIp, &HostIp.v4);\r
-      if (EFI_ERROR (Status) || !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), 0)) {\r
+      if (EFI_ERROR (Status) || \r
+          ((Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) && \r
+           !NetIp4IsUnicast (NTOHL (HostIp.Addr[0]), NTOHL(*(UINT32*)Private->Current->SessionConfigData.SubnetMask.Addr)))) {\r
         CreatePopUp (\r
           EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
           &Key,\r
@@ -2383,7 +2388,10 @@ IScsiFormCallback (
 \r
     case KEY_GATE_WAY:\r
       Status = NetLibStrToIp4 (IfrNvData->Gateway, &Gateway.v4);\r
-      if (EFI_ERROR (Status) || ((Gateway.Addr[0] != 0) && !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), 0))) {\r
+      if (EFI_ERROR (Status) || \r
+          ((Gateway.Addr[0] != 0) && \r
+           (Private->Current->SessionConfigData.SubnetMask.Addr[0] != 0) && \r
+           !NetIp4IsUnicast (NTOHL (Gateway.Addr[0]), NTOHL(*(UINT32*)Private->Current->SessionConfigData.SubnetMask.Addr)))) {\r
         CreatePopUp (\r
           EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
           &Key,\r
@@ -2400,7 +2408,7 @@ IScsiFormCallback (
     case KEY_TARGET_IP:\r
       UnicodeStrToAsciiStrS (IfrNvData->TargetIp, IpString, sizeof (IpString));\r
       Status = IScsiAsciiStrToIp (IpString, IfrNvData->IpMode, &HostIp);\r
-      if (EFI_ERROR (Status) || !IpIsUnicast (&HostIp, IfrNvData->IpMode)) {\r
+      if (EFI_ERROR (Status) || IP4_IS_LOCAL_BROADCAST (EFI_NTOHL(HostIp.v4)) || IP4_IS_UNSPECIFIED (EFI_NTOHL(HostIp.v4))) {\r
         CreatePopUp (\r
           EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
           &Key,\r