std::string
Pkt4::makeLabel(const HWAddrPtr& hwaddr, const ClientIdPtr& client_id,
const uint32_t transid) {
+ // Create label with HW address and client identifier.
+ stringstream label;
+ label << makeLabel(hwaddr, client_id);
+
+ // Append transaction id.
+ label << ", tid=0x" << hex << transid << dec;
+
+ return label.str();
+}
+
+std::string
+Pkt4::makeLabel(const HWAddrPtr& hwaddr, const ClientIdPtr& client_id) {
stringstream label;
label << "[" << (hwaddr ? hwaddr->toText() : "no hwaddr info")
<< "], cid=[" << (client_id ? client_id->toText() : "no info")
- << "], tid=0x" << hex << transid << dec;
+ << "]";
return label.str();
}
-
std::string
Pkt4::toText() const {
stringstream output;
const ClientIdPtr& client_id,
const uint32_t transid);
+ /// @brief Returns text representation of the given packet identifers.
+ ///
+ /// This variant of the method does not include transaction id.
+ ///
+ /// @param hwaddr hardware address to include in the string, it may be
+ /// NULL.
+ /// @param client_id client id to include in the string, it may be NULL.
+ static std::string makeLabel(const HWAddrPtr& hwaddr, const ClientIdPtr& client_id);
+
/// @brief Returns text representation of the packet.
///
/// This function is useful mainly for debugging.
std::string
Pkt6::makeLabel(const DuidPtr duid, const uint32_t transid,
const HWAddrPtr& hwaddr) {
+ // Create label with DUID and HW address.
+ std::stringstream label;
+ label << makeLabel(duid, hwaddr);
+
+ // Append transaction id.
+ label << ", tid=0x" << std::hex << transid << std::dec;
+
+ return (label.str());
+}
+
+std::string
+Pkt6::makeLabel(const DuidPtr duid, const HWAddrPtr& hwaddr) {
std::stringstream label;
// DUID should be present at all times, so explicitly inform when
// it is no present (no info).
label << "duid=[" << (duid ? duid->toText() : "no info")
- << "],";
+ << "]";
// HW address is typically not carried in the DHCPv6 mmessages
// and can be extracted using various, but not fully reliable,
// techniques. If it is not present, don't print anything.
if (hwaddr) {
- label << " [" << hwaddr->toText() << "],";
+ label << ", [" << hwaddr->toText() << "]";
}
- // Transaction id is always there.
- label << " tid=0x" << std::hex << transid << std::dec;
-
return (label.str());
}
static std::string makeLabel(const DuidPtr duid, const uint32_t transid,
const HWAddrPtr& hwaddr);
+ /// @brief Returns text representation of the given packet identifiers.
+ ///
+ /// This variant of the method does not include transaction id.
+ ///
+ /// @param duid Pointer to the client identifier or NULL.
+ /// @param transid Numeric transaction id to include in the string.
+ /// @param hwaddr Hardware address to include in the string or NULL.
+ ///
+ /// @return String with text representation of the packet identifiers.
+ static std::string makeLabel(const DuidPtr duid, const HWAddrPtr& hwaddr);
+
/// @brief Returns text representation of the primary packet identifiers
///
/// This method is intended to be used to provide a consistent way to
}
+// Tests that the variant of makeLabel which doesn't include transaction
+// id produces expected output.
+TEST_F(Pkt4Test, makeLabelWithoutTransactionId) {
+ EXPECT_EQ("[no hwaddr info], cid=[no info]",
+ Pkt4::makeLabel(HWAddrPtr(), ClientIdPtr()));
+
+ // Test non-null hardware address.
+ HWAddrPtr hwaddr(new HWAddr(HWAddr::fromText("01:02:03:04:05:06", 123)));
+ EXPECT_EQ("[hwtype=123 01:02:03:04:05:06], cid=[no info]",
+ Pkt4::makeLabel(hwaddr, ClientIdPtr()));
+
+ // Test non-null client identifier.
+ ClientIdPtr cid = ClientId::fromText("01:02:03:04");
+ EXPECT_EQ("[hwtype=123 01:02:03:04:05:06], cid=[01:02:03:04]",
+ Pkt4::makeLabel(hwaddr, cid));
+}
+
// Tests that the correct DHCPv4 message name is returned for various
// message types.
TEST_F(Pkt4Test, getName) {
Pkt6::makeLabel(DuidPtr(), 0x0, HWAddrPtr()));
}
+// Tests that the variant of makeLabel which doesn't include transaction
+// id produces expected output.
+TEST_F(Pkt6Test, makeLabelWithoutTransactionId) {
+ DuidPtr duid(new DUID(DUID::fromText("0102020202030303030303")));
+ HWAddrPtr hwaddr(new HWAddr(HWAddr::fromText("01:02:03:04:05:06",
+ HTYPE_ETHER)));
+
+ // Specify DUID and no HW Address.
+ EXPECT_EQ("duid=[01:02:02:02:02:03:03:03:03:03:03]",
+ Pkt6::makeLabel(duid, HWAddrPtr()));
+
+ // Specify HW Address and no DUID.
+ EXPECT_EQ("duid=[no info], [hwtype=1 01:02:03:04:05:06]",
+ Pkt6::makeLabel(DuidPtr(), hwaddr));
+
+ // Specify both DUID and HW Address.
+ EXPECT_EQ("duid=[01:02:02:02:02:03:03:03:03:03:03], "
+ "[hwtype=1 01:02:03:04:05:06]",
+ Pkt6::makeLabel(duid, hwaddr));
+
+ // Specify neither DUID nor HW Address.
+ EXPECT_EQ("duid=[no info]", Pkt6::makeLabel(DuidPtr(), HWAddrPtr()));
+}
+
// This test verifies that it is possible to obtain the packet
// identifiers in the textual format from the packet instance.
TEST_F(Pkt6Test, getLabel) {