2017-11-18 17:09:20 +01:00
|
|
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
2013-12-09 22:43:07 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
/***
|
|
|
|
Copyright (C) 2013 Intel Corporation. All rights reserved.
|
|
|
|
***/
|
|
|
|
|
|
|
|
#include <netinet/ip.h>
|
2015-11-18 22:46:33 +01:00
|
|
|
#include <netinet/udp.h>
|
2013-12-09 22:43:07 +01:00
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
#include "macro.h"
|
|
|
|
#include "sparse-endian.h"
|
|
|
|
|
|
|
|
struct DHCPMessage {
|
|
|
|
uint8_t op;
|
|
|
|
uint8_t htype;
|
|
|
|
uint8_t hlen;
|
|
|
|
uint8_t hops;
|
|
|
|
be32_t xid;
|
|
|
|
be16_t secs;
|
|
|
|
be16_t flags;
|
2013-12-20 16:16:10 +01:00
|
|
|
be32_t ciaddr;
|
|
|
|
be32_t yiaddr;
|
|
|
|
be32_t siaddr;
|
|
|
|
be32_t giaddr;
|
2013-12-09 22:43:07 +01:00
|
|
|
uint8_t chaddr[16];
|
|
|
|
uint8_t sname[64];
|
|
|
|
uint8_t file[128];
|
2014-04-06 14:05:32 +02:00
|
|
|
be32_t magic;
|
2014-05-20 11:04:50 +02:00
|
|
|
uint8_t options[0];
|
2013-12-09 22:43:07 +01:00
|
|
|
} _packed_;
|
|
|
|
|
|
|
|
typedef struct DHCPMessage DHCPMessage;
|
|
|
|
|
|
|
|
struct DHCPPacket {
|
|
|
|
struct iphdr ip;
|
|
|
|
struct udphdr udp;
|
|
|
|
DHCPMessage dhcp;
|
|
|
|
} _packed_;
|
|
|
|
|
|
|
|
typedef struct DHCPPacket DHCPPacket;
|
|
|
|
|
2013-12-09 22:43:26 +01:00
|
|
|
#define DHCP_IP_SIZE (int32_t)(sizeof(struct iphdr))
|
|
|
|
#define DHCP_IP_UDP_SIZE (int32_t)(sizeof(struct udphdr) + DHCP_IP_SIZE)
|
|
|
|
#define DHCP_MESSAGE_SIZE (int32_t)(sizeof(DHCPMessage))
|
2014-08-01 16:10:13 +02:00
|
|
|
#define DHCP_DEFAULT_MIN_SIZE 576 /* the minimum internet hosts must be able to receive */
|
2016-05-23 16:46:50 +02:00
|
|
|
#define DHCP_MIN_OPTIONS_SIZE (DHCP_DEFAULT_MIN_SIZE - DHCP_IP_UDP_SIZE - DHCP_MESSAGE_SIZE)
|
2014-04-06 14:05:32 +02:00
|
|
|
#define DHCP_MAGIC_COOKIE (uint32_t)(0x63825363)
|
2013-12-09 22:43:26 +01:00
|
|
|
|
2013-12-09 22:43:19 +01:00
|
|
|
enum {
|
|
|
|
DHCP_PORT_SERVER = 67,
|
|
|
|
DHCP_PORT_CLIENT = 68,
|
|
|
|
};
|
|
|
|
|
2013-12-09 22:43:07 +01:00
|
|
|
enum DHCPState {
|
|
|
|
DHCP_STATE_INIT = 0,
|
|
|
|
DHCP_STATE_SELECTING = 1,
|
|
|
|
DHCP_STATE_INIT_REBOOT = 2,
|
|
|
|
DHCP_STATE_REBOOTING = 3,
|
|
|
|
DHCP_STATE_REQUESTING = 4,
|
|
|
|
DHCP_STATE_BOUND = 5,
|
|
|
|
DHCP_STATE_RENEWING = 6,
|
|
|
|
DHCP_STATE_REBINDING = 7,
|
2014-04-09 12:12:08 +02:00
|
|
|
DHCP_STATE_STOPPED = 8,
|
2013-12-09 22:43:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef enum DHCPState DHCPState;
|
|
|
|
|
|
|
|
enum {
|
|
|
|
BOOTREQUEST = 1,
|
|
|
|
BOOTREPLY = 2,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
DHCP_DISCOVER = 1,
|
|
|
|
DHCP_OFFER = 2,
|
|
|
|
DHCP_REQUEST = 3,
|
|
|
|
DHCP_DECLINE = 4,
|
|
|
|
DHCP_ACK = 5,
|
|
|
|
DHCP_NAK = 6,
|
|
|
|
DHCP_RELEASE = 7,
|
2014-05-16 00:50:44 +02:00
|
|
|
DHCP_INFORM = 8,
|
|
|
|
DHCP_FORCERENEW = 9,
|
2013-12-09 22:43:07 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
DHCP_OVERLOAD_FILE = 1,
|
|
|
|
DHCP_OVERLOAD_SNAME = 2,
|
|
|
|
};
|
|
|
|
|
2015-11-16 10:17:48 +01:00
|
|
|
#define DHCP_MAX_FQDN_LENGTH 255
|
|
|
|
|
|
|
|
enum {
|
|
|
|
DHCP_FQDN_FLAG_S = (1 << 0),
|
|
|
|
DHCP_FQDN_FLAG_O = (1 << 1),
|
|
|
|
DHCP_FQDN_FLAG_E = (1 << 2),
|
|
|
|
DHCP_FQDN_FLAG_N = (1 << 3),
|
|
|
|
};
|