/** @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),
      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;

    text
      help   = STRING_TOKEN (STR_SAVE_AND_EXIT),
      text   = STRING_TOKEN (STR_SAVE_AND_EXIT),
      flags  = INTERACTIVE,
      key    = KEY_SAVE_CONFIG_CHANGES;

    text
      help   = STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
      text   = STRING_TOKEN (STR_NO_SAVE_AND_EXIT),
      flags  = INTERACTIVE,
      key    = KEY_IGNORE_CONFIG_CHANGES;

  endform;

endformset;

