NetworkPkg/Ip6Dxe: fix a bug in IP6 driver for IpSec protocol notify.
The IP driver uses EfiCreateProtocolNotifyEvent() to register notify callback function for IpSec protocol, but it didn't notice that the callback will always be executed at least once, even the protocol wasn't in handle database. As a result, the Ip6IpSecProcessPacket() will still always call LocateProtocol() even the IpSec protocol is not installed, which will impact the network performance. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Fu Siyuan <siyuan.fu@intel.com> Reviewed-by: Ye Ting <ting.ye@intel.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
IP6 internal functions to process the incoming packets.
|
||||
|
||||
Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2009 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
(C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
@@ -530,6 +530,7 @@ Ip6IpSecProcessPacket (
|
||||
if (!mIpSec2Installed) {
|
||||
goto ON_EXIT;
|
||||
}
|
||||
ASSERT (mIpSec != NULL);
|
||||
|
||||
Packet = *Netbuf;
|
||||
RecycleEvent = NULL;
|
||||
@@ -541,17 +542,6 @@ Ip6IpSecProcessPacket (
|
||||
FragmentCount = Packet->BlockOpNum;
|
||||
ZeroMem (&ZeroHead, sizeof (EFI_IP6_HEADER));
|
||||
|
||||
if (mIpSec == NULL) {
|
||||
gBS->LocateProtocol (&gEfiIpSec2ProtocolGuid, NULL, (VOID **) &mIpSec);
|
||||
|
||||
//
|
||||
// Check whether the ipsec protocol is available.
|
||||
//
|
||||
if (mIpSec == NULL) {
|
||||
goto ON_EXIT;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Check whether the ipsec enable variable is set.
|
||||
//
|
||||
|
Reference in New Issue
Block a user