1 /** 2 * Copyright (C) 2012 Steven Barth <steven@midlink.org> 3 * 4 * This program is free software; you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License version 2 6 * as published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it will be useful, 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License version 2 for more details. 12 * 13 */ 14 #pragma once 15 16 #include "odhcpd.h" 17 18 #define ALL_DHCPV6_RELAYS "ff02::1:2" 19 20 #define ALL_DHCPV6_SERVERS "ff05::1:3" 21 22 #define DHCPV6_CLIENT_PORT 546 23 #define DHCPV6_SERVER_PORT 547 24 25 #define DHCPV6_MSG_SOLICIT 1 26 #define DHCPV6_MSG_ADVERTISE 2 27 #define DHCPV6_MSG_REQUEST 3 28 #define DHCPV6_MSG_CONFIRM 4 29 #define DHCPV6_MSG_RENEW 5 30 #define DHCPV6_MSG_REBIND 6 31 #define DHCPV6_MSG_REPLY 7 32 #define DHCPV6_MSG_RELEASE 8 33 #define DHCPV6_MSG_DECLINE 9 34 #define DHCPV6_MSG_RECONFIGURE 10 35 #define DHCPV6_MSG_INFORMATION_REQUEST 11 36 #define DHCPV6_MSG_RELAY_FORW 12 37 #define DHCPV6_MSG_RELAY_REPL 13 38 #define DHCPV6_MSG_DHCPV4_QUERY 20 39 #define DHCPV6_MSG_DHCPV4_RESPONSE 21 40 41 #define DHCPV6_OPT_CLIENTID 1 42 #define DHCPV6_OPT_SERVERID 2 43 #define DHCPV6_OPT_IA_NA 3 44 #define DHCPV6_OPT_IA_ADDR 5 45 #define DHCPV6_OPT_ORO 6 46 #define DHCPV6_OPT_STATUS 13 47 #define DHCPV6_OPT_RELAY_MSG 9 48 #define DHCPV6_OPT_AUTH 11 49 #define DHCPV6_OPT_RAPID_COMMIT 14 50 #define DHCPV6_OPT_USER_CLASS 15 51 #define DHCPV6_OPT_INTERFACE_ID 18 52 #define DHCPV6_OPT_RECONF_MSG 19 53 #define DHCPV6_OPT_RECONF_ACCEPT 20 54 #define DHCPV6_OPT_DNS_SERVERS 23 55 #define DHCPV6_OPT_DNS_DOMAIN 24 56 #define DHCPV6_OPT_IA_PD 25 57 #define DHCPV6_OPT_IA_PREFIX 26 58 #define DHCPV6_OPT_SNTP_SERVERS 31 59 #define DHCPV6_OPT_INFO_REFRESH 32 60 #define DHCPV6_OPT_FQDN 39 61 #define DHCPV6_OPT_NTP_SERVERS 56 62 #define DHCPV6_OPT_SOL_MAX_RT 82 63 #define DHCPV6_OPT_INF_MAX_RT 83 64 #define DHCPV6_OPT_DHCPV4_MSG 87 65 #define DHCPV6_OPT_4O6_SERVER 88 66 67 #define DHCPV6_DUID_VENDOR 2 68 69 #define DHCPV6_STATUS_OK 0 70 #define DHCPV6_STATUS_NOADDRSAVAIL 2 71 #define DHCPV6_STATUS_NOBINDING 3 72 #define DHCPV6_STATUS_NOTONLINK 4 73 #define DHCPV6_STATUS_USEMULTICAST 5 74 #define DHCPV6_STATUS_NOPREFIXAVAIL 6 75 76 // I just remembered I have an old one lying around... 77 #define DHCPV6_ENT_NO 30462 78 #define DHCPV6_ENT_TYPE 1 79 80 81 #define DHCPV6_HOP_COUNT_LIMIT 32 82 83 #define DHCPV6_REC_TIMEOUT 2000 /* msec */ 84 #define DHCPV6_REC_MAX_RC 8 85 86 struct dhcpv6_client_header { 87 uint8_t msg_type; 88 uint8_t transaction_id[3]; 89 } __attribute__((packed)); 90 91 struct dhcpv6_relay_header { 92 uint8_t msg_type; 93 uint8_t hop_count; 94 struct in6_addr link_address; 95 struct in6_addr peer_address; 96 uint8_t options[]; 97 } __attribute__((packed)); 98 99 struct dhcpv6_relay_forward_envelope { 100 uint8_t msg_type; 101 uint8_t hop_count; 102 struct in6_addr link_address; 103 struct in6_addr peer_address; 104 uint16_t interface_id_type; 105 uint16_t interface_id_len; 106 uint32_t interface_id_data; 107 uint16_t relay_message_type; 108 uint16_t relay_message_len; 109 } __attribute__((packed)); 110 111 struct dhcpv6_auth_reconfigure { 112 uint16_t type; 113 uint16_t len; 114 uint8_t protocol; 115 uint8_t algorithm; 116 uint8_t rdm; 117 uint32_t replay[2]; 118 uint8_t reconf_type; 119 uint8_t key[16]; 120 } _packed; 121 122 struct dhcpv6_ia_hdr { 123 uint16_t type; 124 uint16_t len; 125 uint32_t iaid; 126 uint32_t t1; 127 uint32_t t2; 128 } _packed; 129 130 struct dhcpv6_ia_prefix { 131 uint16_t type; 132 uint16_t len; 133 uint32_t preferred_lt; 134 uint32_t valid_lt; 135 uint8_t prefix; 136 struct in6_addr addr; 137 } _packed; 138 139 struct dhcpv6_ia_addr { 140 uint16_t type; 141 uint16_t len; 142 struct in6_addr addr; 143 uint32_t preferred_lt; 144 uint32_t valid_lt; 145 } _packed; 146 147 struct dhcpv6_cer_id { 148 uint16_t type; 149 uint16_t len; 150 uint16_t reserved; 151 uint16_t auth_type; 152 uint8_t auth[16]; 153 struct in6_addr addr; 154 }; 155 156 #define dhcpv6_for_each_option(start, end, otype, olen, odata)\ 157 for (uint8_t *_o = (uint8_t*)(start); _o + 4 <= (end) &&\ 158 ((otype) = _o[0] << 8 | _o[1]) && ((odata) = (void*)&_o[4]) &&\ 159 ((olen) = _o[2] << 8 | _o[3]) + (odata) <= (end); \ 160 _o += 4 + (_o[2] << 8 | _o[3])) 161
This page was automatically generated by LXR 0.3.1. • OpenWrt