diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index bd3675b4ec..c1a70cef78 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -349,16 +349,27 @@ void Dhcpv6Srv::appendRequestedOptions(const Pkt6Ptr& question, Pkt6Ptr& answer) } OptionPtr Dhcpv6Srv::createStatusCode(uint16_t code, const std::string& text) { + // @todo This function uses OptionCustom class to manage contents + // of the data fields. Since this this option is frequently used + // it may be good to implement dedicated class to avoid performance + // impact. + + // Get the definition of the option holding status code. OptionDefinitionPtr status_code_def = LibDHCP::getOptionDef(Option::V6, D6O_STATUS_CODE); + // This definition is assumed to be initialized in LibDHCP. assert(status_code_def); + // As there is no dedicated class to represent Status Code + // the OptionCustom class should be returned here. boost::shared_ptr option_status = boost::dynamic_pointer_cast< OptionCustom>(status_code_def->optionFactory(Option::V6, D6O_STATUS_CODE)); assert(option_status); + // Set status code to 'code' (0 - means data field #0). option_status->writeInteger(code, 0); + // Set a message (1 - means data field #1). option_status->writeString(text, 1); return (option_status); }