/** @file
  VFR file used by the IP6 configuration component.

  Copyright (c) 2010 - 2011, 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.

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

**/

#include "Ip6NvData.h"

#define EFI_NETWORK_DEVICE_CLASS  0x04

formset
  guid     = IP6_CONFIG_NVDATA_GUID,
  title    = STRING_TOKEN(STR_IP6_CONFIG_FORM_TITLE),
  help     = STRING_TOKEN(STR_IP6_CONFIG_FORM_HELP),
  class    = EFI_NETWORK_DEVICE_CLASS,
  subclass = 0x03,

  varstore IP6_CONFIG_IFR_NVDATA,
    name = IP6_CONFIG_IFR_NVDATA,
    guid = IP6_CONFIG_NVDATA_GUID;

  form formid = FORMID_HEAD_FORM,
    title  = STRING_TOKEN(STR_IP6_DEVICE_FORM_TITLE);

    goto FORMID_MAIN_FORM,
    prompt = STRING_TOKEN (STR_GET_CURRENT_SETTING),
    help   = STRING_TOKEN (STR_GET_CURRENT_SETTING_HELP),
    flags  = INTERACTIVE,
    key    = KEY_GET_CURRENT_SETTING;

  endform;

  form formid = FORMID_MAIN_FORM,
    title  = STRING_TOKEN(STR_IP6_DEVICE_FORM_TITLE);

    text
      help   = STRING_TOKEN(STR_IP6_INTERFACE_NAME_HELP),
      text   = STRING_TOKEN(STR_IP6_INTERFACE_NAME),
        text   = STRING_TOKEN(STR_IP6_INTERFACE_NAME_CONTENT);

    text
      help   = STRING_TOKEN(STR_IP6_INTERFACE_TYPE_HELP),
      text   = STRING_TOKEN(STR_IP6_INTERFACE_TYPE),
        text   = STRING_TOKEN(STR_IP6_INTERFACE_TYPE_CONTENT);

    text
      help   = STRING_TOKEN(STR_IP6_MAC_ADDRESS_HELP),
      text   = STRING_TOKEN(STR_IP6_MAC_ADDRESS),
        text   = STRING_TOKEN(STR_IP6_MAC_ADDRESS_CONTENT);

    text
      help   = STRING_TOKEN(STR_IP6_HOST_ADDRESS_HELP),
      text   = STRING_TOKEN(STR_IP6_HOST_ADDRESS),
        text   = STRING_TOKEN(STR_NULL);

    label HOST_ADDRESS_LABEL;
    label LABEL_END;

    text
      help   = STRING_TOKEN(STR_IP6_ROUTE_TABLE_HELP),
      text   = STRING_TOKEN(STR_IP6_ROUTE_TABLE),
        text   = STRING_TOKEN(STR_NULL);

    label ROUTE_TABLE_LABEL;
    label LABEL_END;

    text
      help   = STRING_TOKEN(STR_IP6_GATEWAY_ADDRESS_HELP),
      text   = STRING_TOKEN(STR_IP6_GATEWAY_ADDRESS),
        text   = STRING_TOKEN(STR_NULL);

    label GATEWAY_ADDRESS_LABEL;
    label LABEL_END;

    text
      help   = STRING_TOKEN(STR_IP6_DNS_ADDRESS_HELP),
      text   = STRING_TOKEN(STR_IP6_DNS_ADDRESS),
        text   = STRING_TOKEN(STR_NULL);

    label DNS_ADDRESS_LABEL;
    label LABEL_END;

    string  varid   = IP6_CONFIG_IFR_NVDATA.InterfaceId,
            prompt  = STRING_TOKEN(STR_IP6_INTERFACE_ID),
            help    = STRING_TOKEN(STR_IP6_INTERFACE_ID_HELP),
            flags   = INTERACTIVE,
            key     = KEY_INTERFACE_ID,
            minsize = INTERFACE_ID_STR_MIN_SIZE,
            maxsize = INTERFACE_ID_STR_MAX_SIZE,
    endstring;

    numeric varid   = IP6_CONFIG_IFR_NVDATA.DadTransmitCount,
            prompt  = STRING_TOKEN(STR_IP6_DAD_TRANSMIT_COUNT),
            help    = STRING_TOKEN(STR_IP6_DAD_TRANSMIT_COUNT_HELP),
            flags   = 0,
            minimum = 0,
            maximum = DAD_MAX_TRANSMIT_COUNT,
            step    = 0,
    endnumeric;

    oneof varid  = IP6_CONFIG_IFR_NVDATA.Policy,
          prompt = STRING_TOKEN(STR_POLICY_TYPE_PROMPT),
          help   = STRING_TOKEN(STR_POLICY_TYPE_HELP),
          option text = STRING_TOKEN(STR_POLICY_TYPE_AUTO),   value = IP6_POLICY_AUTO,   flags = DEFAULT;
          option text = STRING_TOKEN(STR_POLICY_TYPE_MANUAL), value = IP6_POLICY_MANUAL, flags = 0;
    endoneof;

    subtitle text = STRING_TOKEN(STR_NULL);

    suppressif ideqval IP6_CONFIG_IFR_NVDATA.Policy == IP6_POLICY_AUTO;
    goto FORMID_MANUAL_CONFIG_FORM,
         prompt = STRING_TOKEN(STR_IP6_AD_CONFIG_FORM),
         help   = STRING_TOKEN(STR_IP6_AD_CONFIG_FORM_HELP),
         flags  = 0;
    subtitle text = STRING_TOKEN(STR_NULL);
    endif;

    text
      help   = STRING_TOKEN (STR_SAVE_CHANGES_HELP),
      text   = STRING_TOKEN (STR_SAVE_CHANGES),
        text   = STRING_TOKEN (STR_NULL),
      flags  = INTERACTIVE,
      key    = KEY_SAVE_CHANGES;

  endform;

  form formid = FORMID_MANUAL_CONFIG_FORM,
    title  = STRING_TOKEN(STR_IP6_AD_CONFIG_FORM);

    string  varid   = IP6_CONFIG_IFR_NVDATA.ManualAddress,
            prompt  = STRING_TOKEN(STR_IP6_MANUAL_ADDRESS),
            help    = STRING_TOKEN(STR_IP6_MANUAL_ADDRESS_HELP),
            flags   = INTERACTIVE,
            key     = KEY_MANUAL_ADDRESS,
            minsize = ADDRESS_STR_MIN_SIZE,
            maxsize = ADDRESS_STR_MAX_SIZE,
    endstring;

    string  varid   = IP6_CONFIG_IFR_NVDATA.GatewayAddress,
            prompt  = STRING_TOKEN(STR_IP6_NEW_GATEWAY_ADDRESS),
            help    = STRING_TOKEN(STR_IP6_NEW_GATEWAY_ADDR_HELP),
            flags   = INTERACTIVE,
            key     = KEY_GATEWAY_ADDRESS,
            minsize = ADDRESS_STR_MIN_SIZE,
            maxsize = ADDRESS_STR_MAX_SIZE,
    endstring;

    string  varid   = IP6_CONFIG_IFR_NVDATA.DnsAddress,
            prompt  = STRING_TOKEN(STR_IP6_NEW_DNS_ADDRESS),
            help    = STRING_TOKEN(STR_IP6_NEW_DNS_ADDRESS_HELP),
            flags   = INTERACTIVE,
            key     = KEY_DNS_ADDRESS,
            minsize = ADDRESS_STR_MIN_SIZE,
            maxsize = ADDRESS_STR_MAX_SIZE,
    endstring;

    goto FORMID_MAIN_FORM,
    prompt = STRING_TOKEN (STR_SAVE_AND_EXIT),
    help   = STRING_TOKEN (STR_SAVE_AND_EXIT),
    flags  = INTERACTIVE,
    key    = KEY_SAVE_CONFIG_CHANGES;

    goto FORMID_MAIN_FORM,
    prompt = STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
    help   = STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
    flags  = INTERACTIVE,
    key    = KEY_IGNORE_CONFIG_CHANGES;

  endform;

endformset;

