/*
* Copyright (c) 2022 Jiri Svoboda
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** @addtogroup dhcp
* @{
*/
/**
* @file
* @brief DHCP standard definitions
*/
#ifndef DHCP_STD_H
#define DHCP_STD_H
#include <stdint.h>
enum {
dhcp_server_port = 67,
dhcp_client_port = 68
};
/** Fixed part of DHCP message */
typedef struct {
/** Message op code */
uint8_t op;
/** Hardware address type */
uint8_t htype;
/** Hardware address length */
uint8_t hlen;
/** Hops */
uint8_t hops;
/** Transaction ID */
uint32_t xid;
/** Seconds elapsed since client began address acqusition or renewal */
uint16_t secs;
/** Flags */
uint16_t flags;
/** Client IP address */
uint32_t ciaddr;
/** Your (client) IP address */
uint32_t yiaddr;
/** IP address of next server */
uint32_t siaddr;
/** Relay agent IP address */
uint32_t giaddr;
/** Client hardware address */
uint8_t chaddr[16];
/** Server host name */
uint8_t sname[64];
/** Boot file name */
uint8_t file[128];
/** Magic cookie signalling the start of DHCP options */
uint32_t opt_magic;
} dhcp_hdr_t;
/** Values for dhcp_hdr_t.op */
enum dhcp_op {
op_bootrequest = 1,
op_bootreply = 2
};
/** Values for dhcp_hdr_t.flags */
enum dhcp_flags {
flag_broadcast = 0x8000
};
/** Magic cookie signalling the start of DHCP options field */
enum {
dhcp_opt_magic = (99 << 24) | (130 << 16) | (83 << 8) | 99
};
enum dhcp_option_code {
/** Padding */
opt_pad = 0,
/** Subnet mask */
opt_subnet_mask = 1,
/** Router IP address */
opt_router = 3,
/** Domain name server */
opt_dns_server = 6,
/** Requested IP address */
opt_req_ip_addr = 50,
/** DHCP message type */
opt_msg_type = 53,
/** Server identifier */
opt_server_id = 54,
/** Parameter request list */
opt_param_req_list = 55,
/** End */
opt_end = 255
};
/** DHCP message type */
enum dhcp_msg_type {
msg_dhcpdiscover = 1,
msg_dhcpoffer = 2,
msg_dhcprequest = 3,
msg_dhcpdecline = 4,
msg_dhcpack = 5,
msg_dhcpnak = 6,
msg_dhcprelease = 7
};
#endif
/** @}
*/