/** @file * * @brief DHCPv4 handler. * * This is not to be included by the application. */ /* * Copyright (c) 2017 ARM Ltd. * Copyright (c) 2018 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #ifndef __INTERNAL_DHCPV4_H #define __INTERNAL_DHCPV4_H struct dhcp_msg { uint8_t op; /* Message type, 1:BOOTREQUEST, 2:BOOTREPLY */ uint8_t htype; /* Hardware Address Type */ uint8_t hlen; /* Hardware Address length */ uint8_t hops; /* used by relay agents when booting via relay * agent, client sets zero */ uint32_t xid; /* Transaction ID, random number */ uint16_t secs; /* Seconds elapsed since client began address * acquisition or renewal process */ uint16_t flags; /* Broadcast or Unicast */ uint8_t ciaddr[4]; /* Client IP Address */ uint8_t yiaddr[4]; /* your (client) IP address */ uint8_t siaddr[4]; /* IP address of next server to use in bootstrap * returned in DHCPOFFER, DHCPACK by server */ uint8_t giaddr[4]; /* Relat agent IP address */ uint8_t chaddr[16]; /* Client hardware address */ } __packed; #define SIZE_OF_SNAME 64 #define SIZE_OF_FILE 128 #define SIZE_OF_MAGIC_COOKIE 4 #define DHCPV4_MSG_BROADCAST 0x8000 #define DHCPV4_MSG_UNICAST 0x0000 #define DHCPV4_MSG_BOOT_REQUEST 1 #define DHCPV4_MSG_BOOT_REPLY 2 #define HARDWARE_ETHERNET_TYPE 1 #define DHCPV4_SERVER_PORT 67 #define DHCPV4_CLIENT_PORT 68 /* These enumerations represent RFC2131 defined msy type codes, hence * they should not be renumbered. */ enum dhcpv4_msg_type { DHCPV4_MSG_TYPE_DISCOVER = 1, DHCPV4_MSG_TYPE_OFFER = 2, DHCPV4_MSG_TYPE_REQUEST = 3, DHCPV4_MSG_TYPE_DECLINE = 4, DHCPV4_MSG_TYPE_ACK = 5, DHCPV4_MSG_TYPE_NAK = 6, DHCPV4_MSG_TYPE_RELEASE = 7, DHCPV4_MSG_TYPE_INFORM = 8, }; #define DHCPV4_OPTIONS_SUBNET_MASK 1 #define DHCPV4_OPTIONS_ROUTER 3 #define DHCPV4_OPTIONS_DNS_SERVER 6 #define DHCPV4_OPTIONS_HOST_NAME 12 #define DHCPV4_OPTIONS_REQ_IPADDR 50 #define DHCPV4_OPTIONS_LEASE_TIME 51 #define DHCPV4_OPTIONS_MSG_TYPE 53 #define DHCPV4_OPTIONS_SERVER_ID 54 #define DHCPV4_OPTIONS_REQ_LIST 55 #define DHCPV4_OPTIONS_RENEWAL 58 #define DHCPV4_OPTIONS_REBINDING 59 #define DHCPV4_OPTIONS_END 255 /* Useful size macros */ #define DHCPV4_OLV_MSG_HOST_NAME 2 #define DHCPV4_OLV_MSG_REQ_IPADDR 6 #define DHCPV4_OLV_MSG_TYPE_SIZE 3 #define DHCPV4_OLV_MSG_SERVER_ID 6 #define DHCPV4_OLV_MSG_REQ_LIST 5 #define DHCPV4_OLV_END_SIZE 1 #define DHCPV4_MESSAGE_SIZE (sizeof(struct dhcp_msg) + \ SIZE_OF_SNAME + SIZE_OF_FILE + \ SIZE_OF_MAGIC_COOKIE + \ DHCPV4_OLV_MSG_TYPE_SIZE + \ DHCPV4_OLV_END_SIZE) /* TODO: * 1) Support for UNICAST flag (some dhcpv4 servers will not reply if * DISCOVER message contains BROADCAST FLAG). * 2) Support T2(Rebind) timer. */ /* Maximum number of REQUEST or RENEWAL retransmits before reverting * to DISCOVER. */ #define DHCPV4_MAX_NUMBER_OF_ATTEMPTS 3 /* Initial message retry timeout (s). This timeout increases * exponentially on each retransmit. * RFC2131 4.1 */ #define DHCPV4_INITIAL_RETRY_TIMEOUT 4 /* Initial minimum delay in INIT state before sending the * initial DISCOVER message. MAx value is defined with * CONFIG_NET_DHCPV4_INITIAL_DELAY_MAX. Default max value * should be 10. * RFC2131 4.1.1 */ #define DHCPV4_INITIAL_DELAY_MIN 1 #if defined(CONFIG_NET_DHCPV4) int net_dhcpv4_init(void); #else #define net_dhcpv4_init() 0 #endif /* CONFIG_NET_DHCPV4 */ #endif /* __INTERNAL_DHCPV4_H */