Smart Home firewall
Profile-based Smart Home firewall
dhcp.h
Go to the documentation of this file.
1 
10 #ifndef _PROTOCOL_PARSERS_DHCP_
11 #define _PROTOCOL_PARSERS_DHCP_
12 
13 #include <stdlib.h>
14 #include <stdio.h>
15 #include <stdint.h>
16 #include <string.h>
17 #include <arpa/inet.h>
18 
19 #define MAX_HW_LEN 16
20 #define DHCP_HEADER_LEN 236
21 #define DHCP_MAX_OPTION_COUNT 20
22 #define DHCP_MAGIC_COOKIE 0x63825363
23 
24 
26 
30 typedef enum
31 {
32  DHCP_BOOTREQUEST = 1,
33  DHCP_BOOTREPLY = 2
35 
39 typedef enum
40 {
41  DHCP_PAD = 0,
42  DHCP_MESSAGE_TYPE = 53,
43  DHCP_END = 255
45 
49 typedef enum
50 {
51  DHCP_DISCOVER = 1,
52  DHCP_OFFER = 2,
53  DHCP_REQUEST = 3,
54  DHCP_DECLINE = 4,
55  DHCP_ACK = 5,
56  DHCP_NAK = 6,
57  DHCP_RELEASE = 7,
58  DHCP_INFORM = 8
60 
64 typedef struct dhcp_option {
65  dhcp_option_code_t code;
66  uint8_t length;
67  uint8_t *value;
69 
73 typedef struct dhcp_options {
74  uint8_t count; // Number of options
75  dhcp_message_type_t message_type; // DHCP Message type (stored for convenience)
76  dhcp_option_t *options; // List of options
78 
82 typedef struct dhcp_message {
83  dhcp_opcode_t op; // DHCP opcode
84  uint8_t htype; // Hardware address type
85  uint8_t hlen; // Hardware address length
86  uint8_t hops; // Number of hops
87  uint32_t xid; // Transaction ID
88  uint16_t secs; // Seconds elapsed since client began address acquisition or renewal process
89  uint16_t flags; // DHCP flags
90  uint32_t ciaddr; // Client IP address
91  uint32_t yiaddr; // Your (client) IP address
92  uint32_t siaddr; // Next server IP address
93  uint32_t giaddr; // Relay agent IP address
94  uint8_t chaddr[16]; // Client hardware address
95  uint8_t sname[64]; // Optional server host name
96  uint8_t file[128]; // Boot file name
97  dhcp_options_t options; // DHCP options
99 
100 
102 
104 
111 dhcp_message_t dhcp_parse_header(uint8_t *data);
112 
121 dhcp_option_t dhcp_parse_option(uint8_t *data, uint16_t *offset);
122 
129 dhcp_options_t dhcp_parse_options(uint8_t *data);
130 
137 dhcp_message_t dhcp_parse_message(uint8_t *data);
138 
139 
141 
147 void dhcp_free_message(dhcp_message_t message);
148 
149 
151 
157 void dhcp_print_header(dhcp_message_t message);
158 
164 void dhcp_print_option(dhcp_option_t option);
165 
171 void dhcp_print_message(dhcp_message_t message);
172 
173 
174 #endif /* _PROTOCOL_PARSERS_DHCP_ */
dhcp_options_t dhcp_parse_options(uint8_t *data)
Parse DHCP options.
Definition: dhcp.c:88
void dhcp_free_message(dhcp_message_t message)
Free the memory allocated for a DHCP message.
Definition: dhcp.c:147
struct dhcp_options dhcp_options_t
struct dhcp_message dhcp_message_t
void dhcp_print_option(dhcp_option_t option)
Print a DHCP option.
Definition: dhcp.c:223
dhcp_option_code_t
Definition: dhcp.h:40
dhcp_message_type_t
Definition: dhcp.h:50
void dhcp_print_message(dhcp_message_t message)
Print a DHCP message.
Definition: dhcp.c:236
dhcp_option_t dhcp_parse_option(uint8_t *data, uint16_t *offset)
Parse a DHCP option.
Definition: dhcp.c:63
dhcp_message_t dhcp_parse_header(uint8_t *data)
Parse the header of a DHCP message (not including options)
Definition: dhcp.c:21
struct dhcp_option dhcp_option_t
dhcp_opcode_t
Definition: dhcp.h:31
dhcp_message_t dhcp_parse_message(uint8_t *data)
Parse a DHCP message.
Definition: dhcp.c:130
void dhcp_print_header(dhcp_message_t message)
Print the header of a DHCP message.
Definition: dhcp.c:183
Definition: dhcp.h:82
Definition: dhcp.h:64
Definition: dhcp.h:73