On 2023-11-14 14:28, Igor Kulchytskyy via groups.io wrote:
Filter out the network interfaces which are not supported by
Redfish Host Interface.
Cc: Abner Chang <abner.ch...@amd.com>
Cc: Nickle Wang <nick...@nvidia.com>
Signed-off-by: Igor Kulchytskyy <ig...@ami.com>
---
RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c | 163
++++++++++++++------
RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h | 6 +
2 files changed, 120 insertions(+), 49 deletions(-)
diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
index 0f622e05a9..ae83cd3c97 100644
--- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
+++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverDxe.c
@@ -1601,10 +1681,22 @@ BuildupNetworkInterface (
EFI_REDFISH_DISCOVER_REST_EX_INSTANCE_INTERNAL *RestExInstance;
EFI_TPL OldTpl;
BOOLEAN
NewNetworkInterfaceInstalled;
+ UINT8 IpType;
+ UINTN ListCount;
+ ListCount = (sizeof (gRequiredProtocol) / sizeof
(REDFISH_DISCOVER_REQUIRED_PROTOCOL));
NewNetworkInterfaceInstalled = FALSE;
Index = 0;
- do {
+
+ // Get IP Type to filter out unnecessary network protocol if possible
+ IpType = GetHiIpProtocolType ();
+
+ for (Index = 0; Index < ListCount; Index++) {
+ // Check IP Type and skip an unnecessary network protocol if does not match
+ if (IS_TCP4_MATCH (IpType) || IS_TCP6_MATCH (IpType)) {
The logic of these macros is inverted compared to their names, though.
You want this test to read
if (!IS_TCP4_MATCH (IpType) && !IS_TCP6_MATCH (IpType)) {
+ continue;
+ }
+
Status = gBS->OpenProtocol (
// Already in list?
ControllerHandle,
diff --git a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
index 01454acc1d..3093eea0d5 100644
--- a/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
+++ b/RedfishPkg/RedfishDiscoverDxe/RedfishDiscoverInternal.h
@@ -39,6 +39,12 @@
#define REDFISH_DISCOVER_VERSION 0x00010000
#define EFI_REDFISH_DISCOVER_NETWORK_INTERFACE_TPL TPL_NOTIFY
+#define MAC_COMPARE(ThisNetworkInterface, TargetNetworkInterface) (CompareMem ((VOID
*)&ThisNetworkInterface->MacAddress, &TargetNetworkInterface->MacAddress,
ThisNetworkInterface->HwAddressSize))
+#define VALID_TCP6(TargetNetworkInterface, ThisNetworkInterface)
(TargetNetworkInterface->IsIpv6 && (ThisNetworkInterface->NetworkProtocolType
== ProtocolTypeTcp6))
+#define VALID_TCP4(TargetNetworkInterface, ThisNetworkInterface)
(!TargetNetworkInterface->IsIpv6 && (ThisNetworkInterface->NetworkProtocolType
== ProtocolTypeTcp4))
+#define IS_TCP4_MATCH(IpType)
((gRequiredProtocol[Index].ProtocolType == ProtocolTypeTcp4) && (IpType !=
REDFISH_HOST_INTERFACE_HOST_IP_ADDRESS_FORMAT_IP4))
+#define IS_TCP6_MATCH(IpType)
((gRequiredProtocol[Index].ProtocolType == ProtocolTypeTcp6) && (IpType !=
REDFISH_HOST_INTERFACE_HOST_IP_ADDRESS_FORMAT_IP6))
And these macros to test for ==, not !=
Otherwise the code reads like it does the opposite of what it does.
(You could also keep the logic and call the macros IS_TCP#_MISMATCH, but
that feels a bit convoluted.)
Regards,
Leif
+
//
// GUID definitions
//
--
2.37.1.windows.1
-The information contained in this message may be confidential and proprietary
to American Megatrends (AMI). This communication is intended to be read only by
the individual or entity to whom it is addressed or by their designee. If the
reader of this message is not the intended recipient, you are on notice that
any distribution of this message, in any form, is strictly prohibited. Please
promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and
then delete or destroy all copies of the transmission.
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111212): https://edk2.groups.io/g/devel/message/111212
Mute This Topic: https://groups.io/mt/102584140/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe:
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-