Reviewed-by: Fu Siyuan <siyuan...@intel.com>
> -----Original Message----- > From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of > Wang Fan > Sent: Thursday, January 11, 2018 6:20 PM > To: edk2-devel@lists.01.org > Cc: Ye, Ting <ting...@intel.com>; Fu, Siyuan <siyuan...@intel.com>; Wu, > Jiaxin <jiaxin...@intel.com> > Subject: [edk2] [Patch] MdeModulePkg/Ip4Dxe: Add an independent timer for > reconfig checking > > * Since wireless network can switch at very short time, the time interval > of reconfig event checking is too long for this case. To achieve better > performance and scalability, separate this task from Ip4 tick timer. > > Cc: Jiaxin Wu <jiaxin...@intel.com> > Cc: Ye Ting <ting...@intel.com> > Cc: Fu Siyuan <siyuan...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Wang Fan <fan.w...@intel.com> > --- > MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c | 28 +++++++++++++- > MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c | 47 +++++++++++++++--- > ----- > MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h | 30 ++++++++++++--- > 3 files changed, 83 insertions(+), 22 deletions(-) > > diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c > b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c > index 49b7dc5..552c4e1 100644 > --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c > +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Driver.c > @@ -1,9 +1,9 @@ > /** @file > The driver binding and service binding protocol for IP4 driver. > > -Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR> > (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR> > > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > @@ -251,10 +251,11 @@ Ip4CreateService ( > IpSb->MnpConfigData.DisableBackgroundPolling = FALSE; > > ZeroMem (&IpSb->SnpMode, sizeof (EFI_SIMPLE_NETWORK_MODE)); > > IpSb->Timer = NULL; > + IpSb->ReconfigCheckTimer = NULL; > > IpSb->ReconfigEvent = NULL; > > IpSb->Reconfig = FALSE; > > @@ -283,10 +284,22 @@ Ip4CreateService ( > if (EFI_ERROR (Status)) { > goto ON_ERROR; > } > > Status = gBS->CreateEvent ( > + EVT_NOTIFY_SIGNAL | EVT_TIMER, > + TPL_CALLBACK, > + Ip4TimerReconfigChecking, > + IpSb, > + &IpSb->ReconfigCheckTimer > + ); > + > + if (EFI_ERROR (Status)) { > + goto ON_ERROR; > + } > + > + Status = gBS->CreateEvent ( > EVT_NOTIFY_SIGNAL, > TPL_NOTIFY, > Ip4AutoReconfigCallBack, > IpSb, > &IpSb->ReconfigEvent > @@ -408,10 +421,17 @@ Ip4CleanService ( > gBS->CloseEvent (IpSb->Timer); > > IpSb->Timer = NULL; > } > > + if (IpSb->ReconfigCheckTimer != NULL) { > + gBS->SetTimer (IpSb->ReconfigCheckTimer, TimerCancel, 0); > + gBS->CloseEvent (IpSb->ReconfigCheckTimer); > + > + IpSb->ReconfigCheckTimer = NULL; > + } > + > if (IpSb->DefaultInterface != NULL) { > Status = Ip4FreeInterface (IpSb->DefaultInterface, NULL); > > if (EFI_ERROR (Status)) { > return Status; > @@ -628,10 +648,16 @@ Ip4DriverBindingStart ( > > if (EFI_ERROR (Status)) { > goto UNINSTALL_PROTOCOL; > } > > + Status = gBS->SetTimer (IpSb->ReconfigCheckTimer, TimerPeriodic, 500 * > TICKS_PER_MS); > + > + if (EFI_ERROR (Status)) { > + goto UNINSTALL_PROTOCOL; > + } > + > // > // Initialize the IP4 ID > // > mIp4Id = (UINT16)NET_RANDOM (NetRandomInitSeed ()); > > diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c > b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c > index ac48ad2..b5cd7b7 100644 > --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c > +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.c > @@ -1,8 +1,8 @@ > /** @file > > -Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR> > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > http://opensource.org/licenses/bsd-license.php > > @@ -2247,22 +2247,14 @@ Ip4SentPacketTicking ( > } > > return EFI_SUCCESS; > } > > - > /** > - There are two steps for this the heart beat timer of IP4 service > instance. > - First, it times out all of its IP4 children's received-but-not- > delivered > - and transmitted-but-not-recycle packets, and provides time input for > its > - IGMP protocol. > - Second, a dedicated timer is used to poll underlying media status. In > case > - of cable swap, a new round auto configuration will be initiated. The > timer > - will signal the IP4 to run DHCP configuration again. IP4 driver will > free > - old IP address related resource, such as route table and Interface, > then > - initiate a DHCP process to acquire new IP, eventually create route > table > - for new IP address. > + This heart beat timer of IP4 service instance times out all of its IP4 > children's > + received-but-not-delivered and transmitted-but-not-recycle packets, and > provides > + time input for its IGMP protocol. > > @param[in] Event The IP4 service instance's heart > beat timer. > @param[in] Context The IP4 service instance. > > **/ > @@ -2272,22 +2264,47 @@ Ip4TimerTicking ( > IN EFI_EVENT Event, > IN VOID *Context > ) > { > IP4_SERVICE *IpSb; > + > + IpSb = (IP4_SERVICE *) Context; > + NET_CHECK_SIGNATURE (IpSb, IP4_SERVICE_SIGNATURE); > + > + Ip4PacketTimerTicking (IpSb); > + Ip4IgmpTicking (IpSb); > +} > + > +/** > + This dedicated timer is used to poll underlying network media status. > In case > + of cable swap or wireless network switch, a new round auto > configuration will > + be initiated. The timer will signal the IP4 to run DHCP configuration > again. > + IP4 driver will free old IP address related resource, such as route > table and > + Interface, then initiate a DHCP process to acquire new IP, eventually > create > + route table for new IP address. > + > + @param[in] Event The IP4 service instance's heart > beat timer. > + @param[in] Context The IP4 service instance. > + > +**/ > +VOID > +EFIAPI > +Ip4TimerReconfigChecking ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ) > +{ > + IP4_SERVICE *IpSb; > BOOLEAN OldMediaPresent; > EFI_STATUS Status; > EFI_SIMPLE_NETWORK_MODE SnpModeData; > > IpSb = (IP4_SERVICE *) Context; > NET_CHECK_SIGNATURE (IpSb, IP4_SERVICE_SIGNATURE); > > OldMediaPresent = IpSb->MediaPresent; > > - Ip4PacketTimerTicking (IpSb); > - Ip4IgmpTicking (IpSb); > - > // > // Get fresh mode data from MNP, since underlying media status may > change. > // Here, it needs to mention that the MediaPresent can also be checked > even if > // EFI_NOT_STARTED returned while this MNP child driver instance isn't > configured. > // > diff --git a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h > b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h > index f6b4047..8bdc39a 100644 > --- a/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h > +++ b/MdeModulePkg/Universal/Network/Ip4Dxe/Ip4Impl.h > @@ -1,9 +1,9 @@ > /** @file > Ip4 internal functions and type defintions. > > -Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR> > +Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR> > (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR> > > This program and the accompanying materials > are licensed and made available under the terms and conditions of the BSD > License > which accompanies this distribution. The full text of the license may be > found at > @@ -204,11 +204,11 @@ struct _IP4_SERVICE { > > EFI_MANAGED_NETWORK_CONFIG_DATA MnpConfigData; > EFI_SIMPLE_NETWORK_MODE SnpMode; > > EFI_EVENT Timer; > - > + EFI_EVENT ReconfigCheckTimer; > EFI_EVENT ReconfigEvent; > > BOOLEAN Reconfig; > > // > @@ -332,14 +332,13 @@ Ip4Groups ( > IN BOOLEAN JoinFlag, > IN EFI_IPv4_ADDRESS *GroupAddress OPTIONAL > ); > > /** > - The heart beat timer of IP4 service instance. It times out > - all of its IP4 children's received-but-not-delivered and > - transmitted-but-not-recycle packets, and provides time input > - for its IGMP protocol. > + This heart beat timer of IP4 service instance times out all of its IP4 > children's > + received-but-not-delivered and transmitted-but-not-recycle packets, and > provides > + time input for its IGMP protocol. > > @param[in] Event The IP4 service instance's heart > beat timer. > @param[in] Context The IP4 service instance. > > **/ > @@ -349,10 +348,29 @@ Ip4TimerTicking ( > IN EFI_EVENT Event, > IN VOID *Context > ); > > /** > + This dedicated timer is used to poll underlying network media status. > In case > + of cable swap or wireless network switch, a new round auto > configuration will > + be initiated. The timer will signal the IP4 to run DHCP configuration > again. > + IP4 driver will free old IP address related resource, such as route > table and > + Interface, then initiate a DHCP process to acquire new IP, eventually > create > + route table for new IP address. > + > + @param[in] Event The IP4 service instance's heart > beat timer. > + @param[in] Context The IP4 service instance. > + > +**/ > +VOID > +EFIAPI > +Ip4TimerReconfigChecking ( > + IN EFI_EVENT Event, > + IN VOID *Context > + ); > + > +/** > Decrease the life of the transmitted packets. If it is > decreased to zero, cancel the packet. This function is > called by Ip4PacketTimerTicking which time out both the > received-but-not-delivered and transmitted-but-not-recycle > packets. > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel