From: Marcin Siodelski Date: Thu, 13 Feb 2014 13:50:07 +0000 (+0100) Subject: [3316] Use the OptionVendorClass in DHCPv6 server code. X-Git-Tag: bind10-1.2.0beta1-release~35^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2027fa4cd4d38923038e04a3c766097eaa0da5fb;p=thirdparty%2Fkea.git [3316] Use the OptionVendorClass in DHCPv6 server code. --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 391bff6c47..432527f9da 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -54,6 +55,7 @@ #include #include #include +#include using namespace isc; using namespace isc::asiolink; @@ -2436,36 +2438,32 @@ Dhcpv6Srv::ifaceMgrSocket6ErrorHandler(const std::string& errmsg) { } void Dhcpv6Srv::classifyPacket(const Pkt6Ptr& pkt) { + OptionVendorClassPtr vclass = boost::dynamic_pointer_cast< + OptionVendorClass>(pkt->getOption(D6O_VENDOR_CLASS)); - boost::shared_ptr vclass = - boost::dynamic_pointer_cast(pkt->getOption(D6O_VENDOR_CLASS)); - - if (!vclass) { + if (!vclass || vclass->getTuplesNum() == 0) { return; } - string classes = ""; + std::ostringstream classes; - // DOCSIS specific section - if (vclass->readString(VENDOR_CLASS_STRING_INDEX) - .find(DOCSIS3_CLASS_MODEM) != std::string::npos) { + if (vclass->hasTuple(DOCSIS3_CLASS_MODEM)) { pkt->addClass(DOCSIS3_CLASS_MODEM); - classes += string(DOCSIS3_CLASS_MODEM) + " "; - } else - if (vclass->readString(VENDOR_CLASS_STRING_INDEX) - .find(DOCSIS3_CLASS_EROUTER) != std::string::npos) { + classes << DOCSIS3_CLASS_MODEM; + + } else if (vclass->hasTuple(DOCSIS3_CLASS_EROUTER)) { pkt->addClass(DOCSIS3_CLASS_EROUTER); - classes += string(DOCSIS3_CLASS_EROUTER) + " "; - }else - { - // Otherwise use the string as is - classes += vclass->readString(VENDOR_CLASS_STRING_INDEX); - pkt->addClass(vclass->readString(VENDOR_CLASS_STRING_INDEX)); + classes << DOCSIS3_CLASS_EROUTER; + + } else { + pkt->addClass(vclass->getTuple(0).getText()); + classes << vclass->getTuple(0); + } - if (!classes.empty()) { + if (!classes.str().empty()) { LOG_DEBUG(dhcp6_logger, DBG_DHCP6_BASIC, DHCP6_CLASS_ASSIGNED) - .arg(classes); + .arg(classes.str()); } }