Re: [edk2] [Patch] ShellPkg: Get media status in ifconfig command
Attach patch and UNI file. -Original Message- From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Jiaxin Wu Sent: Friday, August 28, 2015 4:55 PM To: edk2-devel@lists.01.org Cc: Ye, Ting; Carsey, Jaben; Fu, Siyuan Subject: [edk2] [Patch] ShellPkg: Get media status in ifconfig command This patch is used to get media status in ifconfig command. Cc: Ye Ting Cc: Fu Siyuan Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu --- .../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 othersGet media status failed. +**/ +EFI_STATUS +EFIAPI +IfConfigGetNicMediaStatus ( + IN EFI_HANDLEServiceHandle, + 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; - UINT32Index; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IFCONFIG_INTERFACE_CB*IfCb; + BOOLEAN MediaPresent; + EFI_IPv4_ADDRESS Gateway; + UINT32Index; + + 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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [Patch] ShellPkg: Get media status in ifconfig command
Hi, Jiaxin The Snp->Getstatus may not support media present report, please use NetLib interface NetLibDetectMedia() instead. -Original Message- From: Wu, Jiaxin Sent: Friday, August 28, 2015 4:55 PM To: edk2-devel@lists.01.org Cc: Ye, Ting ; Fu, Siyuan ; Carsey, Jaben Subject: [Patch] ShellPkg: Get media status in ifconfig command This patch is used to get media status in ifconfig command. Cc: Ye Ting Cc: Fu Siyuan Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu --- .../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 othersGet media status failed. +**/ +EFI_STATUS +EFIAPI +IfConfigGetNicMediaStatus ( + IN EFI_HANDLEServiceHandle, + 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; - UINT32Index; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IFCONFIG_INTERFACE_CB*IfCb; + BOOLEAN MediaPresent; + EFI_IPv4_ADDRESS Gateway; + UINT32Index; + + 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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [Patch] ShellPkg: Get media status in ifconfig command
This patch is used to get media status in ifconfig command. Cc: Ye Ting Cc: Fu Siyuan Cc: Jaben Carsey Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiaxin Wu --- .../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 othersGet media status failed. +**/ +EFI_STATUS +EFIAPI +IfConfigGetNicMediaStatus ( + IN EFI_HANDLEServiceHandle, + 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; - UINT32Index; + LIST_ENTRY *Entry; + LIST_ENTRY *Next; + IFCONFIG_INTERFACE_CB*IfCb; + BOOLEAN MediaPresent; + EFI_IPv4_ADDRESS Gateway; + UINT32Index; + + 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~?2phttps://lists.01.org/mailman/listinfo/edk2-devel