Ethereal-dev: [Ethereal-dev] DHCPv6 updates patch
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Tsutomu MIENO <iitom@xxxxxxxxxx>
Date: Wed, 26 Jun 2002 06:03:05 +0900 (JST)
Hi all. Attached a patch to packet-dhcpv6.c. To update the DHCPv6 support to match the following latest drafts. o draft-ietf-dhc-dhcpv6-26.txt o draft-troan-dhcpv6-opt-prefix-delegation-01.txt o draft-ietf-dhc-dhcpv6-opt-dnsconfig-02.txt Best regards. -- IItom Tsutomu MIENO iitom@xxxxxxxxxx http://www.utouto.com/
Index: packet-dhcpv6.c
===================================================================
RCS file: /cvsroot/ethereal/packet-dhcpv6.c,v
retrieving revision 1.4
diff -r1.4 packet-dhcpv6.c
3a4,5
> * IItom Tsutomu MIENO <iitom@xxxxxxxxxx>
> * SHIRASAKI Yasuhiro <yasuhiro@xxxxxxxxxxx>
8c10,13
< * draft-ietf-dhc-dhcpv6-22.txt
---
> * draft-ietf-dhc-dhcpv6-26.txt
> * draft-troan-dhcpv6-opt-prefix-delegation-01.txt
> * draft-ietf-dhc-dhcpv6-opt-dnsconfig-02.txt
> *
53a59,106
> #define DHCPV6_LEASEDURATION_INFINITY 0xffffffff
>
> #define SOLICIT 1
> #define ADVERTISE 2
> #define REQUEST 3
> #define CONFIRM 4
> #define RENEW 5
> #define REBIND 6
> #define REPLY 7
> #define RELEASE 8
> #define DECLINE 9
> #define RECONFIGURE 10
> #define INFORMATION_REQUEST 11
> #define RELAY_FORW 12
> #define RELAY_REPL 13
>
> #define OPTION_CLIENTID 1
> #define OPTION_SERVERID 2
> #define OPTION_IA 3
> #define OPTION_IA_TA 4
> #define OPTION_IAADDR 5
> #define OPTION_ORO 6
> #define OPTION_PREFERENCE 7
> #define OPTION_ELAPSED_TIME 8
> #define OPTION_RELAY_MSG 9
> /* #define OPTION_SERVER_MSG 10 */
> #define OPTION_AUTH 11
> #define OPTION_UNICAST 12
> #define OPTION_STATUS_CODE 13
> #define OPTION_RAPID_COMMIT 14
> #define OPTION_USER_CLASS 15
> #define OPTION_VENDOR_CLASS 16
> #define OPTION_VENDOR_OPTS 17
> #define OPTION_INTERFACE_ID 18
> #define OPTION_RECONF_MSG 19
> #define OPTION_RECONF_NONCE 20
>
> #define OPTION_DNS_SERVERS 25
> #define OPTION_DOMAIN_LIST 26
> #define OPTION_PREFIXDEL 30
> #define OPTION_PREFIX_INFO 31
> #define OPTION_PREFIXREQ 32
>
> #define DUID_LLT 1
> #define DUID_EN 2
> #define DUID_LL 3
> #define DUID_LL_OLD 4
>
55,57c108,121
< { 7, "Reply" },
< { 11, "Information request" },
< { 0, NULL }
---
> { SOLICIT, "Solicit" },
> { ADVERTISE, "Advertise" },
> { REQUEST, "Request" },
> { CONFIRM, "Confirm" },
> { RENEW, "Renew" },
> { REBIND, "Rebind" },
> { REPLY, "Reply" },
> { RELEASE, "Release" },
> { DECLINE, "Decline" },
> { RECONFIGURE, "Reconfigure" },
> { INFORMATION_REQUEST, "Information-request" },
> { RELAY_FORW, "Relay-forw" },
> { RELAY_REPL, "Relay-repl" },
> { 0, NULL }
61,62c125,149
< { 1, "DUID" },
< { 11, "DNS servers address" },
---
> { OPTION_CLIENTID, "Client Identifier" },
> { OPTION_SERVERID, "Server Identifier" },
> { OPTION_IA, "Identify Association" },
> { OPTION_IA_TA, "Identify Association for Temporary Address" },
> { OPTION_IAADDR, "IA Address" },
> { OPTION_ORO, "Option Request" },
> { OPTION_PREFERENCE, "Preference" },
> { OPTION_ELAPSED_TIME, "Elapsed time" },
> { OPTION_RELAY_MSG, "Relay Message" },
> /* { OPTION_SERVER_MSG, "Server message" }, */
> { OPTION_AUTH, "Authentication" },
> { OPTION_UNICAST, "Server unicast" },
> { OPTION_STATUS_CODE, "Status code" },
> { OPTION_RAPID_COMMIT, "Rapid Commit" },
> { OPTION_USER_CLASS, "User Class" },
> { OPTION_VENDOR_CLASS, "Vendor Class" },
> { OPTION_VENDOR_OPTS, "Vendor-specific Information" },
> { OPTION_INTERFACE_ID, "Interface-Id" },
> { OPTION_RECONF_MSG, "Reconfigure Message" },
> { OPTION_RECONF_NONCE, "Reconfigure Nonce" },
> { OPTION_DNS_SERVERS, "Domain Name Server" },
> { OPTION_DOMAIN_LIST, "Domain Search List" },
> { OPTION_PREFIXDEL, "Prefix Delegation" },
> { OPTION_PREFIX_INFO, "Prefix Information" },
> { OPTION_PREFIXREQ, "Prefix Request" },
65a153,175
> static const value_string statuscode_vals[] =
> {
> {0, "Success" },
> {1, "UnspecFail" },
> {2, "AuthFailed" },
> {3, "AddrUnvail" },
> {4, "NoAddrAvail" },
> {5, "NoBinding" },
> {6, "ConfNoMatch" },
> {7, "NotOnLink" },
> {8, "UseMulticast" },
> {0, NULL }
> };
>
> static const value_string duidtype_vals[] =
> {
> { DUID_LLT, "link-layer address plus time" },
> { DUID_EN, "assigned by vendor based on Enterprise number" },
> { DUID_LL, "link-layer address" },
> { DUID_LL_OLD, "link-layer address (old)" },
> { 0, NULL }
> };
>
104c214,215
< case 1: /* DUID */
---
> case OPTION_CLIENTID:
> case OPTION_SERVERID:
112c223,226
< "DUID type: %u", duidtype);
---
> "DUID type: %s (%u)",
> val_to_str(duidtype,
> duidtype_vals, "Unknown"),
> duidtype);
114c228
< case 1:
---
> case DUID_LLT:
121,123c235
< proto_tree_add_text(subtree, tvb, off + 2, 4,
< "Time: %u", tvb_get_ntohl(tvb, off + 6));
< proto_tree_add_text(subtree, tvb, off + 6, 2,
---
> proto_tree_add_text(subtree, tvb, off + 2, 2,
125c237,239
< tvb_get_ntohs(tvb, off + 6));
---
> tvb_get_ntohs(tvb, off + 2));
> proto_tree_add_text(subtree, tvb, off + 4, 4,
> "Time: %u", tvb_get_ntohl(tvb, off + 4));
131,132c245,246
< case 2:
< if (optlen < 10) {
---
> case DUID_EN:
> if (optlen < 6) {
137,140c251,255
< proto_tree_add_text(subtree, tvb, off + 2, 8, "VUID");
< if (optlen > 10) {
< proto_tree_add_text(subtree, tvb, off + 10,
< optlen - 10, "Domain name");
---
> proto_tree_add_text(subtree, tvb, off + 2, 4,
> "enterprise-number");
> if (optlen > 6) {
> proto_tree_add_text(subtree, tvb, off + 6,
> optlen - 6, "identifier");
143c258,259
< case 3:
---
> case DUID_LL:
> case DUID_LL_OLD:
151c267
< tvb_get_ntohs(tvb, off + 10));
---
> tvb_get_ntohs(tvb, off + 2));
159c275,482
< case 11: /* DNS servers address */
---
> case OPTION_IA:
> if (optlen < 12) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "IA: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 4,
> "IAID: %u",
> tvb_get_ntohl(tvb, off));
> proto_tree_add_text(subtree, tvb, off+4, 4,
> "T1: %u", tvb_get_ntohl(tvb, off+4));
> proto_tree_add_text(subtree, tvb, off+8, 4,
> "T2: %u", tvb_get_ntohl(tvb, off+8));
> if (optlen > 12) {
> gboolean at_end_;
> dhcpv6_option(tvb, subtree, off+12, off + optlen - 12, &at_end_);
> }
> break;
> case OPTION_IA_TA:
> if (optlen < 4) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "IA_TA: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 4,
> "IAID: %u",
> tvb_get_ntohl(tvb, off));
> if (optlen > 4) {
> gboolean at_end_;
> dhcpv6_option(tvb, subtree, off+4, off + optlen - 4, &at_end_);
> }
> break;
> case OPTION_IAADDR:
> if (optlen < 24) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "IAADDR: malformed option");
> break;
> }
> tvb_memcpy(tvb, (guint8 *)&in6, off, sizeof(in6));
> proto_tree_add_text(subtree, tvb, off,
> sizeof(in6), "IPv6 address: %s",
> ip6_to_str(&in6));
> proto_tree_add_text(subtree, tvb, off+16, 4,
> "preferred-lifetime: %u",
> tvb_get_ntohl(tvb, off+16));
> proto_tree_add_text(subtree, tvb, off+20, 4,
> "valid-lifetime: %u",
> tvb_get_ntohl(tvb, off+20));
> if (optlen > 24) {
> gboolean at_end_;
> dhcpv6_option(tvb, subtree, off+24, off + optlen - 24, &at_end_);
> }
> break;
> case OPTION_ORO:
> for (i = 0; i < optlen; i += 2) {
> guint16 requested_opt_code;
> requested_opt_code = tvb_get_ntohs(tvb, off + i);
> proto_tree_add_text(subtree, tvb, off + i,
> 2, "Requested Option code: %s (%d)",
> val_to_str(requested_opt_code,
> opttype_vals,
> "Unknown"),
> requested_opt_code);
> }
> break;
> case OPTION_PREFERENCE:
> if (optlen != 1) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "PREFERENCE: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 1,
> "pref-value: %d",
> (guint32)tvb_get_guint8(tvb, off));
> break;
> case OPTION_ELAPSED_TIME:
> if (optlen != 2) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "ELAPSED-TIME: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 2,
> "elapsed-time: %d sec",
> (guint32)tvb_get_ntohs(tvb, off));
> break;
> case OPTION_RELAY_MSG:
> if (optlen == 0) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "RELAY-MSG: malformed option");
> break;
> } else {
> gboolean at_end_;
> dhcpv6_option(tvb, subtree, off, off + optlen, &at_end_);
> }
> break;
> case OPTION_AUTH:
> if (optlen < 15) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "AUTH: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 1,
> "Protocol: %d",
> (guint32)tvb_get_guint8(tvb, off));
> proto_tree_add_text(subtree, tvb, off+1, 1,
> "Algorithm: %d",
> (guint32)tvb_get_guint8(tvb, off+1));
> proto_tree_add_text(subtree, tvb, off+2, 1,
> "RDM: %d",
> (guint32)tvb_get_guint8(tvb, off+2));
> proto_tree_add_text(subtree, tvb, off+3, 8,
> "Reply Detection");
> proto_tree_add_text(subtree, tvb, off+11, optlen-11,
> "Authentication Information");
> break;
> case OPTION_UNICAST:
> if (optlen != 16) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "UNICAST: malformed option");
> break;
> }
> tvb_memcpy(tvb, (guint8 *)&in6, off, sizeof(in6));
> proto_tree_add_text(subtree, tvb, off,
> sizeof(in6), "IPv6 address: %s",
> ip6_to_str(&in6));
> break;
> case OPTION_STATUS_CODE:
> {
> guint16 status_code;
> char *status_message = 0;
> status_code = tvb_get_ntohs(tvb, off);
> proto_tree_add_text(subtree, tvb, off, 2,
> "Status Code: %s (%d)",
> val_to_str(status_code, statuscode_vals,
> "Unknown"),
> status_code);
>
> if (optlen - 2 > 0)
> status_message = g_malloc(optlen - 2 + 1);
> if (status_message != 0){
> memset(status_message, 0, optlen - 2 + 1);
> status_message = tvb_memcpy(tvb, status_message, off + 2,
> optlen - 2);
> proto_tree_add_text(subtree, tvb, off + 2, optlen - 2,
> "Status Message: %s",
> status_message);
> g_free(status_message);
> }
> }
> break;
> case OPTION_VENDOR_CLASS:
> if (optlen < 4) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "VENDOR_CLASS: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 4,
> "enterprise-number: %u",
> tvb_get_ntohl(tvb, off));
> if (optlen > 4) {
> proto_tree_add_text(subtree, tvb, off+4, optlen-4,
> "vendor-class-data");
> }
> break;
> case OPTION_VENDOR_OPTS:
> if (optlen < 4) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "VENDOR_OPTS: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, 4,
> "enterprise-number: %u",
> tvb_get_ntohl(tvb, off));
> if (optlen > 4) {
> proto_tree_add_text(subtree, tvb, off+4, optlen-4,
> "option-data");
> }
> break;
> case OPTION_INTERFACE_ID:
> if (optlen == 0) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "INTERFACE_ID: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, optlen, "Interface-ID");
> break;
> case OPTION_RECONF_MSG:
> if (optlen != 1) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "RECONF_MSG: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, optlen,
> "Reconfigure-type: %s",
> val_to_str(tvb_get_guint8(tvb, off),
> msgtype_vals,
> "Message Type %u"));
> break;
> case OPTION_RECONF_NONCE:
> if (optlen != 8) {
> proto_tree_add_text(subtree, tvb, off,
> optlen, "RECONF_NONCE: malformed option");
> break;
> }
> proto_tree_add_text(subtree, tvb, off, optlen,
> "Reconfigure-nonce");
> break;
> case OPTION_DNS_SERVERS:
171a495,536
> case OPTION_DOMAIN_LIST:
> if (optlen > 0) {
> proto_tree_add_text(subtree, tvb, off, optlen, "Search String");
> }
> break;
> case OPTION_PREFIXDEL:
> {
> gboolean at_end_;
> dhcpv6_option(tvb, subtree, off, off + optlen, &at_end_);
> }
> break;
> case OPTION_PREFIX_INFO:
> {
> guint32 lease_duration;
> guint8 prefix_length;
> struct e_in6_addr in6;
>
> lease_duration = tvb_get_ntohl(tvb, off);
> prefix_length = tvb_get_guint8(tvb, off + 4);
> if ( lease_duration == DHCPV6_LEASEDURATION_INFINITY) {
> proto_tree_add_text(subtree, tvb, off, 4,
> "Lease duration: infinity");
> } else {
> proto_tree_add_text(subtree, tvb, off, 4,
> "Lease duration: %u", lease_duration);
> }
> proto_tree_add_text(subtree, tvb, off + 4, 1,
> "Prefix length: %d", prefix_length);
> tvb_memcpy(tvb, (guint8 *)&in6, off + 5 , sizeof(in6));
> proto_tree_add_text(subtree, tvb, off + 5,
> 16, "Prefix address: %s",
> ip6_to_str(&in6));
> }
> break;
> case OPTION_PREFIXREQ:
> {
> guint8 prefix_length;
> prefix_length = tvb_get_guint8(tvb, off);
> proto_tree_add_text(subtree, tvb, off, 1,
> "Prefix length: %d", prefix_length);
> }
> break;
173a539
>
176a543
>
185d551
< struct e_in6_addr in6;
188a555
> downstream = 0; /* feature reserved */
202c569,571
< downstream ? "DHCPv6 reply" : "DHCPv6 request");
---
> val_to_str(msgtype,
> msgtype_vals,
> "Message Type %u"));
211c580,581
< proto_tree_add_text(bp_tree, tvb, 1, 3, "XID: 0x%08x", xid);
---
> proto_tree_add_text(bp_tree, tvb, 1, 3, "Transaction-ID: 0x%08x", xid);
> #if 0
214a585
> #endif
217c588
< off = 20;
---
> off = 4;
- Follow-Ups:
- Re: [Ethereal-dev] DHCPv6 updates patch
- From: Guy Harris
- Re: [Ethereal-dev] DHCPv6 updates patch
- Prev by Date: Re: [Ethereal-dev] Patch 2 for writing Novell LanAlyzer files
- Next by Date: Re: [Ethereal-dev] RFC framework for graphical extensions like t he recent rate_
- Previous by thread: Re: [Ethereal-dev] GTK will not compile on Windows based computer after Monday cvs update
- Next by thread: Re: [Ethereal-dev] DHCPv6 updates patch
- Index(es):





