| #ifndef DHCP_H |
| #define DHCP_H |
| |
| #include <inttypes.h> |
| |
| struct dhcp_option { |
| void *data; |
| int len; |
| }; |
| |
| struct dhcp_packet { |
| uint8_t op; /* 0 */ |
| uint8_t htype; /* 1 */ |
| uint8_t hlen; /* 2 */ |
| uint8_t hops; /* 3 */ |
| uint32_t xid; /* 4 */ |
| uint16_t secs; /* 8 */ |
| uint16_t flags; /* 10 */ |
| uint32_t ciaddr; /* 12 */ |
| uint32_t yiaddr; /* 16 */ |
| uint32_t siaddr; /* 20 */ |
| uint32_t giaddr; /* 24 */ |
| uint8_t chaddr[16]; /* 28 */ |
| uint8_t sname[64]; /* 44 */ |
| uint8_t file[128]; /* 108 */ |
| uint32_t magic; /* 236 */ |
| uint8_t options[4]; /* 240 */ |
| }; |
| |
| #define DHCP_VENDOR_MAGIC 0x63825363 |
| |
| int dhcp_pack_packet(void *packet, size_t *len, |
| const struct dhcp_option opt[256]); |
| |
| int dhcp_unpack_packet(const void *packet, size_t len, |
| struct dhcp_option opt[256]); |
| |
| #endif /* DHCP_H */ |
| |
| |