]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[4483] Added pkt4.msgtype and pkt4.transid
authorTomek Mrugalski <tomasz@isc.org>
Fri, 19 Aug 2016 17:06:00 +0000 (19:06 +0200)
committerTomek Mrugalski <tomasz@isc.org>
Fri, 19 Aug 2016 17:06:00 +0000 (19:06 +0200)
src/lib/eval/parser.yy
src/lib/eval/tests/token_unittest.cc
src/lib/eval/token.cc
src/lib/eval/token.h

index 40ce7999aff0d0a630da47cc4ff0ec2199947a03..aad6c8e88d4f7a142dd7150bcfae8f700bb60d4d 100644 (file)
@@ -469,6 +469,14 @@ pkt4_field : CHADDR
                 {
                     $$ = TokenPkt4::SIADDR;
                 }
+           | MSGTYPE
+                 {
+                    $$ = TokenPkt4::MSGTYPE;
+                 }
+           | TRANSID
+                 {
+                    $$ = TokenPkt4::TRANSID;
+                 }
            ;
 
 pkt6_field : MSGTYPE
index 6e8ac1ef711c609fb6fe924dba1f1cfdd8cfe9bd..6c09f31270e140b66390806a0b1a4a318c48702d 100644 (file)
@@ -1347,6 +1347,24 @@ TEST_F(TokenTest, pkt4Fields) {
     ASSERT_EQ(4, values_.top().size());
     EXPECT_EQ(0, memcmp(expected_addr, &values_.top()[0], 4));
 
+    // Check msgtype.
+    clearStack();
+    ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::MSGTYPE)));
+    EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+    ASSERT_EQ(1, values_.size());
+    ASSERT_EQ(4, values_.top().size());
+    string exp_msgtype = encode(DHCPDISCOVER);
+    EXPECT_EQ(0, memcmp(&exp_msgtype[0], &values_.top()[0], 4));
+
+    // Check transaction-id
+    clearStack();
+    ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::TRANSID)));
+    EXPECT_NO_THROW(t_->evaluate(*pkt4_, values_));
+    ASSERT_EQ(1, values_.size());
+    ASSERT_EQ(4, values_.top().size());
+    string exp_transid = encode(12345);
+    EXPECT_EQ(0, memcmp(&exp_transid[0], &values_.top()[0], 4));
+
     // Check a DHCPv6 packet throws.
     clearStack();
     ASSERT_NO_THROW(t_.reset(new TokenPkt4(TokenPkt4::HLEN)));
@@ -1367,6 +1385,8 @@ TEST_F(TokenTest, pkt4Fields) {
     addString("EVAL_DEBUG_PKT4 Pushing PKT4 field ciaddr with value 0xC0000202");
     addString("EVAL_DEBUG_PKT4 Pushing PKT4 field yiaddr with value 0xC0000203");
     addString("EVAL_DEBUG_PKT4 Pushing PKT4 field siaddr with value 0xC0000204");
+    addString("EVAL_DEBUG_PKT4 Pushing PKT4 field msgtype with value 0x00000001");
+    addString("EVAL_DEBUG_PKT4 Pushing PKT4 field transid with value 0x00003039");
     EXPECT_TRUE(checkFile());
 }
 
index 8d8098da0edbe3c48d2c4fe26635f5b90795053e..a6471929a2a9b6a27e70c65b3f7df8a32f63fdb5 100644 (file)
@@ -303,6 +303,14 @@ TokenPkt4::evaluate(Pkt& pkt, ValueStack& values) {
             value = EvalContext::fromUint32(pkt4.getHtype());
             type_str = "htype";
             break;
+        case MSGTYPE:
+            value = EvalContext::fromUint32(pkt4.getType());
+            type_str = "msgtype";
+            break;
+        case TRANSID:
+            value = EvalContext::fromUint32(pkt4.getTransid());
+            type_str = "transid";
+            break;
 
         default:
             isc_throw(EvalTypeError, "Bad field specified: "
index 21dcb2810bb4ed75c904f9c259bb3fd030c58f93..0fb8c4caafe709477f1d937b34d1f9468c957f52 100644 (file)
@@ -442,7 +442,9 @@ public:
         YIADDR, ///< yiaddr (IPv4 address)
         SIADDR, ///< siaddr (IPv4 address)
         HLEN,   ///< hlen (hardware address length)
-        HTYPE   ///< htype (hardware address type)
+        HTYPE,  ///< htype (hardware address type)
+        MSGTYPE, ///< message type (not really a field, content of option 53)
+        TRANSID, ///< transaction-id (xid)
     };
 
     /// @brief Constructor (does nothing)