| // 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 bytes: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; |
| }; |