summaryrefslogtreecommitdiff
path: root/dhcpv6.h
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2011-11-09 16:07:21 +0100
committerBjørn Mork <bjorn@mork.no>2011-11-09 16:20:37 +0100
commit2bc7ba82d3c838352f8757c9f0454cc64af48cdb (patch)
tree801b0dfaff00cced4aaddae21a5f520c5e42907d /dhcpv6.h
parent7be3f0592841640c07819aa23f14735de9f767d5 (diff)
Basic demo code, implementing a BPF to capture IPv6 udp 547 traffic
Still lacking most functionality, but at least capture is working Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'dhcpv6.h')
-rw-r--r--dhcpv6.h154
1 files changed, 154 insertions, 0 deletions
diff --git a/dhcpv6.h b/dhcpv6.h
new file mode 100644
index 0000000..1596034
--- /dev/null
+++ b/dhcpv6.h
@@ -0,0 +1,154 @@
+struct dhcpv6_msg { /* [RFC3315] ch 6 */
+ u_int8_t msg_type; /* Message type */
+ u_int8_t xid[3]; /* transaction-id */
+ char options[]; /* options */
+};
+
+
+struct dhcpv6_relay_msg { /* [RFC3315] ch 7 */
+ u_int8_t msg_type; /* Message type */
+ u_int8_t hop_count; /* hop count */
+ struct in6_addr link_addr; /* link address */
+ struct in6_addr peer_addr; /* peer address */
+ char options[]; /* options */
+};
+
+struct dhcpv6_option { /* [RFC3315] generic option */
+ u_int16_t code; /* option-code */
+ u_int16_t len; /* option-len */
+ char data[]; /* any */
+};
+
+struct dhcpv6_interface_id { /* [RFC3315] ch 22.18 */
+ u_int16_t code; /* option-code (18) */
+ u_int16_t len; /* option-len */
+ char id[]; /* interface-id */
+};
+
+struct dhcpv6_remote_id { /* [RFC4649] */
+ u_int16_t code; /* option-code (37) */
+ u_int16_t len; /* option-len */
+ u_int32_t enterprise; /* enterprise-number */
+ char id[]; /* remote-id */
+};
+
+struct dhcpv6_subscriber_id { /* [RFC4580] */
+ u_int16_t code; /* option-code (38) */
+ u_int16_t len; /* option-len */
+ char id[]; /* subscriber-id */
+};
+
+/* all the following are ref http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */
+
+/* message types */
+/* 0 Reserved */
+#define DHCPV6_SOLICIT 1 /* [RFC3315] */
+#define DHCPV6_ADVERTISE 2 /* [RFC3315] */
+#define DHCPV6_REQUEST 3 /* [RFC3315] */
+#define DHCPV6_CONFIRM 4 /* [RFC3315] */
+#define DHCPV6_RENEW 5 /* [RFC3315] */
+#define DHCPV6_REBIND 6 /* [RFC3315] */
+#define DHCPV6_REPLY 7 /* [RFC3315] */
+#define DHCPV6_RELEASE 8 /* [RFC3315] */
+#define DHCPV6_DECLINE 9 /* [RFC3315] */
+#define DHCPV6_RECONFIGURE 10 /* [RFC3315] */
+#define DHCPV6_INFORMATION_REQ 11 /* [RFC3315] */
+#define DHCPV6_RELAY_FORW 12 /* [RFC3315] */
+#define DHCPV6_RELAY_REPL 13 /* [RFC3315] */
+#define DHCPV6_LEASEQUERY 14 /* [RFC5007] */
+#define DHCPV6_LEASEQUERY_REPLY 15 /* [RFC5007] */
+#define DHCPV6_LEASEQUERY_DONE 16 /* [RFC5460] */
+#define DHCPV6_LEASEQUERY_DATA 17 /* [RFC5460] */
+/* 18-255 Unassigned */
+
+/* option codes */
+/* 0 Reserved */
+#define OPTION_CLIENTID 1 /* [RFC3315] */
+#define OPTION_SERVERID 2 /* [RFC3315] */
+#define OPTION_IA_NA 3 /* [RFC3315] */
+#define OPTION_IA_TA 4 /* [RFC3315] */
+#define OPTION_IAADDR 5 /* [RFC3315] */
+#define OPTION_ORO 6 /* [RFC3315] */
+#define OPTION_PREFERENCE 7 /* [RFC3315] */
+#define OPTION_ELAPSED_TIME 8 /* [RFC3315] */
+#define OPTION_RELAY_MSG 9 /* [RFC3315] */
+/* 10 Unassigned */
+#define OPTION_AUTH 11 /* [RFC3315] */
+#define OPTION_UNICAST 12 /* [RFC3315] */
+#define OPTION_STATUS_CODE 13 /* [RFC3315] */
+#define OPTION_RAPID_COMMIT 14 /* [RFC3315] */
+#define OPTION_USER_CLASS 15 /* [RFC3315] */
+#define OPTION_VENDOR_CLASS 16 /* [RFC3315] */
+#define OPTION_VENDOR_OPTS 17 /* [RFC3315] */
+#define OPTION_INTERFACE_ID 18 /* [RFC3315] */
+#define OPTION_RECONF_MSG 19 /* [RFC3315] */
+#define OPTION_RECONF_ACCEPT 20 /* [RFC3315] */
+/* 21 SIP Servers Domain Name List [RFC3319] */
+/* 22 SIP Servers IPv6 Address List [RFC3319] */
+/* 23 DNS Recursive Name Server Option [RFC3646] */
+/* 24 Domain Search List option [RFC3646] */
+#define OPTION_IA_PD 25 /* [RFC3633] */
+#define OPTION_IAPREFIX 26 /* [RFC3633] */
+#define OPTION_NIS_SERVERS 27 /* [RFC3898] */
+#define OPTION_NISP_SERVERS 28 /* [RFC3898] */
+#define OPTION_NIS_DOMAIN_NAME 29 /* [RFC3898] */
+#define OPTION_NISP_DOMAIN_NAME 30 /* [RFC3898] */
+#define OPTION_SNTP_SERVERS 31 /* [RFC4075] */
+#define OPTION_INFORMATION_REFRESH_TIME 32 /* [RFC4242] */
+#define OPTION_BCMCS_SERVER_D 33 /* [RFC4280] */
+#define OPTION_BCMCS_SERVER_A 34 /* [RFC4280] */
+/* 35 Unassigned */
+#define OPTION_GEOCONF_CIVIC 36 /* [RFC4776] */
+#define OPTION_REMOTE_ID 37 /* [RFC4649] */
+#define OPTION_SUBSCRIBER_ID 38 /* [RFC4580] */
+#define OPTION_CLIENT_FQDN 39 /* [RFC4704] */
+#define OPTION_PANA_AGENT 40 /* [RFC5192] */
+#define OPTION_NEW_POSIX_TIMEZONE 41 /* [RFC4833] */
+#define OPTION_NEW_TZDB_TIMEZONE 42 /* [RFC4833] */
+#define OPTION_ERO 43 /* [RFC4994] */
+#define OPTION_LQ_QUERY 44 /* [RFC5007] */
+#define OPTION_CLIENT_DATA 45 /* [RFC5007] */
+#define OPTION_CLT_TIME 46 /* [RFC5007] */
+#define OPTION_LQ_RELAY_DATA 47 /* [RFC5007] */
+#define OPTION_LQ_CLIENT_LINK 48 /* [RFC5007] */
+#define OPTION_MIP6_HNINF 49 /* [RFC-ietf-mip6-hiopt-17] */
+#define OPTION_MIP6_RELAY 50 /* [RFC-ietf-mip6-hiopt-17] */
+#define OPTION_V6_LOST 51 /* [RFC5223] */
+#define OPTION_CAPWAP_AC_V6 52 /* [RFC5417] */
+#define OPTION_RELAY_ID 53 /* [RFC5460] */
+#define OPTION_IPv6_Address_MoS 54 /* [RFC5678] */
+#define OPTION_IPv6_FQDN_MoS 55 /* [RFC5678] */
+#define OPTION_NTP_SERVER 56 /* [RFC5908] */
+#define OPTION_V6_ACCESS_DOMAIN 57 /* [RFC5986] */
+#define OPTION_SIP_UA_CS_LIST 58 /* [RFC6011] */
+#define OPT_BOOTFILE_URL 59 /* [RFC5970] */
+#define OPT_BOOTFILE_PARAM 60 /* [RFC5970] */
+#define OPTION_CLIENT_ARCH_TYPE 61 /* [RFC5970] */
+#define OPTION_NII 62 /* [RFC5970] */
+#define OPTION_GEOLOCATION 63 /* [RFC6225] */
+#define OPTION_AFTR_NAME 64 /* [RFC6334] */
+#define OPTION_ERP_LOCAL_DOMAIN_NAME 65 /* [RFC-ietf-hokey-ldn-discovery-10] */
+#define OPTION_RSOO 66 /* [RFC-ietf-dhc-dhcpv6-relay-supplied-options-09] */
+/* 67-255 Unassigned */
+
+/* Status Codes */
+#define Success 0 /* [RFC3315] */
+#define UnspecFail 1 /* [RFC3315] */
+#define NoAddrsAvail 2 /* [RFC3315] */
+#define NoBinding 3 /* [RFC3315] */
+#define NotOnLink 4 /* [RFC3315] */
+#define UseMulticast 5 /* [RFC3315] */
+#define NoPrefixAvail 6 /* [RFC3633] */
+#define UnknownQueryType 7 /* [RFC5007] */
+#define MalformedQuery 8 /* [RFC5007] */
+#define NotConfigured 9 /* [RFC5007] */
+#define NotAllowed 10 /* [RFC5007] */
+#define QueryTerminated 11 /* [RFC5460] */
+/* 12-255 Unassigned */
+
+
+/* DUID types */
+#define DUID_LLT 1 /* [RFC3315] */
+#define DUID_EN 2 /* [RFC3315] */
+#define DUID_LL 3 /* [RFC3315] */
+#define DUID_UUID 4 /* [RFC6355] */