/** @file
  NVData structure used by the IP6 configuration component.

  Copyright (c) 2010 - 2013, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _IP6_NV_DATA_H_
#define _IP6_NV_DATA_H_

#include <Guid/Ip6ConfigHii.h>

#define FORMID_MAIN_FORM           1
#define FORMID_MANUAL_CONFIG_FORM  2
#define FORMID_HEAD_FORM           3

#define IP6_POLICY_AUTO         0
#define IP6_POLICY_MANUAL       1
#define DAD_MAX_TRANSMIT_COUNT  10

#define KEY_INTERFACE_ID           0x101
#define KEY_MANUAL_ADDRESS         0x102
#define KEY_GATEWAY_ADDRESS        0x103
#define KEY_DNS_ADDRESS            0x104
#define KEY_SAVE_CHANGES           0x105
#define KEY_SAVE_CONFIG_CHANGES    0x106
#define KEY_IGNORE_CONFIG_CHANGES  0x107
#define KEY_GET_CURRENT_SETTING    0x108

#define HOST_ADDRESS_LABEL     0x9000
#define ROUTE_TABLE_LABEL      0xa000
#define GATEWAY_ADDRESS_LABEL  0xb000
#define DNS_ADDRESS_LABEL      0xc000
#define LABEL_END              0xffff

#define INTERFACE_ID_STR_MIN_SIZE  1
#define INTERFACE_ID_STR_MAX_SIZE  23
#define INTERFACE_ID_STR_STORAGE   25
#define IP6_STR_MAX_SIZE           40
#define ADDRESS_STR_MIN_SIZE       2
#define ADDRESS_STR_MAX_SIZE       255

///
/// IP6_CONFIG_IFR_NVDATA contains the IP6 configure
/// parameters for that NIC.
///
#pragma pack(1)
typedef struct {
  UINT8     IfType;                                       ///< interface type
  UINT8     Padding[3];
  UINT32    Policy;                                       ///< manual or automatic
  UINT32    DadTransmitCount;                             ///< dad transmits count
  CHAR16    InterfaceId[INTERFACE_ID_STR_STORAGE];        ///< alternative interface id
  CHAR16    ManualAddress[ADDRESS_STR_MAX_SIZE];          ///< IP addresses
  CHAR16    GatewayAddress[ADDRESS_STR_MAX_SIZE];         ///< Gateway address
  CHAR16    DnsAddress[ADDRESS_STR_MAX_SIZE];             ///< DNS server address
} IP6_CONFIG_IFR_NVDATA;
#pragma pack()

#endif
