// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.net.dhcp;

using fuchsia.net;

/// A DHCP duration value, in seconds. As specified in
/// https://tools.ietf.org/html/rfc2131#section-3.3, DHCP duration values are
/// relative times.
alias Duration = uint32;

/// A DHCP option field of IP addresses.
///
/// Per https://tools.ietf.org/html/rfc2132#section-2:
///
///   All other options are variable-length with a length octet following the tag octet.
///
/// The maximum length is given by 0xFF/sizeof([`fuchsia.net.Ipv4Address`]).
alias Addresses = vector<fuchsia.net.Ipv4Address>:63;

/// A DHCP option field of ASCII characters.
///
/// Per https://tools.ietf.org/html/rfc2132#section-2:
///
///   All other options are variable-length with a length octet following the tag octet.
///
/// Valid iff it consists of characters from the ASCII character set.
alias AsciiString = string:255;

/// A indication of which DHCP message field should be used to store additional options.
type OptionOverloadValue = strict enum : byte {
    /// The file DHCP field.
    FILE = 1;
    /// The sname DHCP field.
    SNAME = 2;
    /// Both file and sname DHCP fields.
    BOTH = 3;
};

/// A NetBIOS over TCP/IP node type as defined in RFC 1001/1002. This bitflag is for use with the
/// NetBiosOverTcpipNodeType option.
type NodeTypes = strict bits : byte {
    /// A B node type.
    B_NODE = 0x1;
    /// A P node type.
    P_NODE = 0x2;
    /// A M node type.
    M_NODE = 0x4;
    /// A H node type.
    H_NODE = 0x8;
};

/// The type of DHCP message. The DHCP protocol requires that all messages identify
/// their type by including the MessageType option. These values are specified
/// in https://tools.ietf.org/html/rfc2132#section-9.6.
type MessageType = strict enum : byte {
    /// A DHCP Discover message.
    DHCPDISCOVER = 1;
    /// A DHCP Offer message.
    DHCPOFFER = 2;
    /// A DHCP Request message.
    DHCPREQUEST = 3;
    /// A DHCP Decline message.
    DHCPDECLINE = 4;
    /// A DHCP Ack message.
    DHCPACK = 5;
    /// A DHCP Nak message;
    DHCPNAK = 6;
    /// A DHCP Release message;
    DHCPRELEASE = 7;
    /// A DHCP Inform message.
    DHCPINFORM = 8;
};

