/** @file
  GUIDs used as HII FormSet and HII Package list GUID in Ip4Dxe driver. 
  
Copyright (c) 2015, 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 that accompanies this distribution.  
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.                                            

THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#ifndef __IP4_CONFIG2_HII_GUID_H__
#define __IP4_CONFIG2_HII_GUID_H__

#define IP4_CONFIG2_NVDATA_GUID \
  { \
    0x9b942747, 0x154e, 0x4d29, { 0xa4, 0x36, 0xbf, 0x71, 0x0, 0xc8, 0xb5, 0x3b } \
  }

extern EFI_GUID gIp4Config2NvDataGuid;

#endif
