From: Francis Dupont Date: Fri, 27 Nov 2015 11:52:45 +0000 (+0100) Subject: [4204fd] Reverted hex->bin change X-Git-Tag: trac4204fd_reverted~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=97aaee6e3bf7aef6a1da9ae5244086dfd5387f0c;p=thirdparty%2Fkea.git [4204fd] Reverted hex->bin change --- diff --git a/doc/guide/classify.xml b/doc/guide/classify.xml index b6916de425..02317cb95a 100644 --- a/doc/guide/classify.xml +++ b/doc/guide/classify.xml @@ -161,7 +161,7 @@ Hex String0XABCDA hexadecimal string Integer123An integer value Option Textoption[code].textThe value of the option with code "code" from the packet as text -Option Binoption[code].binThe value of the option with code "code" from the packet as binary +Option Hexoption[code].hexThe value of the option with code "code" from the packet as hex @@ -178,8 +178,8 @@ "option[code]" extracts the value of the option with the given code from the incoming packet. If the packet doesn't contain the option, it - returns the empty string. The string can be presented as text or binary - with the ".text" or ".bin" modifiers. In both cases only the payload + returns the empty string. The string can be presented as text or hex + with the ".text" or ".hex" modifiers. In both cases only the payload is presented; the type code and length fields are not included. @@ -297,7 +297,7 @@ "client-classes": [ { "name": "Client_enterprise", - "test": "substring(option[2].bin,0,6) == 0x0002AABBCCDD'", + "test": "substring(option[2].hex,0,6) == 0x0002AABBCCDD'", "option-data": [ { "name": "dns-servers", @@ -370,7 +370,7 @@ "client-classes": [ { "name": "Client_enterprise", - "test": "substring(option[2].bin,0,6) == 0x0002AABBCCDD'", + "test": "substring(option[2].hex,0,6) == 0x0002AABBCCDD'", "option-data": [ { "name": "dns-servers", diff --git a/doc/guide/dhcp6-srv.xml b/doc/guide/dhcp6-srv.xml index e7c8fc20e4..f95f254dc1 100644 --- a/doc/guide/dhcp6-srv.xml +++ b/doc/guide/dhcp6-srv.xml @@ -1615,7 +1615,7 @@ should include options from the isc option space: "client-classes": [ { "name": "Client_enterprise", - "test": "substring(option[2].bin,0,6) == 0x0002AABBCCDD'", + "test": "substring(option[2].hex,0,6) == 0x0002AABBCCDD'", "option-data": [ { "name": "dns-servers", diff --git a/src/lib/eval/eval.dox b/src/lib/eval/eval.dox index f8c3cd31fa..8ab107a5a8 100644 --- a/src/lib/eval/eval.dox +++ b/src/lib/eval/eval.dox @@ -85,9 +85,9 @@ 19. TokenPtr opt(new TokenOption($3, TokenOption::TEXTUAL)); 20. ctx.expression.push_back(opt); 21. } -22. | OPTION '[' INTEGER ']' DOT BIN +22. | OPTION '[' INTEGER ']' DOT HEX 23. { -24. TokenPtr opt(new TokenOption($3, TokenOption::BINARY)); +24. TokenPtr opt(new TokenOption($3, TokenOption::HEXADECIMAL)); 25. ctx.expression.push_back(opt); 26. } 27. ; @@ -99,7 +99,7 @@ single token or an expression "token == token" (EQUAL has been defined as "==" elsewhere). Token is further defined in lines 7-22: it may either be a string (lines 7-11), a hex string (lines 12-16), option in the textual format (lines 17-21) -or option in the binary format (lines 22-26). +or option in a hexadecimal format (lines 22-26). When the actual case is determined, the respective C++ action is executed. For example, if the token is a string, the TokenString class is instantiated with the appropriate value and put onto the expression vector. diff --git a/src/lib/eval/lexer.cc b/src/lib/eval/lexer.cc index b579e13658..808247a356 100644 --- a/src/lib/eval/lexer.cc +++ b/src/lib/eval/lexer.cc @@ -514,8 +514,8 @@ static yyconst flex_int32_t yy_ec[256] = 14, 14, 14, 14, 14, 14, 14, 15, 14, 14, 16, 1, 17, 1, 18, 1, 19, 20, 13, 13, - 21, 13, 22, 14, 23, 14, 14, 24, 14, 25, - 26, 27, 14, 28, 29, 30, 31, 14, 14, 32, + 21, 13, 22, 23, 24, 14, 14, 25, 14, 26, + 27, 28, 14, 29, 30, 31, 32, 14, 14, 33, 14, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -533,22 +533,22 @@ static yyconst flex_int32_t yy_ec[256] = 1, 1, 1, 1, 1 } ; -static yyconst flex_int32_t yy_meta[33] = +static yyconst flex_int32_t yy_meta[34] = { 0, 1, 2, 3, 1, 1, 1, 1, 2, 1, 4, 4, 1, 4, 2, 2, 1, 2, 2, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2 + 2, 2, 2 } ; static yyconst flex_int16_t yy_base[60] = { 0, - 0, 0, 113, 114, 110, 108, 106, 114, 114, 114, - 23, 114, 25, 27, 97, 37, 114, 114, 56, 18, - 19, 20, 26, 106, 104, 102, 114, 38, 0, 114, - 50, 51, 81, 114, 80, 35, 32, 41, 39, 0, - 79, 78, 46, 48, 52, 55, 54, 76, 61, 59, - 73, 65, 66, 70, 69, 114, 94, 97, 62 + 0, 0, 114, 115, 111, 109, 107, 115, 115, 115, + 24, 115, 26, 28, 98, 38, 115, 115, 58, 22, + 17, 19, 27, 107, 105, 103, 115, 39, 0, 115, + 51, 52, 81, 115, 79, 32, 33, 42, 38, 0, + 76, 72, 48, 49, 53, 55, 56, 71, 60, 63, + 66, 65, 68, 73, 45, 115, 98, 101, 57 } ; static yyconst flex_int16_t yy_def[60] = @@ -561,44 +561,44 @@ static yyconst flex_int16_t yy_def[60] = 19, 19, 19, 19, 19, 0, 56, 56, 56 } ; -static yyconst flex_int16_t yy_nxt[147] = +static yyconst flex_int16_t yy_nxt[149] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 16, 16, 17, 18, 4, 19, 20, - 16, 16, 16, 16, 16, 21, 16, 16, 22, 23, - 16, 16, 28, 28, 28, 28, 28, 28, 31, 29, - 36, 33, 33, 33, 32, 37, 39, 28, 28, 33, - 38, 31, 56, 34, 32, 33, 29, 31, 33, 42, - 44, 43, 33, 32, 33, 40, 34, 56, 46, 33, - 45, 33, 34, 32, 33, 33, 47, 33, 33, 35, - 49, 48, 33, 50, 33, 51, 52, 53, 33, 33, - 54, 55, 33, 33, 26, 26, 33, 26, 33, 33, - - 33, 33, 33, 41, 33, 27, 25, 24, 30, 27, - 25, 24, 56, 3, 56, 56, 56, 56, 56, 56, + 14, 15, 16, 16, 16, 17, 18, 4, 19, 16, + 16, 16, 20, 16, 16, 16, 21, 16, 16, 22, + 23, 16, 16, 28, 28, 28, 28, 28, 28, 31, + 29, 33, 36, 33, 37, 32, 33, 39, 28, 28, + 38, 33, 31, 56, 34, 32, 33, 33, 29, 31, + 40, 44, 33, 43, 42, 32, 33, 34, 56, 33, + 45, 46, 33, 33, 34, 32, 33, 33, 47, 33, + 33, 49, 35, 48, 33, 51, 50, 33, 53, 33, + 33, 52, 33, 54, 55, 33, 33, 33, 26, 26, + + 33, 26, 33, 41, 33, 33, 27, 25, 24, 30, + 27, 25, 24, 56, 3, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56 + 56, 56, 56, 56, 56, 56, 56, 56 } ; -static yyconst flex_int16_t yy_chk[147] = +static yyconst flex_int16_t yy_chk[149] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 11, 11, 13, 13, 14, 14, 16, 13, - 20, 20, 21, 22, 16, 21, 23, 28, 28, 23, - 22, 31, 32, 16, 16, 37, 13, 19, 36, 36, - 38, 37, 39, 19, 38, 59, 31, 32, 43, 43, - 39, 44, 19, 19, 32, 45, 44, 47, 46, 19, - 46, 45, 50, 47, 49, 49, 50, 52, 52, 53, - 53, 54, 55, 54, 57, 57, 51, 57, 58, 48, - - 58, 42, 41, 35, 33, 26, 25, 24, 15, 7, - 6, 5, 3, 56, 56, 56, 56, 56, 56, 56, + 1, 1, 1, 11, 11, 13, 13, 14, 14, 16, + 13, 21, 20, 22, 21, 16, 20, 23, 28, 28, + 22, 23, 31, 32, 16, 16, 36, 37, 13, 19, + 59, 38, 39, 37, 36, 19, 38, 31, 32, 55, + 39, 43, 43, 44, 19, 19, 32, 45, 44, 46, + 47, 46, 19, 45, 49, 49, 47, 50, 52, 52, + 51, 50, 53, 53, 54, 48, 42, 54, 57, 57, + + 41, 57, 58, 35, 58, 33, 26, 25, 24, 15, + 7, 6, 5, 3, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56 + 56, 56, 56, 56, 56, 56, 56, 56 } ; /* Table of booleans, true if rule could match eol. */ @@ -1182,7 +1182,7 @@ return isc::eval::EvalParser::make_TEXT(loc); case 10: YY_RULE_SETUP #line 133 "lexer.ll" -return isc::eval::EvalParser::make_BIN(loc); +return isc::eval::EvalParser::make_HEX(loc); YY_BREAK case 11: YY_RULE_SETUP diff --git a/src/lib/eval/lexer.ll b/src/lib/eval/lexer.ll index 39830c9a02..e625c388ea 100644 --- a/src/lib/eval/lexer.ll +++ b/src/lib/eval/lexer.ll @@ -130,7 +130,7 @@ blank [ \t] "==" return isc::eval::EvalParser::make_EQUAL(loc); "option" return isc::eval::EvalParser::make_OPTION(loc); "text" return isc::eval::EvalParser::make_TEXT(loc); -"bin" return isc::eval::EvalParser::make_BIN(loc); +"hex" return isc::eval::EvalParser::make_HEX(loc); "substring" return isc::eval::EvalParser::make_SUBSTRING(loc); "all" return isc::eval::EvalParser::make_ALL(loc); "." return isc::eval::EvalParser::make_DOT(loc); diff --git a/src/lib/eval/parser.cc b/src/lib/eval/parser.cc index 85325455a7..4104c73853 100644 --- a/src/lib/eval/parser.cc +++ b/src/lib/eval/parser.cc @@ -643,7 +643,7 @@ namespace isc { namespace eval { #line 134 "parser.yy" // lalr1.cc:859 { uint16_t numeric_code = convert_option_code(yystack_[3].value.as< std::string > (), yystack_[3].location, ctx); - TokenPtr opt(new TokenOption(numeric_code, TokenOption::BINARY)); + TokenPtr opt(new TokenOption(numeric_code, TokenOption::HEXADECIMAL)); ctx.expression.push_back(opt); } #line 650 "parser.cc" // lalr1.cc:859 @@ -673,7 +673,7 @@ namespace isc { namespace eval { // This may result in exception if the specified // name is unknown. TokenPtr opt(new TokenOption(yystack_[3].value.as< std::string > (), option_universe, - TokenOption::BINARY)); + TokenOption::HEXADECIMAL)); ctx.expression.push_back(opt); } catch (const isc::BadValue& ex) { @@ -1058,7 +1058,7 @@ namespace isc { namespace eval { const EvalParser::yytname_[] = { "\"end of file\"", "error", "$undefined", "\"==\"", "\"option\"", - "\"substring\"", "\"text\"", "\"bin\"", "\"all\"", "\".\"", "\",\"", + "\"substring\"", "\"text\"", "\"hex\"", "\"all\"", "\".\"", "\",\"", "\"(\"", "\")\"", "\"[\"", "\"]\"", "\"constant string\"", "\"integer\"", "\"constant hexstring\"", "\"option name\"", "TOKEN", "$accept", "expression", "bool_expr", "string_expr", "start_expr", "length_expr", YY_NULLPTR diff --git a/src/lib/eval/parser.h b/src/lib/eval/parser.h index 5e65956dcd..309daf747f 100644 --- a/src/lib/eval/parser.h +++ b/src/lib/eval/parser.h @@ -328,7 +328,7 @@ namespace isc { namespace eval { TOKEN_OPTION = 259, TOKEN_SUBSTRING = 260, TOKEN_TEXT = 261, - TOKEN_BIN = 262, + TOKEN_HEX = 262, TOKEN_ALL = 263, TOKEN_DOT = 264, TOKEN_COMA = 265, @@ -469,7 +469,7 @@ namespace isc { namespace eval { static inline symbol_type - make_BIN (const location_type& l); + make_HEX (const location_type& l); static inline symbol_type @@ -1021,9 +1021,9 @@ namespace isc { namespace eval { } EvalParser::symbol_type - EvalParser::make_BIN (const location_type& l) + EvalParser::make_HEX (const location_type& l) { - return symbol_type (token::TOKEN_BIN, l); + return symbol_type (token::TOKEN_HEX, l); } EvalParser::symbol_type diff --git a/src/lib/eval/parser.yy b/src/lib/eval/parser.yy index fca13da948..d7d69e4b9f 100644 --- a/src/lib/eval/parser.yy +++ b/src/lib/eval/parser.yy @@ -51,7 +51,7 @@ using namespace isc::eval; OPTION "option" SUBSTRING "substring" TEXT "text" - BIN "bin" + HEX "hex" ALL "all" DOT "." COMA "," @@ -130,10 +130,10 @@ string_expr : STRING TokenPtr opt(new TokenOption(numeric_code, TokenOption::TEXTUAL)); ctx.expression.push_back(opt); } - | OPTION "[" INTEGER "]" DOT BIN + | OPTION "[" INTEGER "]" DOT HEX { uint16_t numeric_code = convert_option_code($3, @3, ctx); - TokenPtr opt(new TokenOption(numeric_code, TokenOption::BINARY)); + TokenPtr opt(new TokenOption(numeric_code, TokenOption::HEXADECIMAL)); ctx.expression.push_back(opt); } | OPTION "[" OPTION_NAME "]" DOT TEXT @@ -149,13 +149,13 @@ string_expr : STRING ctx.error(@3, ex.what()); } } - | OPTION "[" OPTION_NAME "]" DOT BIN + | OPTION "[" OPTION_NAME "]" DOT HEX { try { // This may result in exception if the specified // name is unknown. TokenPtr opt(new TokenOption($3, option_universe, - TokenOption::BINARY)); + TokenOption::HEXADECIMAL)); ctx.expression.push_back(opt); } catch (const isc::BadValue& ex) { diff --git a/src/lib/eval/tests/context_unittest.cc b/src/lib/eval/tests/context_unittest.cc index 9be0a4ad2b..50c2f60917 100644 --- a/src/lib/eval/tests/context_unittest.cc +++ b/src/lib/eval/tests/context_unittest.cc @@ -227,11 +227,11 @@ TEST_F(EvalContextTest, optionWithNameAndWhitespace) { checkTokenOption(eval.expression.at(0), 12); } -// Test parsing of an option represented as binary string. -TEST_F(EvalContextTest, optionBin) { +// Test parsing of an option represented as hexadecimal string. +TEST_F(EvalContextTest, optionHex) { EvalContext eval(Option::V4); - EXPECT_NO_THROW(parsed_ = eval.parseString("option[123].bin == 0x666F6F")); + EXPECT_NO_THROW(parsed_ = eval.parseString("option[123].hex == 0x666F6F")); EXPECT_TRUE(parsed_); ASSERT_EQ(3, eval.expression.size()); checkTokenOption(eval.expression.at(0), 123); @@ -296,7 +296,7 @@ TEST_F(EvalContextTest, scanParseErrors) { checkError("option[0ab].text", ":1.9-10: syntax error, unexpected option name, " "expecting ]"); - checkError("option[ab_].bin", ":1.8: Invalid character: a"); + checkError("option[ab_].hex", ":1.8: Invalid character: a"); checkError("substring('foo',12345678901234567890,1)", ":1.17-36: Failed to convert 12345678901234567890 " "to an integer."); diff --git a/src/lib/eval/tests/evaluate_unittest.cc b/src/lib/eval/tests/evaluate_unittest.cc index ccd6e227b6..d404b12830 100644 --- a/src/lib/eval/tests/evaluate_unittest.cc +++ b/src/lib/eval/tests/evaluate_unittest.cc @@ -209,13 +209,13 @@ TEST_F(EvaluateTest, packet) { EXPECT_FALSE(result_); } -// A test which compares option value represented in binary format. +// A test which compares option value represented in hexadecimal format. TEST_F(EvaluateTest, optionHex) { TokenPtr toption; TokenPtr tstring; TokenPtr tequal; - ASSERT_NO_THROW(toption.reset(new TokenOption(100, TokenOption::BINARY))); + ASSERT_NO_THROW(toption.reset(new TokenOption(100, TokenOption::HEXADECIMAL))); e_.push_back(toption); ASSERT_NO_THROW(tstring.reset(new TokenString("hundred4"))); e_.push_back(tstring); diff --git a/src/lib/eval/tests/token_unittest.cc b/src/lib/eval/tests/token_unittest.cc index 3194933f5b..39ca7f3889 100644 --- a/src/lib/eval/tests/token_unittest.cc +++ b/src/lib/eval/tests/token_unittest.cc @@ -325,14 +325,14 @@ TEST_F(TokenTest, optionWithNameString4) { // This test checks if a token representing option value is able to extract // the option from an IPv4 packet and properly store its value in a -// binary format. -TEST_F(TokenTest, optionBinString4) { +// hexadecimal format. +TEST_F(TokenTest, optionHexString4) { TokenPtr found; TokenPtr not_found; // The packets we use have option 100 with a string in them. - ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::BINARY))); - ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::BINARY))); + ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::HEXADECIMAL))); + ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::HEXADECIMAL))); // This should evaluate to the content of the option 100 (i.e. "hundred4") ASSERT_NO_THROW(found->evaluate(*pkt4_, values_)); @@ -354,8 +354,8 @@ TEST_F(TokenTest, optionBinString4) { // This test checks if a token representing an option identified by name is // able to extract this option from an IPv4 packet and properly store its -// value in the binary format. -TEST_F(TokenTest, optionWithNameBinString4) { +// value in the hexadecimal format. +TEST_F(TokenTest, optionWithNameHexString4) { // Create definition of option 100 to provide a mapping between option // code and option name. ASSERT_NO_THROW(createOptionDefinitions4()); @@ -364,7 +364,7 @@ TEST_F(TokenTest, optionWithNameBinString4) { // map the option name to its code. TokenPtr token; ASSERT_NO_THROW(token.reset(new TokenOption("name-hundred4", Option::V4, - TokenOption::BINARY))); + TokenOption::HEXADECIMAL))); // Evaluate option in the packet. ASSERT_NO_THROW(token->evaluate(*pkt4_, values_)); @@ -426,15 +426,15 @@ TEST_F(TokenTest, optionWithNameString6) { // This test checks if a token representing an option value is able to extract -// the option from an IPv6 packet and properly store its value in binary +// the option from an IPv6 packet and properly store its value in hexadecimal // format. -TEST_F(TokenTest, optionBinString6) { +TEST_F(TokenTest, optionHexString6) { TokenPtr found; TokenPtr not_found; // The packets we use have option 100 with a string in them. - ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::BINARY))); - ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::BINARY))); + ASSERT_NO_THROW(found.reset(new TokenOption(100, TokenOption::HEXADECIMAL))); + ASSERT_NO_THROW(not_found.reset(new TokenOption(101, TokenOption::HEXADECIMAL))); // This should evaluate to the content of the option 100 (i.e. "hundred6") ASSERT_NO_THROW(found->evaluate(*pkt6_, values_)); @@ -456,8 +456,8 @@ TEST_F(TokenTest, optionBinString6) { // This test checks if a token representing an option identified by name is // able to extract this option from an IPv6 packet and properly store its -// value in the binary format. -TEST_F(TokenTest, optionWithNameBinString6) { +// value in the hexadecimal format. +TEST_F(TokenTest, optionWithNameHexString6) { // Create definition of option 100 to provide a mapping between option // code and option name. ASSERT_NO_THROW(createOptionDefinitions6()); @@ -466,7 +466,7 @@ TEST_F(TokenTest, optionWithNameBinString6) { // map the option name to its code. TokenPtr token; ASSERT_NO_THROW(token.reset(new TokenOption("name-hundred6", Option::V6, - TokenOption::BINARY))); + TokenOption::HEXADECIMAL))); // Evaluate option in the packet. ASSERT_NO_THROW(token->evaluate(*pkt6_, values_)); diff --git a/src/lib/eval/token.h b/src/lib/eval/token.h index 870b88b666..c379ee6e9d 100644 --- a/src/lib/eval/token.h +++ b/src/lib/eval/token.h @@ -153,13 +153,13 @@ public: /// @brief Token representation type. /// /// There are many possible ways in which option can be presented. - /// Currently the textual and binary representations are + /// Currently the textual and hexadecimal representations are /// supported. The type of representation is specified in the /// constructor and it affects the value generated by the /// @c TokenOption::evaluate function. enum RepresentationType { TEXTUAL, - BINARY + HEXADECIMAL }; /// @brief Constructor that takes an option code as a parameter