Browse Source

[2157] Merge branch 'trac2157_2' of ssh://git.bind10.isc.org/var/bind10/git/bind10 into trac2157-2

JINMEI Tatuya 12 years ago
parent
commit
36f21c2186

+ 2 - 2
src/bin/auth/auth_srv.cc

@@ -553,7 +553,7 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
                                            **impl_->keyring_));
         tsig_error = tsig_context->verify(tsig_record, io_message.getData(),
                                           io_message.getDataSize());
-        impl_->stats_attrs_.setRequestSig(true, false,
+        impl_->stats_attrs_.setRequestSig(true,
                                           tsig_error != TSIGError::NOERROR());
     }
 
@@ -575,7 +575,7 @@ AuthSrv::processMessage(const IOMessage& io_message, Message& message,
         }
 
         // note: This can only be reliable after TSIG check succeeds.
-        impl_->stats_attrs_.setRequestOpCode(opcode.getCode());
+        impl_->stats_attrs_.setRequestOpCode(opcode);
 
         if (opcode == Opcode::NOTIFY()) {
             send_answer = impl_->processNotify(io_message, message, buffer,

+ 9 - 8
src/bin/auth/statistics.cc.pre

@@ -16,10 +16,13 @@
 #include <auth/statistics_items.h>
 #include <auth/auth_log.h>
 
+#include <cc/data.h>
+
+#include <dns/message.h>
 #include <dns/opcode.h>
 #include <dns/rcode.h>
 
-#include <cc/data.h>
+#include <statistics/counter.h>
 
 #include <algorithm>
 #include <cctype>
@@ -80,8 +83,8 @@ namespace statistics {
 // Note: opcode in this array must be start with 0 and be sequential
 const int opcode_to_msgcounter[] = {
     MSG_OPCODE_QUERY,    // Opcode =  0: Query
-    MSG_OPCODE_IQUERY,   // Opcode =  1: Iquery
-    MSG_OPCODE_STATUS,   // Opcode =  2: STATUS
+    MSG_OPCODE_IQUERY,   // Opcode =  1: IQuery
+    MSG_OPCODE_STATUS,   // Opcode =  2: Status
     MSG_OPCODE_OTHER,    // Opcode =  3: (Unassigned)
     MSG_OPCODE_NOTIFY,   // Opcode =  4: Notify
     MSG_OPCODE_UPDATE,   // Opcode =  5: Update
@@ -144,9 +147,6 @@ Counters::incRequest(const MessageAttributes& msgattrs) {
     if (msgattrs.getRequestSigTSIG()) {
         server_msg_counter_.inc(MSG_REQUEST_TSIG);
     }
-    if (msgattrs.getRequestSigSIG0()) {
-        server_msg_counter_.inc(MSG_REQUEST_SIG0);
-    }
     if (msgattrs.getRequestSigBadSig()) {
         server_msg_counter_.inc(MSG_REQUEST_BADSIG);
         // If signature validation is failed, no other query attributes are
@@ -165,7 +165,8 @@ Counters::incRequest(const MessageAttributes& msgattrs) {
     }
 
     // OPCODE
-    server_msg_counter_.inc(opcode_to_msgcounter[msgattrs.getRequestOpCode()]);
+    server_msg_counter_.inc(
+        opcode_to_msgcounter[msgattrs.getRequestOpCode().getCode()]);
 }
 
 void
@@ -205,7 +206,7 @@ Counters::incResponse(const MessageAttributes& msgattrs,
         server_msg_counter_.inc(MSG_REQUEST_BADEDNSVER);
     }
 
-    if (msgattrs.getRequestOpCode() == Opcode::QUERY_CODE) {
+    if (msgattrs.getRequestOpCode() == Opcode::QUERY()) {
         // compound attributes
         const unsigned int answer_rrs =
             response.getRRCount(Message::SECTION_ANSWER);

+ 11 - 21
src/bin/auth/statistics.h

@@ -18,9 +18,9 @@
 #include <cc/data.h>
 
 #include <dns/message.h>
+#include <dns/opcode.h>
 
 #include <statistics/counter.h>
-#include <statistics/counter_dict.h>
 
 #include <boost/noncopyable.hpp>
 
@@ -32,6 +32,8 @@ namespace isc {
 namespace auth {
 namespace statistics {
 
+using isc::dns::Opcode;
+
 /// \brief DNS Message attributes for statistics.
 ///
 /// This class holds some attributes related to a DNS message
@@ -41,13 +43,12 @@ private:
     // request attributes
     int req_ip_version_;            // IP version
     int req_transport_protocol_;    // Transport layer protocol
-    uint8_t req_opcode_;            // OpCode
+    Opcode req_opcode_;   // OpCode
     enum BitAttributes {
         REQ_IS_EDNS_0,              // EDNS ver.0
         REQ_IS_DNSSEC_OK,           // DNSSEC OK (DO) bit is set
         REQ_IS_TSIG,                // signed with valid TSIG
-        REQ_IS_SIG0,                // signed with valid SIG(0)
-        REQ_IS_BADSIG,              // signed but bad signature,
+        REQ_IS_BADSIG,              // signed but bad signature
         RES_IS_TRUNCATED,           // DNS message is truncated
         BIT_ATTRIBUTES_TYPES
     };
@@ -56,20 +57,20 @@ public:
     /// \brief The constructor.
     ///
     /// \throw None
-    MessageAttributes() {
+    MessageAttributes() : req_opcode_(Opcode::RESERVED15_CODE) {
         reset();
     }
 
     /// \brief Get request opcode.
     /// \return opcode of a request
     /// \throw None
-    uint8_t getRequestOpCode() const {
+    const Opcode& getRequestOpCode() const {
         return (req_opcode_);
     }
 
     /// \brief Set request opcode.
     /// \throw None
-    void setRequestOpCode(const uint8_t opcode) {
+    void setRequestOpCode(const Opcode& opcode) {
         req_opcode_ = opcode;
     }
 
@@ -137,13 +138,6 @@ public:
         return (bit_attributes_[REQ_IS_TSIG]);
     }
 
-    /// \brief Get request SIG(0) signed.
-    /// \return true if request is SIG(0) signed
-    /// \throw None
-    bool getRequestSigSIG0() const {
-        return (bit_attributes_[REQ_IS_SIG0]);
-    }
-
     /// \brief Get request signature is bad.
     /// \return true if request signature is bad
     /// \throw None
@@ -153,15 +147,11 @@ public:
 
     /// \brief Set request TSIG attributes.
     /// \param is_tsig true if request is TSIG signed
-    /// \param is_sig0 true if request is SIG(0) signed
     /// \param is_badsig true if request signature is bad
     /// \throw None
-    void setRequestSig(const bool is_tsig, const bool is_sig0,
-                       const bool is_badsig)
-    {
-        assert(!(is_tsig && is_sig0));
+    void setRequestSig(const bool is_tsig, const bool is_badsig) {
+        assert(!(!is_tsig && is_badsig));
         bit_attributes_[REQ_IS_TSIG] = is_tsig;
-        bit_attributes_[REQ_IS_SIG0] = is_sig0;
         bit_attributes_[REQ_IS_BADSIG] = is_badsig;
     }
 
@@ -184,7 +174,7 @@ public:
     void reset() {
         req_ip_version_ = 0;
         req_transport_protocol_ = 0;
-        req_opcode_ = 0;
+        req_opcode_ = Opcode(Opcode::RESERVED15_CODE);
         bit_attributes_.reset();
     }
 };

+ 9 - 9
src/bin/auth/statistics_msg_items.def

@@ -7,15 +7,15 @@ request	msg_counter_request		Request statistics	=
 	sig0		MSG_REQUEST_SIG0	Number of requests with SIG(0) received by the b10-auth server; currently not implemented in BIND 10.
 	badsig		MSG_REQUEST_BADSIG	Number of requests with invalid TSIG or SIG(0) signature received by the b10-auth server.
 	udp		MSG_REQUEST_UDP		Number of UDP requests received by the b10-auth server.
-	tcp		MSG_REQUEST_TCP		Number of UDP requests received by the b10-auth server.
+	tcp		MSG_REQUEST_TCP		Number of TCP requests received by the b10-auth server.
 	dnssec_ok	MSG_REQUEST_DNSSEC_OK	Number of requests with "DNSSEC OK" (DO) bit was set received by the b10-auth server.
 	;
-opcode	msg_counter_opcode		Opcode statistics	=
-	query		MSG_OPCODE_QUERY		Number of Opcode=QUERY requests received by the b10-auth server.
-	iquery		MSG_OPCODE_IQUERY	Number of Opcode=IQUERY requests received by the b10-auth server.
-	status		MSG_OPCODE_STATUS	Number of Opcode=STATUS requests received by the b10-auth server.
-	notify		MSG_OPCODE_NOTIFY	Number of Opcode=NOTIFY requests received by the b10-auth server.
-	update		MSG_OPCODE_UPDATE	Number of Opcode=UPDATE requests received by the b10-auth server.
+opcode	msg_counter_opcode		OpCode statistics	=
+	query		MSG_OPCODE_QUERY		Number of OpCode=Query requests received by the b10-auth server.
+	iquery		MSG_OPCODE_IQUERY	Number of OpCode=IQuery requests received by the b10-auth server.
+	status		MSG_OPCODE_STATUS	Number of OpCode=Status requests received by the b10-auth server.
+	notify		MSG_OPCODE_NOTIFY	Number of OpCode=Notify requests received by the b10-auth server.
+	update		MSG_OPCODE_UPDATE	Number of OpCode=Update requests received by the b10-auth server.
 	other		MSG_OPCODE_OTHER	Number of requests in other OpCode received by the b10-auth server.
 	;
 responses	MSG_RESPONSE			Number of responses sent by the b10-auth server.
@@ -25,11 +25,11 @@ response	msg_counter_response	Response statistics	=
 	tsig		MSG_RESPONSE_TSIG	Number of responses with TSIG sent by the b10-auth server.
 	sig0		MSG_RESPONSE_SIG0	Number of responses with SIG(0) sent by the b10-auth server; currently not implemented in BIND 10.
 	;
-qrysuccess	MSG_QRYSUCCESS			Number of queries received by the b10-auth server resulted in rcode = NOERROR and the number of answer RR >= 1.
+qrysuccess	MSG_QRYSUCCESS			Number of queries received by the b10-auth server resulted in rcode = NoError and the number of answer RR >= 1.
 qryauthans	MSG_QRYAUTHANS			Number of queries received by the b10-auth server resulted in authoritative answer.
 qrynoauthans	MSG_QRYNOAUTHANS		Number of queries received by the b10-auth server resulted in non-authoritative answer.
 qryreferral	MSG_QRYREFERRAL			Number of queries received by the b10-auth server resulted in referral answer.
-qrynxrrset	MSG_QRYNXRRSET			Number of queries received by the b10-auth server resulted in NOERROR but the number of answer RR == 0.
+qrynxrrset	MSG_QRYNXRRSET			Number of queries received by the b10-auth server resulted in NoError but the number of answer RR == 0.
 authqryrej	MSG_QRYREJECT			Number of authoritative queries rejected by the b10-auth server.
 rcode		msg_counter_rcode	Rcode statistics	=
 	noerror		MSG_RCODE_NOERROR	Number of requests received by the b10-auth server resulted in RCODE = 0 (NoError).

+ 25 - 32
src/bin/auth/tests/statistics_unittest.cc.pre

@@ -111,7 +111,7 @@ TEST_F(CountersTest, incrementResponse) {
 
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
 
@@ -156,7 +156,7 @@ TEST_F(CountersTest, incrementProtocolType) {
 
         msgattrs.setRequestIPVersion(af);
         msgattrs.setRequestTransportProtocol(proto);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
 
@@ -209,7 +209,7 @@ TEST_F(CountersTest, incrementDO) {
         const bool is_dnssec_ok = i & 1;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(is_dnssec_ok);
 
@@ -252,7 +252,7 @@ TEST_F(CountersTest, incrementEDNS) {
         const bool is_edns0 = i & 1;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(is_edns0);
         msgattrs.setRequestDO(true);
 
@@ -302,22 +302,18 @@ TEST_F(CountersTest, incrementTSIG) {
     //      (none)     false
     //      TSIG       false
     //      TSIG       true
-    //      SIG(0)     false
-    //      SIG(0)     true
     //
     // badsig can't be true if the message does not have signature.
-    int count_req_tsig = 0, count_res_tsig = 0, count_req_sig0 = 0,
-        count_badsig = 0;
-    for (int i = 0; i < 5; ++i) {
-        const bool is_tsig = (i == 0 ? i : i+1) & 2;
-        const bool is_sig0 = (i == 0 ? i : i+1) & 4;
-        const bool is_badsig = (i == 0 ? i : i+1) & 1;
+    int count_req_tsig = 0, count_res_tsig = 0, count_badsig = 0;
+    for (int i = 0; i < 3; ++i) {
+        const bool is_tsig = (i == 2) ? true : i & 1;
+        const bool is_badsig = i & 2;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(is_tsig, is_sig0, is_badsig);
+        msgattrs.setRequestSig(is_tsig, is_badsig);
 
         response.setRcode(Rcode::REFUSED());
         response.addQuestion(Question(Name("example.com"),
@@ -333,9 +329,6 @@ TEST_F(CountersTest, incrementTSIG) {
                 ++count_res_tsig;
             }
         }
-        if (is_sig0) {
-            ++count_req_sig0;
-        }
         if (is_badsig) {
             ++count_badsig;
         }
@@ -349,7 +342,7 @@ TEST_F(CountersTest, incrementTSIG) {
         expect["request.dnssec_ok"] = i+1 - count_badsig;
         expect["request.tsig"] = count_req_tsig;
         expect["response.tsig"] = count_res_tsig;
-        expect["request.sig0"] = count_req_sig0;
+        expect["request.sig0"] = 0;
         expect["request.badsig"] = count_badsig;
         expect["responses"] = i+1 - count_badsig;
         expect["qrynoauthans"] = i+1 - count_badsig;
@@ -373,10 +366,10 @@ TEST_F(CountersTest, incrementOpcode) {
     {
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(i);
+        msgattrs.setRequestOpCode(Opcode(i));
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(false, false, false);
+        msgattrs.setRequestSig(false, false);
 
         response.setRcode(Rcode::REFUSED());
         response.addQuestion(Question(Name("example.com"),
@@ -431,10 +424,10 @@ TEST_F(CountersTest, incrementRcode) {
     {
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::IQUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::IQUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(false, false, false);
+        msgattrs.setRequestSig(false, false);
 
         response.setRcode(Rcode(i));
         response.addQuestion(Question(Name("example.com"),
@@ -494,10 +487,10 @@ TEST_F(CountersTest, incrementTruncated) {
         const bool is_truncated = i & 1;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::IQUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::IQUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(false, false, false);
+        msgattrs.setRequestSig(false, false);
         msgattrs.setResponseTruncated(is_truncated);
 
         response.setRcode(Rcode::SERVFAIL());
@@ -540,10 +533,10 @@ TEST_F(CountersTest, incrementQryAuthAnsAndNoAuthAns) {
         const bool is_aa_set = i & 1;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(false, false, false);
+        msgattrs.setRequestSig(false, false);
 
         response.setRcode(Rcode::SERVFAIL());
         response.addQuestion(Question(Name("example.com"),
@@ -580,10 +573,10 @@ TEST_F(CountersTest, incrementQrySuccess) {
     // Opcode = QUERY, Rcode = NOERROR, ANCOUNT > 0
     msgattrs.setRequestIPVersion(AF_INET);
     msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-    msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+    msgattrs.setRequestOpCode(Opcode::QUERY());
     msgattrs.setRequestEDNS0(true);
     msgattrs.setRequestDO(true);
-    msgattrs.setRequestSig(false, false, false);
+    msgattrs.setRequestSig(false, false);
 
     response.setRcode(Rcode::NOERROR());
     response.addQuestion(Question(Name("example.com"),
@@ -629,10 +622,10 @@ TEST_F(CountersTest, incrementQryReferralAndNxrrset) {
         const bool is_aa_set = i & 1;
         msgattrs.setRequestIPVersion(AF_INET);
         msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-        msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+        msgattrs.setRequestOpCode(Opcode::QUERY());
         msgattrs.setRequestEDNS0(true);
         msgattrs.setRequestDO(true);
-        msgattrs.setRequestSig(false, false, false);
+        msgattrs.setRequestSig(false, false);
 
         response.setRcode(Rcode::NOERROR());
         response.addQuestion(Question(Name("example.com"),
@@ -672,10 +665,10 @@ TEST_F(CountersTest, incrementAuthQryRej) {
     // Opcode = QUERY, Rcode = REFUSED, ANCOUNT = 0 (don't care)
     msgattrs.setRequestIPVersion(AF_INET);
     msgattrs.setRequestTransportProtocol(IPPROTO_UDP);
-    msgattrs.setRequestOpCode(Opcode::QUERY_CODE);
+    msgattrs.setRequestOpCode(Opcode::QUERY());
     msgattrs.setRequestEDNS0(true);
     msgattrs.setRequestDO(true);
-    msgattrs.setRequestSig(false, false, false);
+    msgattrs.setRequestSig(false, false);
 
     response.setRcode(Rcode::REFUSED());
     response.addQuestion(Question(Name("example.com"),