| /** @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 */ |