]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[master] Merge branch 'trac3036'
authorMarcin Siodelski <marcin@isc.org>
Tue, 20 Aug 2013 10:47:53 +0000 (12:47 +0200)
committerMarcin Siodelski <marcin@isc.org>
Tue, 20 Aug 2013 10:47:53 +0000 (12:47 +0200)
Conflicts:
src/lib/dhcp/option_definition.cc
src/lib/dhcp/option_definition.h

1  2 
src/bin/dhcp6/dhcp6_messages.mes
src/bin/dhcp6/tests/Makefile.am
src/lib/dhcp/Makefile.am
src/lib/dhcp/option_data_types.cc
src/lib/dhcp/option_definition.cc
src/lib/dhcp/option_definition.h
src/lib/dhcp/tests/Makefile.am
src/lib/dhcp/tests/libdhcp++_unittest.cc

Simple merge
index 928598ec4a50f76cc0edc5b4d4cd8c6e1de53b76,b53393fc5ef006a202045f31fff162f53003b932..7ea71634bb87c27c0eed477d33629a9d8ce462d3
@@@ -79,8 -66,8 +79,9 @@@ dhcp6_unittests_LDADD += $(top_builddir
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/cc/libb10-cc.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/config/libb10-cfgclient.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/dhcp/libb10-dhcp++.la
+ dhcp6_unittests_LDADD += $(top_builddir)/src/lib/dhcp_ddns/libb10-dhcp_ddns.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/dhcpsrv/libb10-dhcpsrv.la
 +dhcp6_unittests_LDADD += $(top_builddir)/src/lib/hooks/libb10-hooks.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/exceptions/libb10-exceptions.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/log/libb10-log.la
  dhcp6_unittests_LDADD += $(top_builddir)/src/lib/util/libb10-util.la
Simple merge
Simple merge
index 1b87bff6ed630bc07e405984d40ee17bd921a1c0,ac1369ca17961f576f52cfe1a94ba506b650b869..be24021777646f6ade9300664dc1f9eb1e147225
@@@ -185,11 -189,11 +191,15 @@@ OptionDefinition::optionFactory(Option:
                      // option only for the same reasons as described in
                      // for IA_NA and IA_PD above.
                      return (factoryIAAddr6(type, begin, end));
+                 } else if (code_ == D6O_CLIENT_FQDN && haveClientFqdnFormat()) {
+                     // FQDN option requires special processing. Thus, there is
+                     // a specialized class to handle it.
+                     return (OptionPtr(new Option6ClientFqdn(begin, end)));
                  }
 +            } else {
 +                if ((code_ == DHO_FQDN) && haveFqdn4Format()) {
 +                    return (OptionPtr(new Option4ClientFqdn(begin, end)));
 +                }
              }
          }
          return (OptionPtr(new OptionCustom(*this, u, begin, end)));
@@@ -347,18 -354,18 +360,28 @@@ OptionDefinition::haveIAAddr6Format() c
      return (haveIAx6Format(OPT_IPV6_ADDRESS_TYPE));
  }
  
 +bool
 +OptionDefinition::haveFqdn4Format() const {
 +    return (haveType(OPT_RECORD_TYPE) &&
 +            record_fields_.size() == 4 &&
 +            record_fields_[0] == OPT_UINT8_TYPE &&
 +            record_fields_[1] == OPT_UINT8_TYPE &&
 +            record_fields_[2] == OPT_UINT8_TYPE &&
 +            record_fields_[3] == OPT_FQDN_TYPE);
 +}
 +
+ bool
+ OptionDefinition::haveClientFqdnFormat() const {
+     return (haveType(OPT_RECORD_TYPE) &&
+             (record_fields_.size() == 2) &&
+             (record_fields_[0] == OPT_UINT8_TYPE) &&
+             (record_fields_[1] == OPT_FQDN_TYPE));
+ }
  template<typename T>
- T OptionDefinition::lexicalCastWithRangeCheck(const std::string& value_str) const {
+ T
+ OptionDefinition::lexicalCastWithRangeCheck(const std::string& value_str)
+     const {
      // Lexical cast in case of our data types make sense only
      // for uintX_t, intX_t and bool type.
      if (!OptionDataTypeTraits<T>::integer_type &&
index 0472d012fd92dae6ef404b485a779e1d06ca9bcb,99a57f504c69cb32f692c612f58e7e3320598e08..884a4adabdbae998ad09178d0c4d24300846c2fb
@@@ -275,21 -275,12 +275,27 @@@ public
      /// @return true if specified format is IAADDR option format.
      bool haveIAAddr6Format() const;
  
+     /// @brief Check if specified format is OPTION_CLIENT_FQDN option format.
+     ///
+     /// @return true of specified format is OPTION_CLIENT_FQDN option format,
+     /// false otherwise.
+     bool haveClientFqdnFormat() const;
 +    /// @brief Check if option has format of the DHCPv4 Client FQDN
 +    /// %Option.
 +    ///
 +    /// The encoding of the domain-name carried by the FQDN option is
 +    /// conditional and is specified in the flags field of the option.
 +    /// The domain-name can be encoded in the ASCII format or canonical
 +    /// wire format. The ASCII format is deprecated, therefore canonical
 +    /// format is selected for the FQDN option definition and this function
 +    /// returns true if the option definition comprises the domain-name
 +    /// field encoded in canonical format.
 +    ///
 +    /// @return true if option has the format of DHCPv4 Client FQDN
 +    /// %Option.
 +    bool haveFqdn4Format() const;
 +
      /// @brief Option factory.
      ///
      /// This function creates an instance of DHCP option using
index 84e99defc6011effcbf6726cd9f2c1a6165a38e6,358f613458f11e1fa30be7cffd7d0c673ca431af..3baac04c15488acc1a373f32ae5d90157cdde751
@@@ -31,8 -31,8 +31,9 @@@ libdhcp___unittests_SOURCES += hwaddr_u
  libdhcp___unittests_SOURCES += iface_mgr_unittest.cc
  libdhcp___unittests_SOURCES += libdhcp++_unittest.cc
  libdhcp___unittests_SOURCES += option4_addrlst_unittest.cc
 +libdhcp___unittests_SOURCES += option4_client_fqdn_unittest.cc
  libdhcp___unittests_SOURCES += option6_addrlst_unittest.cc
+ libdhcp___unittests_SOURCES += option6_client_fqdn_unittest.cc
  libdhcp___unittests_SOURCES += option6_ia_unittest.cc
  libdhcp___unittests_SOURCES += option6_iaaddr_unittest.cc
  libdhcp___unittests_SOURCES += option_int_unittest.cc
index e4d723fd9cc83a8d328b53ae7ddb8d4729bbce81,dad4ad55229af62bc32b067eea88a5e31613d7cf..f7f5ffcc281297dc93d23d509a288c2a7414cd1f
@@@ -18,8 -18,8 +18,9 @@@
  #include <dhcp/dhcp6.h>
  #include <dhcp/libdhcp++.h>
  #include <dhcp/option4_addrlst.h>
 +#include <dhcp/option4_client_fqdn.h>
  #include <dhcp/option6_addrlst.h>
+ #include <dhcp/option6_client_fqdn.h>
  #include <dhcp/option6_ia.h>
  #include <dhcp/option6_iaaddr.h>
  #include <dhcp/option_custom.h>