/// A generic representation of client configuration parameters and DHCP settings. Options are the
/// mechanism by which the DHCP protocol communicates configuration parameters from a repository on
/// a DHCP server to DHCP clients, or by which DHCP clients and servers communicate data relevant to
/// a DHCP transaction.
/// All DHCP option values must have a length which can fit within a single byte, i.e. less than 256.
/// Options for which there is no reasonable administrator-configurable value have been omitted
/// from this xunion. The omitted options are:
/// * Pad - never has a value
/// * End - never has a value
/// * RequestedIpAddress - value always selected by the DHCP client.
/// * DhcpMessageType - value always determined by state of transaction between DHCP client and server.
/// * ServerIdentifier - value always determined by address to which the server is bound.
/// * ParameterRequestList - value always selected by the DHCP client.
/// * Message - value determined in response to runtime error.
/// * VendorClassIdentifer - value always selected by the DHCP client.
/// * ClientIdentifier - value always selected by the DHCP client.
type Option = flexible union {
    /// A 32-bit IPv4 subnet mask.
    1: subnet_mask fuchsia.net.Ipv4Address;

    /// The client's offset from UTC in seconds. A positive offset is east of the zero meridian, and
    /// a negative offset is west of the zero meridian.
    2: time_offset int32;

    /// A list of the routers in a client's subnet, listed in order of preference.
    3: router Addresses;

    /// A list of time servers available to the client, in order of preference.
    4: time_server Addresses;

    /// A list of IEN 116 Name servers available to the client, in order of preference.
    5: name_server Addresses;

    /// A list of Domain Name System servers available to the client, in order of preference;
    6: domain_name_server Addresses;

    /// A list of MIT-LCS UDP Log servers available to the client, in order of preference.
    7: log_server Addresses;

    /// A list of RFC 865 Cookie servers available to the client, in order of preference.
    8: cookie_server Addresses;

    /// A list of RFC 1179 Line Printer servers available to the client, in order of preference.
    9: lpr_server Addresses;

    /// A list of Imagen Impress servers available to the client, in order of preference.
   10: impress_server Addresses;

    /// A list of RFC 887 Resource Location servers available to the client, in order of preference.
   11: resource_location_server Addresses;

    /// The host name of the client, which may or may not be qualified with the local domain name.
   12: host_name AsciiString;

    /// The size of the client's default boot image in 512-octet blocks.
   13: boot_file_size uint16;

    /// The path name to the client's core dump in the event the client crashes.
   14: merit_dump_file AsciiString;

    /// The client's domain name for use in resolving hostnames in the DNS.
   15: domain_name AsciiString;

    /// The address of the client's swap server.
   16: swap_server fuchsia.net.Ipv4Address;

    /// The path name to the client's root disk.
   17: root_path AsciiString;

    /// The path name to a TFTP-retrievable file. This file contains data which can be interpreted
    /// as the BOOTP vendor-extension field. Unlike the BOOTP vendor-extension field, this file has
    /// an unconstrained length and any references to Tag 18 are ignored.
   18: extensions_path AsciiString;

    /// A flag which will enabled IP layer packet forwarding when true.
   19: ip_forwarding bool;

    /// A flag which will enable forwarding of IP packets with non-local source routes.
   20: non_local_source_routing bool;

    /// Policy filters for non-local source routing.
    /// A list of IP Address and Subnet Mask pairs. If an incoming source-routed packet has a
    /// next-hop that does not match one of these pairs, then the packet will be dropped.
   21: policy_filter Addresses;

    /// The maximum sized datagram that the client should be able to reassemble, in octets. The
    /// minimum legal value is 576.
   22: max_datagram_reassembly_size uint16;

    /// The default time-to-live to use on outgoing IP datagrams. The value must be between 1 and
    /// 255.
   23: default_ip_ttl byte;

    /// The timeout to be used when aging Path MTU values by the mechanism in RFC 1191.
   24: path_mtu_aging_timeout Duration;

    /// Table of MTU sizes for Path MTU Discovery.
    /// A list of MTU sizes, ordered from smallest to largest. The smallest value cannot be smaller
    /// than 68.
   25: path_mtu_plateau_table vector<uint16>:127;

    /// The MTU for the client's interface. Minimum value of 68.
   26: interface_mtu uint16;

    /// A flag indicating if all subents of the IP network to which the client is connected have the
    /// same MTU.
   27: all_subnets_local bool;

    /// The broadcast address of the client's subnet. Legal values are defined in RFC 1122.
   28: broadcast_address fuchsia.net.Ipv4Address;

    /// A flag indicating whether the client should perform subnet mask discovery via ICMP.
   29: perform_mask_discovery bool;

    /// A flag indicating whether the client should respond to subnet mask discovery requests via
    /// ICMP.
   30: mask_supplier bool;

    /// A flag indicating whether the client should solicit routers using Router Discovery as
    /// defined in RFC 1256.
   31: perform_router_discovery bool;

    /// The address to which the client should transmit Router Solicitation requests.
   32: router_solicitation_address fuchsia.net.Ipv4Address;

    /// Static Routes which the host should put in its routing cache.
    /// A list of Destination address/Next-hop address pairs defining static routes for the client's
    /// routing table. The routes should be listed in descending order of priority. It is illegal
    /// to use 0.0.0.0 as the destination in a static route.
   33: static_route Addresses;

    /// A flag specifying whether the client negotiate the use of trailers when using ARP, per RFC
    /// 893.
   34: trailer_encapsulation bool;

    /// The timeout for ARP cache entries.
   35: arp_cache_timeout Duration;

    /// A flag specifying that the client should use Ethernet v2 encapsulation when false, and IEEE
    /// 802.3 encapsulation when true.
   36: ethernet_encapsulation bool;

    /// The default time-to-live that the client should use for outgoing TCP segments. The minimum
    /// value is 1.
   37: tcp_default_ttl byte;

    /// The interval the client should wait before sending a TCP keepalive message. A
    /// value of 0 indicates that the client should not send keepalive messages unless specifically
    /// requested by an application.
   38: tcp_keepalive_interval Duration;

    /// A flag specifying whether the client should send TCP keepalive messages with an octet of
    /// garbage for compatibility with older implementations.
   39: tcp_keepalive_garbage bool;

    /// The name of the client's Network Information Service domain.
   40: network_information_service_domain AsciiString;

    /// A list of Network Information Service server addresses available to the client, listed in
    /// order of preference.
   41: network_information_servers Addresses;

    /// A list of Network Time Protocol (NTP) server addresses available to the client, listed in
    /// order of preference.
   42: network_time_protocol_servers Addresses;

    /// An opaque object of octets for exchanging vendor-specific information.
   43: vendor_specific_information vector<uint8>:255;

    /// A list of NetBIOS name server addresses available to the client, listed in order of
    /// preference.
   44: netbios_over_tcpip_name_server Addresses;

    /// A list of NetBIOS datagram distribution servers available to the client, listed in order of
    /// preference.
   45: netbios_over_tcpip_datagram_distribution_server Addresses;

    /// The NetBIOS node type which should be used by the client.
   46: netbios_over_tcpip_node_type NodeTypes;

    /// The NetBIOS over TCP/IP scope parameter, as defined in RFC 1001, for the client.
   47: netbios_over_tcpip_scope AsciiString;

    /// A list of X Window System Font server addresses available to the client, listed in order of
    /// preference.
   48: x_window_system_font_server Addresses;

    /// A list of X Window System Display Manager system addresses available to the client, listed
    /// in order of preference.
   49: x_window_system_display_manager Addresses;

    /// The name of the client's Network Information System+ domain.
   50: network_information_service_plus_domain AsciiString;

    /// A list of Network Information System+ server addresses available to the client, listed in
    /// order of preference.
   51: network_information_service_plus_servers Addresses;

    /// A list of mobile IP home agent addresses available to the client, listed in order of
    /// preference.
   52: mobile_ip_home_agent Addresses;

    /// A list of Simple Mail Transport Protocol (SMTP) server address available to the client,
    /// listed in order of preference.
   53: smtp_server Addresses;

    /// A list of Post Office Protocol (POP3) server addresses available to the client, listed in
    /// order of preference.
   54: pop3_server Addresses;

    /// A list Network News Transport Protocol (NNTP) server addresses available to the client,
    /// listed in order of preference.
   55: nntp_server Addresses;

    /// A list of default World Wide Web (WWW) server addresses available to the client, listed in
    /// order of preference.
   56: default_www_server Addresses;

    /// A list of default Finger server addresses available to the client, listed in order of
    /// preference.
   57: default_finger_server Addresses;

    /// A list of Internet Relay Chat server addresses available to the client, listed in order of
    /// preference.
   58: default_irc_server Addresses;

    /// A list of StreetTalk server addresses available to the client, listed in order of
    /// preference.
   59: streettalk_server Addresses;

    /// A list of StreetTalk Directory Assistance server addresses available to the client, listed
    /// in order of preference.
   60: streettalk_directory_assistance_server Addresses;

    /// An option specifying whether the `sname`, `file`, or both fields have been overloaded to
    /// carry DHCP options. If this option is present, the client interprets the additional fields
    /// after it concludes interpreting standard option fields.
   61: option_overload OptionOverloadValue;

    /// The TFTP server name available to the client. This option should be used when the `sname`
    /// field has been overloaded to carry options.
   62: tftp_server_name AsciiString;

    /// The bootfile name for the client. This option should be used when the `file` field has been
    /// overloaded to carry options.
   63: bootfile_name AsciiString;

    /// The maximum length in octets of a DHCP message that the participant is willing to accept.
    /// The minimum value is 576.
   64: max_dhcp_message_size uint16;

    /// The time interval after address assignment at which the client will transition
    /// to the Renewing state.
   65: renewal_time_value Duration;

    /// The time interval after address assignment at which the client will transition
    /// to the Rebinding state.
   66: rebinding_time_value Duration;
};

