Browse Source

[2491] Added definitions for standard DHCPv6 options up to code 48.

Marcin Siodelski 12 years ago
parent
commit
c806c0c318
2 changed files with 104 additions and 19 deletions
  1. 89 10
      src/lib/dhcp/libdhcp++.cc
  2. 15 9
      src/lib/dhcp/tests/libdhcp++_unittest.cc

+ 89 - 10
src/lib/dhcp/libdhcp++.cc

@@ -261,16 +261,60 @@ LibDHCP::initStdOptionDefs6() {
         bool array;
     };
     OptionParams params[] = {
-        { "CLIENTID", D6O_CLIENTID, OPT_BINARY_TYPE, false },
-        { "SERVERID", D6O_SERVERID, OPT_BINARY_TYPE, false },
-        { "IA_NA", D6O_IA_NA, OPT_RECORD_TYPE, false },
-        { "IAADDR", D6O_IAADDR, OPT_RECORD_TYPE, false },
-        { "ORO", D6O_ORO, OPT_UINT16_TYPE, true },
-        { "ELAPSED_TIME", D6O_ELAPSED_TIME, OPT_UINT16_TYPE, false },
-        { "STATUS_CODE", D6O_STATUS_CODE, OPT_RECORD_TYPE, false },
-        { "RAPID_COMMIT", D6O_RAPID_COMMIT, OPT_EMPTY_TYPE, false },
-        { "DNS_SERVERS", D6O_NAME_SERVERS, OPT_IPV6_ADDRESS_TYPE, true },
-        { "IA_PD", D6O_IA_PD, OPT_RECORD_TYPE, false }
+        { "clientid", D6O_CLIENTID, OPT_BINARY_TYPE, false },
+        { "serverid", D6O_SERVERID, OPT_BINARY_TYPE, false },
+        { "ia-na", D6O_IA_NA, OPT_RECORD_TYPE, false },
+        { "ia-ta", D6O_IA_TA, OPT_UINT32_TYPE, false },
+        { "iaaddr", D6O_IAADDR, OPT_RECORD_TYPE, false },
+        { "oro", D6O_ORO, OPT_UINT16_TYPE, true },
+        { "preference", D6O_PREFERENCE, OPT_UINT8_TYPE, false },
+        { "elapsed-time", D6O_ELAPSED_TIME, OPT_UINT16_TYPE, false },
+        { "relay-msg", D6O_RELAY_MSG, OPT_BINARY_TYPE, false },
+        //        { "AUTH", D6O_AUTH, D6O_AUTH, OPT_RECORD_TYPE, false },
+        { "unicast", D6O_UNICAST, OPT_IPV6_ADDRESS_TYPE, false },
+        { "status-code", D6O_STATUS_CODE, OPT_RECORD_TYPE, false },
+        { "rapid-commit", D6O_RAPID_COMMIT, OPT_EMPTY_TYPE, false },
+        { "user-class", D6O_USER_CLASS, OPT_BINARY_TYPE, false },
+        { "vendor-class", D6O_VENDOR_CLASS, OPT_RECORD_TYPE, false },
+        { "vendor-opts", D6O_VENDOR_OPTS, OPT_RECORD_TYPE, false },
+        { "interface-id", D6O_INTERFACE_ID, OPT_BINARY_TYPE, false },
+        { "reconf-msg", D6O_RECONF_MSG, OPT_UINT8_TYPE, false },
+        { "reconf-accept", D6O_RECONF_ACCEPT, OPT_EMPTY_TYPE, false },
+        { "sip-server-dns", D6O_SIP_SERVERS_DNS, OPT_FQDN_TYPE, true },
+        { "sip-server-addr", D6O_SIP_SERVERS_ADDR, OPT_IPV6_ADDRESS_TYPE, true },
+        { "dns-servers", D6O_NAME_SERVERS, OPT_IPV6_ADDRESS_TYPE, true },
+        { "domain-search", D6O_DOMAIN_SEARCH, OPT_FQDN_TYPE, true },
+        { "ia-pd", D6O_IA_PD, OPT_RECORD_TYPE, false },
+        { "iaprefix", D6O_IAPREFIX, OPT_RECORD_TYPE, false },
+        { "nis-servers", D6O_NIS_SERVERS, OPT_IPV6_ADDRESS_TYPE, true },
+        { "nisp-servers", D6O_NISP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true },
+        { "nis-domain-name", D6O_NIS_DOMAIN_NAME, OPT_FQDN_TYPE, true },
+        { "nisp-domain-name", D6O_NISP_DOMAIN_NAME, OPT_FQDN_TYPE, true },
+        { "sntp-servers", D6O_SNTP_SERVERS, OPT_IPV6_ADDRESS_TYPE, true },
+        { "information-refresh-time", D6O_INFORMATION_REFRESH_TIME,
+          OPT_UINT32_TYPE, false },
+        { "bcmcs-server-dns", D6O_BCMCS_SERVER_D, OPT_FQDN_TYPE, true },
+        { "bcmcs-server-addr", D6O_BCMCS_SERVER_A, OPT_IPV6_ADDRESS_TYPE, true },
+        { "geoconf-civic", D6O_GEOCONF_CIVIC, OPT_RECORD_TYPE, false },
+        { "remote-id", D6O_REMOTE_ID, OPT_RECORD_TYPE, false },
+        { "subscriber-id", D6O_SUBSCRIBER_ID, OPT_BINARY_TYPE, false },
+        { "client-fqdn", D6O_CLIENT_FQDN, OPT_RECORD_TYPE, false },
+        { "pana-agent", D6O_PANA_AGENT, OPT_IPV6_ADDRESS_TYPE, true },
+        { "new-posix-timezone", D6O_NEW_POSIX_TIMEZONE, OPT_STRING_TYPE, false },
+        { "new-tzdb-timezone", D6O_NEW_TZDB_TIMEZONE, OPT_STRING_TYPE, false },
+        { "ero", D6O_ERO, OPT_UINT16_TYPE, true },
+        { "lq-query", D6O_LQ_QUERY, OPT_RECORD_TYPE, false },
+        { "client-data", D6O_CLIENT_DATA, OPT_EMPTY_TYPE, false },
+        { "clt-time", D6O_CLT_TIME, OPT_UINT32_TYPE, false },
+        { "lq-relay-data", D6O_LQ_RELAY_DATA, OPT_RECORD_TYPE, false },
+        { "lq-client-link", D6O_LQ_CLIENT_LINK, OPT_IPV6_ADDRESS_TYPE, true },
+        /*        { "MIP6_HNIDF", D6O_MIP6_HNIDF, OPT_FQDN_TYPE, false },
+        { "MIP6_VDINF", D6O_MIP6_VDINF, OPT_EMPTY_TYPE, false },
+        { "V6_LOST", D6O_V6_LOST, OPT_FQDN_TYPE, false },
+        { "CAPWAP_AC_V6", D6O_CAPWAP_AC_V6, OPT_IPV6_ADDRESS_TYPE, true },
+        { "RELAY_ID", D6O_RELAY_ID, OPT_BINARY_TYPE, false },
+        { "IPV6_ADDRESS_MOS", */
+
     };
     const int params_size = sizeof(params) / sizeof(params[0]);
 
