Add DHCPv6 functionality.
This commit is contained in:
parent
786a8c4546
commit
b3f40f41f7
36 changed files with 2430 additions and 546 deletions
218
dhcp6.h
Normal file
218
dhcp6.h
Normal file
|
|
@ -0,0 +1,218 @@
|
|||
/*
|
||||
* Fernando ALVES 2014
|
||||
* Add functionality DHCPv6 to l2tpns.
|
||||
* GPL licenced
|
||||
*/
|
||||
|
||||
#ifndef __DHCP6_H__
|
||||
#define __DHCP6_H__
|
||||
|
||||
#define DHCP6_SOLICIT 1
|
||||
#define DHCP6_ADVERTISE 2
|
||||
#define DHCP6_REQUEST 3
|
||||
#define DHCP6_CONFIRM 4
|
||||
#define DHCP6_RENEW 5
|
||||
#define DHCP6_REBIND 6
|
||||
#define DHCP6_REPLY 7
|
||||
#define DHCP6_RELEASE 8
|
||||
#define DHCP6_DECLINE 9
|
||||
#define DHCP6_RECONFIGURE 10
|
||||
#define DHCP6_INFORMATION_REQUEST 11
|
||||
#define DHCP6_RELAY_FORM 12
|
||||
#define DHCP6_RELAY_REPL 13
|
||||
|
||||
#define D6_OPT_CLIENTID 1
|
||||
#define D6_OPT_SERVERID 2
|
||||
#define D6_OPT_IA_NA 3
|
||||
#define D6_OPT_IA_TA 4
|
||||
#define D6_OPT_IAADDR 5
|
||||
#define D6_OPT_ORO 6
|
||||
#define D6_OPT_PREFERENCE 7
|
||||
#define D6_OPT_ELAPSED_TIME 8
|
||||
#define D6_OPT_RELAY_MSG 9
|
||||
#define D6_OPT_AUTH 11
|
||||
#define D6_OPT_UNICAST 12
|
||||
#define D6_OPT_STATUS_CODE 13
|
||||
#define D6_OPT_RAPID_COMMIT 14
|
||||
#define D6_OPT_USER_CLASS 15
|
||||
#define D6_OPT_VENDOR_CLASS 16
|
||||
#define D6_OPT_VENDOR_SPECIFIC 17
|
||||
#define D6_OPT_INTERFACE_ID 18
|
||||
#define D6_OPT_RECONF_MSG 19
|
||||
#define D6_OPT_RECONF_ACCEPT 20
|
||||
#define D6_OPT_DNS_SERVERS 23
|
||||
#define D6_OPT_DOMAIN_LIST 24
|
||||
#define D6_OPT_IA_PD 25
|
||||
#define D6_OPT_IAPREFIX 26
|
||||
|
||||
#define D6_STATUS_Success 0
|
||||
#define D6_STATUS_UnspecFail 1
|
||||
#define D6_STATUS_NoAddrsAvail 2
|
||||
#define D6_STATUS_NoBinding 3
|
||||
#define D6_STATUS_NotOnLink 4
|
||||
#define D6_STATUS_UseMulticast 5
|
||||
#define D6_STATUS_NoPrefixAvail 6
|
||||
|
||||
#define DUID_LLT 1
|
||||
#define DUID_EN 2
|
||||
#define DUID_LL 3
|
||||
|
||||
//~ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | D6_OPT_IA_PD | Longueur d’option |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | IAID (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | T1 (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | T2 (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | Options-IA_PD |
|
||||
//~ . .
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
// Prefix for IA_PD
|
||||
//~ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | OPTION_IAPREFIX | option-length |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | preferred-lifetime |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | valid-lifetime |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | prefix-length | |
|
||||
//~ +-+-+-+-+-+-+-+-+ IPv6 prefix |
|
||||
//~ | (16 octets) |
|
||||
//~ | |
|
||||
//~ | |
|
||||
//~ | |
|
||||
//~ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | | .
|
||||
//~ +-+-+-+-+-+-+-+-+ .
|
||||
//~ . IAprefix-options .
|
||||
//~ . .
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
//~ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | D6_OPT_IA_NA | Longueur d’option |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | IAID (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | T1 (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | T2 (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | Options-IA_NA |
|
||||
//~ . .
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
//~ 0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | OPTION_IA_TA | Longueur d’option |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | IAID (4 octets) |
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
//~ | Options-IA_TA |
|
||||
//~ . .
|
||||
//~ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
||||
|
||||
struct dhcp6_mess_hdr
|
||||
{
|
||||
uint32_t type:8;
|
||||
uint32_t trans_id:24;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_h
|
||||
{
|
||||
uint16_t code;
|
||||
uint16_t len;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_duid
|
||||
{
|
||||
uint16_t type;
|
||||
union {
|
||||
struct {
|
||||
uint16_t htype;
|
||||
uint32_t time;
|
||||
uint8_t addr[0];
|
||||
} __attribute__((packed)) llt;
|
||||
struct {
|
||||
uint32_t enterprise;
|
||||
uint8_t id[0];
|
||||
} __attribute__((packed)) en;
|
||||
struct {
|
||||
uint16_t htype;
|
||||
uint8_t addr[0];
|
||||
} __attribute__((packed)) ll;
|
||||
uint8_t raw[128];
|
||||
} u;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_serverid
|
||||
{
|
||||
struct dhcp6_opt_h opt_hdr;
|
||||
struct dhcp6_duid duid;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_clientid
|
||||
{
|
||||
struct dhcp6_opt_h opt_hdr;
|
||||
struct dhcp6_duid duid;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_ia_na {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint32_t iaid;
|
||||
uint32_t T1;
|
||||
uint32_t T2;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_ia_ta {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint32_t iaid;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_ia_pd {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint32_t iaid;
|
||||
uint32_t T1;
|
||||
uint32_t T2;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_ia_addr {
|
||||
struct dhcp6_opt_h hdr;
|
||||
struct in6_addr addr;
|
||||
uint32_t pref_lifetime;
|
||||
uint32_t valid_lifetime;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_oro {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint16_t opt_demand[0];
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_status {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint16_t code;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_preference {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint8_t pref;
|
||||
} __attribute__((packed));
|
||||
|
||||
struct dhcp6_opt_ia_prefix {
|
||||
struct dhcp6_opt_h hdr;
|
||||
uint32_t pref_lifetime;
|
||||
uint32_t valid_lifetime;
|
||||
uint8_t prefix_len;
|
||||
struct in6_addr prefix;
|
||||
} __attribute__((packed));
|
||||
|
||||
// dhcp6.c
|
||||
void dhcpv6_process(uint16_t s, uint16_t t, uint8_t *p, uint16_t l);
|
||||
void dhcpv6_init(void);
|
||||
|
||||
#endif /* __DHCP6_H__ */
|
||||
Loading…
Add table
Add a link
Reference in a new issue