From: Andrei Pavel Date: Mon, 15 Nov 2021 15:49:33 +0000 (+0200) Subject: [#2038] add hwtype,hwaddr_source to v6 memfile X-Git-Tag: Kea-2.1.1~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=08a219b8a217ffc220a1d137b6bf4e2f40163f62;p=thirdparty%2Fkea.git [#2038] add hwtype,hwaddr_source to v6 memfile --- diff --git a/src/lib/dhcpsrv/csv_lease_file6.cc b/src/lib/dhcpsrv/csv_lease_file6.cc index 1164043cc6..cee9647d4a 100644 --- a/src/lib/dhcpsrv/csv_lease_file6.cc +++ b/src/lib/dhcpsrv/csv_lease_file6.cc @@ -59,6 +59,8 @@ CSVLeaseFile6::append(const Lease6& lease) { if (lease.hwaddr_) { // We may not have hardware information row.writeAt(getColumnIndex("hwaddr"), lease.hwaddr_->toText(false)); + row.writeAt(getColumnIndex("hwtype"), lease.hwaddr_->htype_); + row.writeAt(getColumnIndex("hwaddr_source"), lease.hwaddr_->source_); } row.writeAt(getColumnIndex("state"), lease.state_); // User context is optional. @@ -148,6 +150,8 @@ CSVLeaseFile6::initColumns() { addColumn("fqdn_rev", "1.0"); addColumn("hostname", "1.0"); addColumn("hwaddr", "2.0"); + addColumn("hwtype", "4.0", "1" /* == HTYPE_ETHER */); + addColumn("hwaddr_source", "4.0", "0" /* == HWADDR_SOURCE_UNKNOWN */); addColumn("state", "3.0", "0"); addColumn("user_context", "3.1"); // Any file with less than hostname is invalid @@ -235,11 +239,14 @@ HWAddrPtr CSVLeaseFile6::readHWAddr(const CSVRow& row) { try { - const HWAddr& hwaddr = HWAddr::fromText(row.readAt(getColumnIndex("hwaddr"))); + uint16_t hwtype(readHWType(row)); + HWAddr hwaddr(HWAddr::fromText(row.readAt(getColumnIndex("hwaddr")), hwtype)); if (hwaddr.hwaddr_.empty()) { return (HWAddrPtr()); } + hwaddr.source_ = readHWAddrSource(row); + /// @todo: HWAddr returns an object, not a pointer. Without HWAddr /// refactoring, at least one copy is unavoidable. @@ -256,6 +263,16 @@ CSVLeaseFile6::readHWAddr(const CSVRow& row) { } } +uint16_t +CSVLeaseFile6::readHWType(const CSVRow& row) { + return row.readAndConvertAt(getColumnIndex("hwtype")); +} + +uint32_t +CSVLeaseFile6::readHWAddrSource(const CSVRow& row) { + return row.readAndConvertAt(getColumnIndex("hwaddr_source")); +} + uint32_t CSVLeaseFile6::readState(const util::CSVRow& row) { uint32_t state = row.readAndConvertAt(getColumnIndex("state")); diff --git a/src/lib/dhcpsrv/csv_lease_file6.h b/src/lib/dhcpsrv/csv_lease_file6.h index 1dec282c58..b4b6e36581 100644 --- a/src/lib/dhcpsrv/csv_lease_file6.h +++ b/src/lib/dhcpsrv/csv_lease_file6.h @@ -99,6 +99,8 @@ private: /// - fqdn_rev /// - hostname /// - hwaddr + /// - hwtype + /// - hwaddr_source /// - state /// - user_context void initColumns(); @@ -174,6 +176,18 @@ private: /// @return pointer to the HWAddr structure that was read HWAddrPtr readHWAddr(const util::CSVRow& row); + /// @brief Reads hardware address type from the CSV file row. + /// + /// @param row CSV file row holding lease information. + /// @return pointer to the HWAddr structure that was read + uint16_t readHWType(const util::CSVRow& row); + + /// @brief Reads hardware address source from the CSV file row. + /// + /// @param row CSV file row holding lease information. + /// @return pointer to the HWAddr structure that was read + uint32_t readHWAddrSource(const util::CSVRow& row); + /// @brief Reads lease state from the CSV file row. /// /// @param row CSV file row holding lease information.