This patch is used to get media status in ifconfig command.
Cc: Ye Ting <[email protected]>
Cc: Fu Siyuan <[email protected]>
Cc: Jaben Carsey <[email protected]>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jiaxin Wu <[email protected]>
---
.../UefiShellNetwork1CommandsLib/Ifconfig.c | 85 +++++++++++++++++++--
.../UefiShellNetwork1CommandsLib.uni | Bin 20910 -> 21094 bytes
2 files changed, 80 insertions(+), 5 deletions(-)
diff --git a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
index 273f1a8..4637f28 100644
--- a/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
+++ b/ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
@@ -378,10 +378,68 @@ IfConfigPrintMacAddr (
}
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_NEWLINE),
gShellNetwork1HiiHandle);
}
+/**
+ Get network physical device NIC information.
+
+ @param[in] Handle The network physical device handle.
+ @param[out] MediaPresent Upon successful return, TRUE is media present
+ is enabled. FALSE otherwise.
+
+ @retval EFI_SUCCESS The operation was successful.
+ @retval others Get media status failed.
+**/
+EFI_STATUS
+EFIAPI
+IfConfigGetNicMediaStatus (
+ IN EFI_HANDLE ServiceHandle,
+ OUT BOOLEAN *MediaPresent
+ )
+
+{
+ EFI_STATUS Status;
+ EFI_HANDLE SnpHandle;
+ EFI_SIMPLE_NETWORK_PROTOCOL *Snp;
+ UINT32 InterruptStatus;
+
+ ASSERT (MediaPresent != NULL);
+
+ //
+ // Get SNP handle
+ //
+ Snp = NULL;
+ SnpHandle = NetLibGetSnpHandle (ServiceHandle, &Snp);
+ if (SnpHandle == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ //
+ // Check whether SNP support media detection
+ //
+ if (!Snp->Mode->MediaPresentSupported) {
+ return EFI_UNSUPPORTED;
+ }
+
+ //
+ // Invoke Snp->GetStatus() to refresh MediaPresent field in SNP mode data
+ //
+ Status = Snp->GetStatus (Snp, &InterruptStatus, NULL);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ if (Snp->Mode->MediaPresent) {
+ *MediaPresent = TRUE;
+ } else {
+ *MediaPresent = FALSE;
+ }
+
+ return EFI_SUCCESS;
+}
+
/**
The get current status of all handles.
@param[in] IfName The pointer of IfName(interface name).
@@ -594,15 +652,18 @@ ON_ERROR:
EFI_STATUS
IfConfigShowInterfaceInfo (
IN LIST_ENTRY *IfList
)
{
- LIST_ENTRY *Entry;
- LIST_ENTRY *Next;
- IFCONFIG_INTERFACE_CB *IfCb;
- EFI_IPv4_ADDRESS Gateway;
- UINT32 Index;
+ LIST_ENTRY *Entry;
+ LIST_ENTRY *Next;
+ IFCONFIG_INTERFACE_CB *IfCb;
+ BOOLEAN MediaPresent;
+ EFI_IPv4_ADDRESS Gateway;
+ UINT32 Index;
+
+ MediaPresent = TRUE;
if (IsListEmpty (IfList)) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
(STR_IFCONFIG_INVALID_INTERFACE), gShellNetwork1HiiHandle);
}
@@ -618,10 +679,24 @@ IfConfigShowInterfaceInfo (
// Print interface name.
//
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_INFO_IF_NAME),
gShellNetwork1HiiHandle, IfCb->IfInfo->Name);
//
+ // Get media state.
+ //
+ IfConfigGetNicMediaStatus (IfCb->NicHandle, &MediaPresent);
+
+ //
+ // Print media state.
+ //
+ if (!MediaPresent) {
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
(STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media
disconnected");
+ } else {
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
(STR_IFCONFIG_INFO_MEDIA_STATE), gShellNetwork1HiiHandle, L"Media present");
+ }
+
+ //
// Print interface config policy.
//
if (IfCb->Policy == Ip4Config2PolicyDhcp) {
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN
(STR_IFCONFIG_INFO_POLICY_DHCP), gShellNetwork1HiiHandle);
} else {
diff --git
a/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
b/ShellPkg/Library/UefiShellNetwork1CommandsLib/UefiShellNetwork1CommandsLib.uni
index
7cc7b7d672246a62ef97a8b002a780003d3da330..43259591820582cc38937ad680739fcff21b96c5
100644
GIT binary patch
delta 66
zcmZ3tnDN;X#toCSgnb!Y8C)1V85|kn8G;!?fON>@hnk|30}QmpJs5l$QW;VhG8qyX
S6o9fNK)Qq>b+fZpwmJY$n-Ez5
delta 14
WcmaF1gmK+s#toCSHhXEyr~?2p<OQ_=
--
1.9.5.msysgit.1
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel