#ifndef _S_DHCPV6_H
#define _S_DHCPV6_H
#include <stdint.h>
#include <stdio.h>
#include <netinet/in.h>
#include <stddef.h>
#include "symbol_scope.h"
#include "DHCPDUID.h"
#include "nbo.h"
#define DHCPV6_CLIENT_PORT 546
#define DHCPV6_SERVER_PORT 547
#define All_DHCP_Relay_Agents_and_Servers_INIT \
{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02 }}}
enum {
kDHCPv6MessageNone = 0,
kDHCPv6MessageSOLICIT = 1,
kDHCPv6MessageADVERTISE = 2,
kDHCPv6MessageREQUEST = 3,
kDHCPv6MessageCONFIRM = 4,
kDHCPv6MessageRENEW = 5,
kDHCPv6MessageREBIND = 6,
kDHCPv6MessageREPLY = 7,
kDHCPv6MessageRELEASE = 8,
kDHCPv6MessageDECLINE = 9,
kDHCPv6MessageRECONFIGURE = 10,
kDHCPv6MessageINFORMATION_REQUEST = 11,
kDHCPv6MessageRELAY_FORW = 12,
kDHCPv6MessageRELAY_REPL = 13
};
#define DHCPv6_SOL_MAX_DELAY 1
#define DHCPv6_SOL_TIMEOUT 1
#define DHCPv6_SOL_MAX_RT 120
#define DHCPv6_REQ_TIMEOUT 1
#define DHCPv6_REQ_MAX_RT 30
#define DHCPv6_REQ_MAX_RC 10
#define DHCPv6_CNF_MAX_DELAY 1
#define DHCPv6_CNF_TIMEOUT 1
#define DHCPv6_CNF_MAX_RT 4
#define DHCPv6_CNF_MAX_RD 10
#define DHCPv6_REN_TIMEOUT 10
#define DHCPv6_REN_MAX_RT 600
#define DHCPv6_REB_TIMEOUT 10
#define DHCPv6_REB_MAX_RT 600
#define DHCPv6_INF_MAX_DELAY 1
#define DHCPv6_INF_TIMEOUT 1
#define DHCPv6_INF_MAX_RT 120
#define DHCPv6_REL_TIMEOUT 1
#define DHCPv6_REL_MAX_RC 5
#define DHCPv6_DEC_TIMEOUT 1
#define DHCPv6_DEC_MAX_RC 5
#define DHCPv6_REC_TIMEOUT 2
#define DHCPv6_REC_MAX_RC 8
#define DHCPv6_HOP_COUNT_LIMIT 32
const char *
DHCPv6MessageName(int message);
typedef struct {
uint8_t msg_type;
uint8_t transaction_id[3];
uint8_t options[1];
} DHCPv6Packet, * DHCPv6PacketRef;
#define DHCPV6_PACKET_HEADER_LENGTH ((int)offsetof(DHCPv6Packet, options))
uint32_t
DHCPv6PacketGetTransactionID(const DHCPv6PacketRef pkt);
void
DHCPv6PacketSetTransactionID(DHCPv6PacketRef pkt, uint32_t transaction_id);
void
DHCPv6PacketSetMessageType(DHCPv6PacketRef pkt, int msg_type);
void
DHCPv6PacketFPrint(FILE * file, const DHCPv6PacketRef pkt, int pkt_len);
#endif