/// The code of a DHCP option to be retrieved by Server.GetOption(). The code
/// values are from https://tools.ietf.org/html/rfc2132 and the enum variants
/// have been listed in the order they are presented in the RFC.
type OptionCode = strict enum {
    SUBNET_MASK = 1;
    TIME_OFFSET = 2;
    ROUTER = 3;
    TIME_SERVER = 4;
    NAME_SERVER = 5;
    DOMAIN_NAME_SERVER = 6;
    LOG_SERVER = 7;
    COOKIE_SERVER = 8;
    LPR_SERVER = 9;
    IMPRESS_SERVER = 10;
    RESOURCE_LOCATION_SERVER = 11;
    HOST_NAME = 12;
    BOOT_FILE_SIZE = 13;
    MERIT_DUMP_FILE = 14;
    DOMAIN_NAME = 15;
    SWAP_SERVER = 16;
    ROOT_PATH = 17;
    EXTENSIONS_PATH = 18;
    IP_FORWARDING = 19;
    NON_LOCAL_SOURCE_ROUTING = 20;
    POLICY_FILTER = 21;
    MAX_DATAGRAM_REASSEMBLY_SIZE = 22;
    DEFAULT_IP_TTL = 23;
    PATH_MTU_AGING_TIMEOUT = 24;
    PATH_MTU_PLATEAU_TABLE = 25;
    INTERFACE_MTU = 26;
    ALL_SUBNETS_LOCAL = 27;
    BROADCAST_ADDRESS = 28;
    PERFORM_MASK_DISCOVERY = 29;
    MASK_SUPPLIER = 30;
    PERFORM_ROUTER_DISCOVERY = 31;
    ROUTER_SOLICITATION_ADDRESS = 32;
    STATIC_ROUTE = 33;
    TRAILER_ENCAPSULATION = 34;
    ARP_CACHE_TIMEOUT = 35;
    ETHERNET_ENCAPSULATION = 36;
    TCP_DEFAULT_TTL = 37;
    TCP_KEEPALIVE_INTERVAL = 38;
    TCP_KEEPALIVE_GARBAGE = 39;
    NETWORK_INFORMATION_SERVICE_DOMAIN = 40;
    NETWORK_INFORMATION_SERVERS = 41;
    NETWORK_TIME_PROTOCOL_SERVERS = 42;
    VENDOR_SPECIFIC_INFORMATION = 43;
    NETBIOS_OVER_TCPIP_NAME_SERVER = 44;
    NETBIOS_OVER_TCPIP_DATAGRAM_DISTRIBUTION_SERVER = 45;
    NETBIOS_OVER_TCPIP_NODE_TYPE = 46;
    NETBIOS_OVER_TCPIP_SCOPE = 47;
    X_WINDOW_SYSTEM_FONT_SERVER = 48;
    X_WINDOW_SYSTEM_DISPLAY_MANAGER = 49;
    NETWORK_INFORMATION_SERVICE_PLUS_DOMAIN = 64;
    NETWORK_INFORMATION_SERVICE_PLUS_SERVERS = 65;
    MOBILE_IP_HOME_AGENT = 68;
    SMTP_SERVER = 69;
    POP3_SERVER = 70;
    NNTP_SERVER = 71;
    DEFAULT_WWW_SERVER = 72;
    DEFAULT_FINGER_SERVER = 73;
    DEFAULT_IRC_SERVER = 74;
    STREETTALK_SERVER = 75;
    STREETTALK_DIRECTORY_ASSISTANCE_SERVER = 76;
    OPTION_OVERLOAD = 52;
    TFTP_SERVER_NAME = 66;
    BOOTFILE_NAME = 67;
    MAX_DHCP_MESSAGE_SIZE = 57;
    RENEWAL_TIME_VALUE = 58;
    REBINDING_TIME_VALUE = 59;
};