@@ -295,6 +339,41 @@ LibDHCP::initStdOptionDefs6() {
             definition->addRecordField(OPT_UINT16_TYPE);
             definition->addRecordField(OPT_STRING_TYPE);
             break;
+        case D6O_VENDOR_CLASS:
+            definition->addRecordField(OPT_UINT32_TYPE);
+            definition->addRecordField(OPT_BINARY_TYPE);
+            break;
+        case D6O_VENDOR_OPTS:
+            definition->addRecordField(OPT_UINT32_TYPE);
+            definition->addRecordField(OPT_BINARY_TYPE);
+            break;
+        case D6O_IAPREFIX:
+            definition->addRecordField(OPT_UINT32_TYPE);
+            definition->addRecordField(OPT_UINT32_TYPE);
+            definition->addRecordField(OPT_UINT8_TYPE);
+            definition->addRecordField(OPT_BINARY_TYPE);
+            break;
+        case D6O_GEOCONF_CIVIC:
+            definition->addRecordField(OPT_UINT8_TYPE);
+            definition->addRecordField(OPT_UINT16_TYPE);
+            definition->addRecordField(OPT_STRING_TYPE);
+            break;
+        case D6O_REMOTE_ID:
+            definition->addRecordField(OPT_UINT32_TYPE);
+            definition->addRecordField(OPT_BINARY_TYPE);
+            break;
+        case D6O_CLIENT_FQDN:
+            definition->addRecordField(OPT_UINT8_TYPE);
+            definition->addRecordField(OPT_FQDN_TYPE);
+            break;
+        case D6O_LQ_QUERY:
+            definition->addRecordField(OPT_UINT8_TYPE);
+            definition->addRecordField(OPT_IPV6_ADDRESS_TYPE);
+            break;
+        case D6O_LQ_RELAY_DATA:
+            definition->addRecordField(OPT_IPV6_ADDRESS_TYPE);
+            definition->addRecordField(OPT_BINARY_TYPE);
+            break;
         default:
             // The default case is intentionally left empty
             // as it does not need any processing.

+ 15 - 9
src/lib/dhcp/tests/libdhcp++_unittest.cc

@@ -400,23 +400,29 @@ TEST_F(LibDhcpTest, unpackOptions4) {
 // created.
 TEST_F(LibDhcpTest, stdOptionDefs6) {
     LibDhcpTest::testStdOptionDefs6(D6O_CLIENTID, OptionBuffer(14, 1),
-                                     typeid(Option));
+                                    typeid(Option));
     LibDhcpTest::testStdOptionDefs6(D6O_SERVERID, OptionBuffer(14, 1),
-                                     typeid(Option));
+                                    typeid(Option));
     LibDhcpTest::testStdOptionDefs6(D6O_IA_NA, OptionBuffer(12, 1),
-                                     typeid(Option6IA));
+                                    typeid(Option6IA));
+    LibDhcpTest::testStdOptionDefs6(D6O_IA_TA, OptionBuffer(4, 1),
+                                    typeid(Option6Int<uint32_t>));
     LibDhcpTest::testStdOptionDefs6(D6O_IAADDR, OptionBuffer(24, 1),
-                                     typeid(Option6IAAddr));
+                                    typeid(Option6IAAddr));
     LibDhcpTest::testStdOptionDefs6(D6O_ORO, OptionBuffer(10, 1),
-                                     typeid(Option6IntArray<uint16_t>));
+                                    typeid(Option6IntArray<uint16_t>));
+    LibDhcpTest::testStdOptionDefs6(D6O_PREFERENCE, OptionBuffer(1, 1),
+                                    typeid(Option6Int<uint8_t>));
     LibDhcpTest::testStdOptionDefs6(D6O_ELAPSED_TIME, OptionBuffer(2, 1),
-                                     typeid(Option6Int<uint16_t>));
+                                    typeid(Option6Int<uint16_t>));
+    LibDhcpTest::testStdOptionDefs6(D6O_RELAY_MSG, OptionBuffer(30, 1),
+                                    typeid(Option));
     LibDhcpTest::testStdOptionDefs6(D6O_STATUS_CODE, OptionBuffer(10, 1),
-                                     typeid(Option));
+                                    typeid(Option));
     LibDhcpTest::testStdOptionDefs6(D6O_RAPID_COMMIT, OptionBuffer(),
-                                     typeid(Option));
+                                    typeid(Option));
     LibDhcpTest::testStdOptionDefs6(D6O_NAME_SERVERS, OptionBuffer(32, 1),
-                                     typeid(Option6AddrLst));
+                                    typeid(Option6AddrLst));
 }
 
 }