diff --git a/src/parsers/PIXCfgLexer.cpp b/src/parsers/PIXCfgLexer.cpp index 9f271158b..4cd390c60 100644 --- a/src/parsers/PIXCfgLexer.cpp +++ b/src/parsers/PIXCfgLexer.cpp @@ -48,58 +48,79 @@ void PIXCfgLexer::initLiterals() { literals["name"] = 9; literals["names"] = 8; + literals["ospf"] = 61; literals["established"] = 45; - literals["nameif"] = 52; + literals["mac-address"] = 59; + literals["nameif"] = 66; literals["subnet"] = 18; literals["controller"] = 48; literals["object"] = 12; - literals["remark"] = 59; + literals["pcp"] = 87; + literals["remark"] = 73; literals["access-list"] = 35; literals["hostname"] = 33; + literals["hold-time"] = 56; literals["community-list"] = 7; literals["permit"] = 36; - literals["security-level"] = 51; + literals["security-level"] = 65; literals["source"] = 25; - literals["quit"] = 6; + literals["igrp"] = 84; + literals["pim"] = 62; + literals["ahp"] = 80; + literals["nos"] = 86; + literals["ipinip"] = 85; + literals["quit"] = 5; literals["crypto"] = 27; literals["PIX"] = 29; - literals["exit"] = 61; - literals["object-group"] = 68; + literals["exit"] = 75; literals["nat"] = 14; + literals["object-group"] = 90; literals["range"] = 17; + literals["gre"] = 83; literals["gt"] = 39; literals["host"] = 16; - literals["secondary"] = 64; + literals["secondary"] = 78; literals["interface"] = 49; - literals["standard"] = 67; + literals["rip"] = 64; + literals["standard"] = 89; literals["network"] = 13; - literals["vlan"] = 50; - literals["access"] = 58; literals["service"] = 19; + literals["vlan"] = 50; + literals["access"] = 72; + literals["multicast"] = 60; literals["any"] = 42; - literals["dhcp"] = 55; + literals["dhcp"] = 69; + literals["speed"] = 51; literals["deny"] = 37; literals["neq"] = 41; - literals["address"] = 54; - literals["shutdown"] = 53; + literals["address"] = 68; + literals["esp"] = 82; + literals["shutdown"] = 67; + literals["delay"] = 55; literals["certificate"] = 28; literals["udp"] = 24; literals["fragments"] = 46; literals["eq"] = 38; literals["destination"] = 26; - literals["setroute"] = 65; - literals["ip"] = 5; + literals["duplex"] = 52; + literals["setroute"] = 79; + literals["ip"] = 6; + literals["eigrp"] = 81; literals["log-input"] = 44; - literals["switchport"] = 57; + literals["switchport"] = 71; literals["description"] = 15; - literals["extended"] = 66; - literals["access-group"] = 60; + literals["extended"] = 88; + literals["igmp"] = 57; + literals["access-group"] = 74; + literals["ddns"] = 53; literals["Version"] = 31; literals["log"] = 43; + literals["forward"] = 54; literals["ASA"] = 30; literals["lt"] = 40; + literals["ipv6"] = 58; literals["time-range"] = 47; - literals["standby"] = 56; + literals["standby"] = 70; literals["icmp"] = 20; literals["tcp"] = 23; } @@ -418,11 +439,11 @@ void PIXCfgLexer::mLINE_COMMENT(bool _createToken) { } } else { - goto _loop128; + goto _loop130; } } - _loop128:; + _loop130:; } // ( ... )* mNEWLINE(false); if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { @@ -454,9 +475,9 @@ void PIXCfgLexer::mNEWLINE(bool _createToken) { } if ( inputState->guessing==0 ) { -#line 1069 "pix.g" +#line 1129 "pix.g" newline(); -#line 460 "PIXCfgLexer.cpp" +#line 481 "PIXCfgLexer.cpp" } if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { _token = makeToken(_ttype); @@ -480,11 +501,11 @@ void PIXCfgLexer::mCOLON_COMMENT(bool _createToken) { } } else { - goto _loop132; + goto _loop134; } } - _loop132:; + _loop134:; } // ( ... )* mNEWLINE(false); if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { @@ -578,9 +599,9 @@ void PIXCfgLexer::mWhitespace(bool _createToken) { } } if ( inputState->guessing==0 ) { -#line 1064 "pix.g" +#line 1124 "pix.g" _ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP; -#line 584 "PIXCfgLexer.cpp" +#line 605 "PIXCfgLexer.cpp" } if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { _token = makeToken(_ttype); @@ -692,29 +713,14 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex; { - bool synPredMatched151 = false; + bool synPredMatched153 = false; if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_2.member(LA(2))) && (_tokenSet_2.member(LA(3))) && (_tokenSet_2.member(LA(4))) && (_tokenSet_2.member(LA(5))) && (_tokenSet_2.member(LA(6))) && (_tokenSet_2.member(LA(7))) && (true) && (true) && (true))) { - int _m151 = mark(); - synPredMatched151 = true; + int _m153 = mark(); + synPredMatched153 = true; inputState->guessing++; try { { { // ( ... )+ - int _cnt146=0; - for (;;) { - if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { - mDIGIT(false); - } - else { - if ( _cnt146>=1 ) { goto _loop146; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt146++; - } - _loop146:; - } // ( ... )+ - mDOT(false); - { // ( ... )+ int _cnt148=0; for (;;) { if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { @@ -743,32 +749,32 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { } _loop150:; } // ( ... )+ + mDOT(false); + { // ( ... )+ + int _cnt152=0; + for (;;) { + if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { + mDIGIT(false); + } + else { + if ( _cnt152>=1 ) { goto _loop152; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} + } + + _cnt152++; + } + _loop152:; + } // ( ... )+ } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) { - synPredMatched151 = false; + synPredMatched153 = false; } - rewind(_m151); + rewind(_m153); inputState->guessing--; } - if ( synPredMatched151 ) { + if ( synPredMatched153 ) { { { // ( ... )+ - int _cnt154=0; - for (;;) { - if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { - mDIGIT(false); - } - else { - if ( _cnt154>=1 ) { goto _loop154; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt154++; - } - _loop154:; - } // ( ... )+ - mDOT(false); - { // ( ... )+ int _cnt156=0; for (;;) { if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { @@ -812,37 +818,37 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { } _loop160:; } // ( ... )+ + mDOT(false); + { // ( ... )+ + int _cnt162=0; + for (;;) { + if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { + mDIGIT(false); + } + else { + if ( _cnt162>=1 ) { goto _loop162; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} + } + + _cnt162++; + } + _loop162:; + } // ( ... )+ } if ( inputState->guessing==0 ) { -#line 1089 "pix.g" +#line 1149 "pix.g" _ttype = IPV4; -#line 820 "PIXCfgLexer.cpp" +#line 841 "PIXCfgLexer.cpp" } } else { - bool synPredMatched166 = false; + bool synPredMatched168 = false; if ((((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (_tokenSet_2.member(LA(2))) && (_tokenSet_2.member(LA(3))) && (true) && (true) && (true) && (true) && (true) && (true) && (true))) { - int _m166 = mark(); - synPredMatched166 = true; + int _m168 = mark(); + synPredMatched168 = true; inputState->guessing++; try { { { // ( ... )+ - int _cnt163=0; - for (;;) { - if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { - mDIGIT(false); - } - else { - if ( _cnt163>=1 ) { goto _loop163; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt163++; - } - _loop163:; - } // ( ... )+ - mDOT(false); - { // ( ... )+ int _cnt165=0; for (;;) { if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { @@ -856,32 +862,32 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { } _loop165:; } // ( ... )+ + mDOT(false); + { // ( ... )+ + int _cnt167=0; + for (;;) { + if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { + mDIGIT(false); + } + else { + if ( _cnt167>=1 ) { goto _loop167; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} + } + + _cnt167++; + } + _loop167:; + } // ( ... )+ } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) { - synPredMatched166 = false; + synPredMatched168 = false; } - rewind(_m166); + rewind(_m168); inputState->guessing--; } - if ( synPredMatched166 ) { + if ( synPredMatched168 ) { { { // ( ... )+ - int _cnt169=0; - for (;;) { - if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { - mDIGIT(false); - } - else { - if ( _cnt169>=1 ) { goto _loop169; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt169++; - } - _loop169:; - } // ( ... )+ - mDOT(false); - { // ( ... )+ int _cnt171=0; for (;;) { if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { @@ -895,34 +901,7 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { } _loop171:; } // ( ... )+ - } - } - else if ((LA(1) == 0x30 /* '0' */ ) && (LA(2) == 0x78 /* 'x' */ )) { - { - match('0' /* charlit */ ); - match('x' /* charlit */ ); - { // ( ... )+ - int _cnt176=0; - for (;;) { - if ((_tokenSet_3.member(LA(1)))) { - mHEXDIGIT(false); - } - else { - if ( _cnt176>=1 ) { goto _loop176; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} - } - - _cnt176++; - } - _loop176:; - } // ( ... )+ - } - if ( inputState->guessing==0 ) { -#line 1095 "pix.g" - _ttype = HEX_CONST; -#line 923 "PIXCfgLexer.cpp" - } - } - else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true)) { + mDOT(false); { // ( ... )+ int _cnt173=0; for (;;) { @@ -937,12 +916,54 @@ void PIXCfgLexer::mNUMBER(bool _createToken) { } _loop173:; } // ( ... )+ + } + } + else if ((LA(1) == 0x30 /* '0' */ ) && (LA(2) == 0x78 /* 'x' */ )) { + { + match('0' /* charlit */ ); + match('x' /* charlit */ ); + { // ( ... )+ + int _cnt178=0; + for (;;) { + if ((_tokenSet_3.member(LA(1)))) { + mHEXDIGIT(false); + } + else { + if ( _cnt178>=1 ) { goto _loop178; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} + } + + _cnt178++; + } + _loop178:; + } // ( ... )+ + } if ( inputState->guessing==0 ) { -#line 1093 "pix.g" - _ttype = INT_CONST; +#line 1155 "pix.g" + _ttype = HEX_CONST; #line 944 "PIXCfgLexer.cpp" } } + else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true)) { + { // ( ... )+ + int _cnt175=0; + for (;;) { + if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) { + mDIGIT(false); + } + else { + if ( _cnt175>=1 ) { goto _loop175; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} + } + + _cnt175++; + } + _loop175:; + } // ( ... )+ + if ( inputState->guessing==0 ) { +#line 1153 "pix.g" + _ttype = INT_CONST; +#line 965 "PIXCfgLexer.cpp" + } + } else { throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn()); } @@ -1201,11 +1222,11 @@ void PIXCfgLexer::mWORD(bool _createToken) { } default: { - goto _loop180; + goto _loop182; } } } - _loop180:; + _loop182:; } // ( ... )* if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { _token = makeToken(_ttype); @@ -1227,11 +1248,11 @@ void PIXCfgLexer::mSTRING(bool _createToken) { matchNot('\"' /* charlit */ ); } else { - goto _loop183; + goto _loop185; } } - _loop183:; + _loop185:; } // ( ... )* match('\"' /* charlit */ ); if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) { @@ -1601,7 +1622,8 @@ const unsigned long PIXCfgLexer::_tokenSet_1_data_[] = { 4294958072UL, 429496729 // 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xb 0xc 0xe 0xf 0x10 0x11 0x12 0x13 0x14 // 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f ! \" # $ % // & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G -// H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d +// H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d e f g h +// i j k l m n o p q r s t u v w x y z const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_1(_tokenSet_1_data_,16); const unsigned long PIXCfgLexer::_tokenSet_2_data_[] = { 0UL, 67059712UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL, 0UL }; // . 0 1 2 3 4 5 6 7 8 9 @@ -1613,6 +1635,7 @@ const unsigned long PIXCfgLexer::_tokenSet_4_data_[] = { 4294967288UL, 429496729 // 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11 0x12 0x13 // 0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x1e 0x1f ! # $ // % & \' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F -// G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d +// G H I J K L M N O P Q R S T U V W X Y Z [ 0x5c ] ^ _ ` a b c d e f g +// h i j k l m n o p q r s t u v w x y z const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_4(_tokenSet_4_data_,16); diff --git a/src/parsers/PIXCfgParser.cpp b/src/parsers/PIXCfgParser.cpp index db065b2ae..8b83c808c 100644 --- a/src/parsers/PIXCfgParser.cpp +++ b/src/parsers/PIXCfgParser.cpp @@ -27,7 +27,7 @@ PIXCfgParser::PIXCfgParser(ANTLR_USE_NAMESPACE(antlr)TokenBuffer& tokenBuf, int } PIXCfgParser::PIXCfgParser(ANTLR_USE_NAMESPACE(antlr)TokenBuffer& tokenBuf) -: ANTLR_USE_NAMESPACE(antlr)LLkParser(tokenBuf,2) +: ANTLR_USE_NAMESPACE(antlr)LLkParser(tokenBuf,3) { } @@ -37,16 +37,17 @@ PIXCfgParser::PIXCfgParser(ANTLR_USE_NAMESPACE(antlr)TokenStream& lexer, int k) } PIXCfgParser::PIXCfgParser(ANTLR_USE_NAMESPACE(antlr)TokenStream& lexer) -: ANTLR_USE_NAMESPACE(antlr)LLkParser(lexer,2) +: ANTLR_USE_NAMESPACE(antlr)LLkParser(lexer,3) { } PIXCfgParser::PIXCfgParser(const ANTLR_USE_NAMESPACE(antlr)ParserSharedInputState& state) -: ANTLR_USE_NAMESPACE(antlr)LLkParser(state,2) +: ANTLR_USE_NAMESPACE(antlr)LLkParser(state,3) { } void PIXCfgParser::cfgfile() { + Tracer traceInOut(this, "cfgfile"); try { // for error handling { // ( ... )+ @@ -70,41 +71,11 @@ void PIXCfgParser::cfgfile() { hostname(); break; } - case IP: - { - ip_commands(); - break; - } case INTRFACE: { intrface(); break; } - case VLAN: - { - vlan_interface(); - break; - } - case SWITCHPORT: - { - switchport(); - break; - } - case SHUTDOWN: - { - shutdown(); - break; - } - case SEC_LEVEL: - { - sec_level(); - break; - } - case NAMEIF: - { - nameif(); - break; - } case CONTROLLER: { controller(); @@ -156,7 +127,16 @@ void PIXCfgParser::cfgfile() { break; } default: - if ((LA(1) == OBJECT) && (LA(2) == NETWORK)) { + if ((LA(1) == IP) && (LA(2) == ACCESS_LIST)) { + ip_access_list_ext(); + } + else if ((LA(1) == IP) && (LA(2) == COMMUNITY_LIST)) { + community_list_command(); + } + else if ((LA(1) == IP) && (LA(2) == WORD)) { + unknown_ip_command(); + } + else if ((LA(1) == OBJECT) && (LA(2) == NETWORK)) { named_object_network(); } else if ((LA(1) == OBJECT) && (LA(2) == SERVICE)) { @@ -182,6 +162,7 @@ void PIXCfgParser::cfgfile() { } void PIXCfgParser::comment() { + Tracer traceInOut(this, "comment"); try { // for error handling { @@ -214,6 +195,7 @@ void PIXCfgParser::comment() { } void PIXCfgParser::version() { + Tracer traceInOut(this, "version"); try { // for error handling { @@ -237,14 +219,14 @@ void PIXCfgParser::version() { match(VERSION_WORD); match(NUMBER); if ( inputState->guessing==0 ) { -#line 374 "pix.g" +#line 376 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->setDiscoveredVersion(LT(0)->getText()); *dbg << "VERSION " << LT(0)->getText() << std::endl; consumeUntil(NEWLINE); -#line 248 "PIXCfgParser.cpp" +#line 230 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -258,6 +240,7 @@ void PIXCfgParser::version() { } void PIXCfgParser::hostname() { + Tracer traceInOut(this, "hostname"); try { // for error handling match(HOSTNAME); @@ -280,7 +263,7 @@ void PIXCfgParser::hostname() { } } if ( inputState->guessing==0 ) { -#line 384 "pix.g" +#line 386 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->setHostName( LT(0)->getText() ); @@ -288,573 +271,7 @@ void PIXCfgParser::hostname() { << "LT0=" << LT(0)->getText() << std::endl; -#line 292 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::ip_commands() { - - try { // for error handling - match(IP); - { - switch ( LA(1)) { - case ACCESS_LIST: - { - ip_access_list_ext(); - break; - } - case COMMUNITY_LIST: - { - community_list_command(); - break; - } - case WORD: - { - unknown_command(); - break; - } - default: - { - throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); - } - } - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::intrface() { - ANTLR_USE_NAMESPACE(antlr)RefToken in = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(INTRFACE); - in = LT(1); - match(WORD); - if ( inputState->guessing==0 ) { -#line 702 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->newInterface( in->getText() ); - *dbg << in->getLine() << ":" - << " INTRFACE: " << in->getText() << std::endl; - consumeUntil(NEWLINE); - -#line 359 "PIXCfgParser.cpp" - } - { // ( ... )+ - int _cnt98=0; - for (;;) { - if ((LA(1) == NEWLINE) && (_tokenSet_2.member(LA(2)))) { - interface_parameters(); - } - else { - if ( _cnt98>=1 ) { goto _loop98; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} - } - - _cnt98++; - } - _loop98:; - } // ( ... )+ - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::vlan_interface() { - ANTLR_USE_NAMESPACE(antlr)RefToken vlan_id = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(VLAN); - vlan_id = LT(1); - match(INT_CONST); - if ( inputState->guessing==0 ) { -#line 737 "pix.g" - - importer->setInterfaceVlanId(vlan_id->getText()); - *dbg << " VLAN: " << vlan_id->getText() << std::endl; - -#line 399 "PIXCfgParser.cpp" - } - match(NEWLINE); - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_3); - } else { - throw; - } - } -} - -void PIXCfgParser::switchport() { - ANTLR_USE_NAMESPACE(antlr)RefToken vlan_num = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(SWITCHPORT); - match(ACCESS); - match(VLAN); - vlan_num = LT(1); - match(INT_CONST); - if ( inputState->guessing==0 ) { -#line 882 "pix.g" - - importer->addMessageToLog("Switch port vlan " + vlan_num->getText()); - *dbg << "Switch port vlan " << vlan_num->getText() << std::endl; - -#line 428 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_3); - } else { - throw; - } - } -} - -void PIXCfgParser::shutdown() { - - try { // for error handling - match(SHUTDOWN); - if ( inputState->guessing==0 ) { -#line 780 "pix.g" - - importer->ignoreCurrentInterface(); - *dbg<< LT(1)->getLine() << ":" - << " INTERFACE SHUTDOWN " << std::endl; - -#line 452 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_3); - } else { - throw; - } - } -} - -void PIXCfgParser::sec_level() { - ANTLR_USE_NAMESPACE(antlr)RefToken sec_level = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(SEC_LEVEL); - sec_level = LT(1); - match(INT_CONST); - if ( inputState->guessing==0 ) { -#line 745 "pix.g" - - importer->setInterfaceSecurityLevel(sec_level->getText()); - *dbg << "SEC_LEVEL: " << sec_level->getText() << std::endl; - -#line 478 "PIXCfgParser.cpp" - } - match(NEWLINE); - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_3); - } else { - throw; - } - } -} - -void PIXCfgParser::nameif() { - ANTLR_USE_NAMESPACE(antlr)RefToken phys_intf = ANTLR_USE_NAMESPACE(antlr)nullToken; - ANTLR_USE_NAMESPACE(antlr)RefToken intf_label = ANTLR_USE_NAMESPACE(antlr)nullToken; - ANTLR_USE_NAMESPACE(antlr)RefToken sec_level = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(NAMEIF); - phys_intf = LT(1); - match(WORD); - { - switch ( LA(1)) { - case NEWLINE: - { - match(NEWLINE); - break; - } - case WORD: - { - intf_label = LT(1); - match(WORD); - sec_level = LT(1); - match(WORD); - match(NEWLINE); - break; - } - default: - { - throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); - } - } - } - if ( inputState->guessing==0 ) { -#line 753 "pix.g" - - std::string label = (intf_label) ? intf_label->getText() : ""; - std::string seclevel = (sec_level) ? sec_level->getText() : ""; - importer->setInterfaceParametes(phys_intf->getText(), label, seclevel); - *dbg << " NAMEIF: " - << phys_intf->getText() << label << seclevel << std::endl; - -#line 532 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_3); - } else { - throw; - } - } -} - -void PIXCfgParser::controller() { - - try { // for error handling - match(CONTROLLER); - if ( inputState->guessing==0 ) { -#line 656 "pix.g" - - importer->clearCurrentInterface(); - consumeUntil(NEWLINE); - -#line 555 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::access_list_commands() { - ANTLR_USE_NAMESPACE(antlr)RefToken acl_num = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(ACCESS_LIST); - acl_num = LT(1); - match(INT_CONST); - if ( inputState->guessing==0 ) { -#line 400 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->clear(); - importer->newUnidirRuleSet( std::string("acl_") + acl_num->getText(), - libfwbuilder::Policy::TYPENAME ); - *dbg << acl_num->getLine() << ":" - << " ACL #" << acl_num->getText() << " "; - -#line 585 "PIXCfgParser.cpp" - } - { - switch ( LA(1)) { - case PERMIT: - { - permit_ext(); - break; - } - case DENY: - { - deny_ext(); - break; - } - case REMARK: - { - remark(); - break; - } - default: - { - throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); - } - } - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::exit() { - - try { // for error handling - match(EXIT); - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::certificate() { - - try { // for error handling - match(CERTIFICATE); - match(WORD); - if ( inputState->guessing==0 ) { -#line 366 "pix.g" - - consumeUntil(NEWLINE); - consumeUntil(QUIT); - -#line 647 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::quit() { - - try { // for error handling - match(QUIT); - if ( inputState->guessing==0 ) { -#line 137 "pix.g" - - consumeUntil(NEWLINE); - -#line 669 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::names_section() { - - try { // for error handling - match(NAMES); - if ( inputState->guessing==0 ) { -#line 151 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->addMessageToLog( - "Parser warning: \"names\" section detected. " - "Import of configuration that uses \"names\" " - "is not supported at this time"); - -#line 695 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::name_entry() { - ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; - ANTLR_USE_NAMESPACE(antlr)RefToken n = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(NAME); - a = LT(1); - match(IPV4); - n = LT(1); - match(WORD); - if ( inputState->guessing==0 ) { -#line 161 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->addMessageToLog( - "Name " + a->getText() + " " + n->getText()); - *dbg << "Name " << a->getText() << " " << n->getText() << std::endl; - -#line 726 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::named_object_network() { - ANTLR_USE_NAMESPACE(antlr)RefToken name = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(OBJECT); - match(NETWORK); - name = LT(1); - match(WORD); - if ( inputState->guessing==0 ) { -#line 172 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->clear(); - importer->newNamedObjectAddress(name->getText()); - *dbg << name->getLine() << ":" - << " Named Object " << name->getText() << std::endl; - -#line 756 "PIXCfgParser.cpp" - } - { // ( ... )+ - int _cnt12=0; - for (;;) { - if ((LA(1) == NEWLINE) && ((LA(2) >= NAT && LA(2) <= SUBNET))) { - named_object_network_parameters(); - } - else { - if ( _cnt12>=1 ) { goto _loop12; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} - } - - _cnt12++; - } - _loop12:; - } // ( ... )+ - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::named_object_service() { - ANTLR_USE_NAMESPACE(antlr)RefToken name = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(OBJECT); - match(SERVICE); - name = LT(1); - match(WORD); - if ( inputState->guessing==0 ) { -#line 256 "pix.g" - - importer->setCurrentLineNumber(LT(0)->getLine()); - importer->clear(); - importer->newNamedObjectService(name->getText()); - *dbg << name->getLine() << ":" - << " Named Object " << name->getText() << std::endl; - -#line 800 "PIXCfgParser.cpp" - } - { // ( ... )+ - int _cnt25=0; - for (;;) { - if ((LA(1) == NEWLINE) && (LA(2) == DESCRIPTION || LA(2) == SERVICE)) { - named_object_service_parameters(); - } - else { - if ( _cnt25>=1 ) { goto _loop25; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} - } - - _cnt25++; - } - _loop25:; - } // ( ... )+ - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::crypto() { - - try { // for error handling - match(CRYPTO); - if ( inputState->guessing==0 ) { -#line 352 "pix.g" - - consumeUntil(NEWLINE); - -#line 836 "PIXCfgParser.cpp" - } - } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_1); - } else { - throw; - } - } -} - -void PIXCfgParser::unknown_command() { - - try { // for error handling - match(WORD); - if ( inputState->guessing==0 ) { -#line 359 "pix.g" - - consumeUntil(NEWLINE); - -#line 858 "PIXCfgParser.cpp" +#line 275 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -868,14 +285,16 @@ void PIXCfgParser::unknown_command() { } void PIXCfgParser::ip_access_list_ext() { + Tracer traceInOut(this, "ip_access_list_ext"); ANTLR_USE_NAMESPACE(antlr)RefToken name = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling + match(IP); match(ACCESS_LIST); name = LT(1); match(WORD); if ( inputState->guessing==0 ) { -#line 420 "pix.g" +#line 422 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->clear(); @@ -884,7 +303,7 @@ void PIXCfgParser::ip_access_list_ext() { *dbg << name->getLine() << ":" << " ACL ext " << name->getText() << std::endl; -#line 888 "PIXCfgParser.cpp" +#line 307 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -921,12 +340,12 @@ void PIXCfgParser::ip_access_list_ext() { } } if ( inputState->guessing==0 ) { -#line 439 "pix.g" +#line 441 "pix.g" *dbg << LT(0)->getLine() << ":" << " ACL line end" << std::endl << std::endl; -#line 930 "PIXCfgParser.cpp" +#line 349 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -940,15 +359,422 @@ void PIXCfgParser::ip_access_list_ext() { } void PIXCfgParser::community_list_command() { + Tracer traceInOut(this, "community_list_command"); try { // for error handling + match(IP); match(COMMUNITY_LIST); if ( inputState->guessing==0 ) { -#line 144 "pix.g" +#line 138 "pix.g" consumeUntil(NEWLINE); -#line 952 "PIXCfgParser.cpp" +#line 373 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::unknown_ip_command() { + Tracer traceInOut(this, "unknown_ip_command"); + + try { // for error handling + match(IP); + match(WORD); + if ( inputState->guessing==0 ) { +#line 354 "pix.g" + + consumeUntil(NEWLINE); + +#line 397 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::intrface() { + Tracer traceInOut(this, "intrface"); + ANTLR_USE_NAMESPACE(antlr)RefToken in = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(INTRFACE); + in = LT(1); + match(WORD); + if ( inputState->guessing==0 ) { +#line 704 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->newInterface( in->getText() ); + *dbg << in->getLine() << ":" + << " INTRFACE: " << in->getText() << std::endl; + consumeUntil(NEWLINE); + +#line 427 "PIXCfgParser.cpp" + } + { // ( ... )+ + int _cnt98=0; + for (;;) { + if ((LA(1) == NEWLINE) && (_tokenSet_2.member(LA(2))) && (_tokenSet_3.member(LA(3)))) { + interface_parameters(); + } + else { + if ( _cnt98>=1 ) { goto _loop98; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} + } + + _cnt98++; + } + _loop98:; + } // ( ... )+ + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::controller() { + Tracer traceInOut(this, "controller"); + + try { // for error handling + match(CONTROLLER); + if ( inputState->guessing==0 ) { +#line 658 "pix.g" + + importer->clearCurrentInterface(); + consumeUntil(NEWLINE); + +#line 465 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::access_list_commands() { + Tracer traceInOut(this, "access_list_commands"); + ANTLR_USE_NAMESPACE(antlr)RefToken acl_num = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(ACCESS_LIST); + acl_num = LT(1); + match(INT_CONST); + if ( inputState->guessing==0 ) { +#line 402 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->clear(); + importer->newUnidirRuleSet( std::string("acl_") + acl_num->getText(), + libfwbuilder::Policy::TYPENAME ); + *dbg << acl_num->getLine() << ":" + << " ACL #" << acl_num->getText() << " "; + +#line 496 "PIXCfgParser.cpp" + } + { + switch ( LA(1)) { + case PERMIT: + { + permit_ext(); + break; + } + case DENY: + { + deny_ext(); + break; + } + case REMARK: + { + remark(); + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + } + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::exit() { + Tracer traceInOut(this, "exit"); + + try { // for error handling + match(EXIT); + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::certificate() { + Tracer traceInOut(this, "certificate"); + + try { // for error handling + match(CERTIFICATE); + match(WORD); + if ( inputState->guessing==0 ) { +#line 368 "pix.g" + + consumeUntil(NEWLINE); + consumeUntil(QUIT); + +#line 560 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::quit() { + Tracer traceInOut(this, "quit"); + + try { // for error handling + match(QUIT); + if ( inputState->guessing==0 ) { +#line 131 "pix.g" + + consumeUntil(NEWLINE); + +#line 583 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::names_section() { + Tracer traceInOut(this, "names_section"); + + try { // for error handling + match(NAMES); + if ( inputState->guessing==0 ) { +#line 145 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->addMessageToLog( + "Parser warning: \"names\" section detected. " + "Import of configuration that uses \"names\" " + "is not supported at this time"); + +#line 610 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::name_entry() { + Tracer traceInOut(this, "name_entry"); + ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; + ANTLR_USE_NAMESPACE(antlr)RefToken n = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(NAME); + a = LT(1); + match(IPV4); + n = LT(1); + match(WORD); + if ( inputState->guessing==0 ) { +#line 155 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->addMessageToLog( + "Name " + a->getText() + " " + n->getText()); + *dbg << "Name " << a->getText() << " " << n->getText() << std::endl; + +#line 642 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::named_object_network() { + Tracer traceInOut(this, "named_object_network"); + ANTLR_USE_NAMESPACE(antlr)RefToken name = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(OBJECT); + match(NETWORK); + name = LT(1); + match(WORD); + if ( inputState->guessing==0 ) { +#line 166 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->clear(); + importer->newNamedObjectAddress(name->getText()); + *dbg << name->getLine() << ":" + << " Named Object " << name->getText() << std::endl; + +#line 673 "PIXCfgParser.cpp" + } + { // ( ... )+ + int _cnt10=0; + for (;;) { + if ((LA(1) == NEWLINE) && ((LA(2) >= NAT && LA(2) <= SUBNET))) { + named_object_network_parameters(); + } + else { + if ( _cnt10>=1 ) { goto _loop10; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} + } + + _cnt10++; + } + _loop10:; + } // ( ... )+ + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::named_object_service() { + Tracer traceInOut(this, "named_object_service"); + ANTLR_USE_NAMESPACE(antlr)RefToken name = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(OBJECT); + match(SERVICE); + name = LT(1); + match(WORD); + if ( inputState->guessing==0 ) { +#line 250 "pix.g" + + importer->setCurrentLineNumber(LT(0)->getLine()); + importer->clear(); + importer->newNamedObjectService(name->getText()); + *dbg << name->getLine() << ":" + << " Named Object " << name->getText() << std::endl; + +#line 718 "PIXCfgParser.cpp" + } + { // ( ... )+ + int _cnt23=0; + for (;;) { + if ((LA(1) == NEWLINE) && (LA(2) == DESCRIPTION || LA(2) == SERVICE) && (_tokenSet_4.member(LA(3)))) { + named_object_service_parameters(); + } + else { + if ( _cnt23>=1 ) { goto _loop23; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} + } + + _cnt23++; + } + _loop23:; + } // ( ... )+ + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::crypto() { + Tracer traceInOut(this, "crypto"); + + try { // for error handling + match(CRYPTO); + if ( inputState->guessing==0 ) { +#line 347 "pix.g" + + consumeUntil(NEWLINE); + +#line 755 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::unknown_command() { + Tracer traceInOut(this, "unknown_command"); + + try { // for error handling + match(WORD); + if ( inputState->guessing==0 ) { +#line 361 "pix.g" + + consumeUntil(NEWLINE); + +#line 778 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -962,6 +788,7 @@ void PIXCfgParser::community_list_command() { } void PIXCfgParser::named_object_network_parameters() { + Tracer traceInOut(this, "named_object_network_parameters"); try { // for error handling match(NEWLINE); @@ -1010,11 +837,12 @@ void PIXCfgParser::named_object_network_parameters() { } void PIXCfgParser::named_object_nat() { + Tracer traceInOut(this, "named_object_nat"); try { // for error handling match(NAT); if ( inputState->guessing==0 ) { -#line 200 "pix.g" +#line 194 "pix.g" importer->addMessageToLog( "Parser warning: " @@ -1022,7 +850,7 @@ void PIXCfgParser::named_object_nat() { "is not supported at this time"); consumeUntil(NEWLINE); -#line 1026 "PIXCfgParser.cpp" +#line 854 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1036,11 +864,12 @@ void PIXCfgParser::named_object_nat() { } void PIXCfgParser::named_object_description() { + Tracer traceInOut(this, "named_object_description"); try { // for error handling match(DESCRIPTION); if ( inputState->guessing==0 ) { -#line 210 "pix.g" +#line 204 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); *dbg << LT(1)->getLine() << ":"; @@ -1053,7 +882,7 @@ void PIXCfgParser::named_object_description() { importer->setNamedObjectDescription(descr); *dbg << " DESCRIPTION " << descr << std::endl; -#line 1057 "PIXCfgParser.cpp" +#line 886 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1067,6 +896,7 @@ void PIXCfgParser::named_object_description() { } void PIXCfgParser::host_addr() { + Tracer traceInOut(this, "host_addr"); ANTLR_USE_NAMESPACE(antlr)RefToken h = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling @@ -1076,7 +906,7 @@ void PIXCfgParser::host_addr() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 225 "pix.g" +#line 219 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->tmp_a = h->getText(); @@ -1084,7 +914,7 @@ void PIXCfgParser::host_addr() { importer->commitNamedAddressObject(); *dbg << h->getText() << "/255.255.255.255"; -#line 1088 "PIXCfgParser.cpp" +#line 918 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1098,6 +928,7 @@ void PIXCfgParser::host_addr() { } void PIXCfgParser::range_addr() { + Tracer traceInOut(this, "range_addr"); ANTLR_USE_NAMESPACE(antlr)RefToken r1 = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken r2 = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -1110,7 +941,7 @@ void PIXCfgParser::range_addr() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 235 "pix.g" +#line 229 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->tmp_range_1 = r1->getText(); @@ -1118,7 +949,7 @@ void PIXCfgParser::range_addr() { importer->commitNamedAddressRangeObject(); *dbg << r1->getText() << "/" << r2->getText(); -#line 1122 "PIXCfgParser.cpp" +#line 953 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1132,6 +963,7 @@ void PIXCfgParser::range_addr() { } void PIXCfgParser::subnet_addr() { + Tracer traceInOut(this, "subnet_addr"); ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken nm = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -1144,7 +976,7 @@ void PIXCfgParser::subnet_addr() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 245 "pix.g" +#line 239 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->tmp_a = a->getText(); @@ -1152,7 +984,7 @@ void PIXCfgParser::subnet_addr() { importer->commitNamedAddressObject(); *dbg << a->getText() << "/" << nm->getText(); -#line 1156 "PIXCfgParser.cpp" +#line 988 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1166,15 +998,16 @@ void PIXCfgParser::subnet_addr() { } void PIXCfgParser::named_object_service_parameters() { + Tracer traceInOut(this, "named_object_service_parameters"); try { // for error handling match(NEWLINE); if ( inputState->guessing==0 ) { -#line 270 "pix.g" +#line 264 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); -#line 1178 "PIXCfgParser.cpp" +#line 1011 "PIXCfgParser.cpp" } { if ((LA(1) == DESCRIPTION)) { @@ -1189,7 +1022,7 @@ void PIXCfgParser::named_object_service_parameters() { else if ((LA(1) == SERVICE) && (LA(2) == TCP || LA(2) == UDP)) { service_tcp_udp(); } - else if ((LA(1) == SERVICE) && (LA(2) == WORD)) { + else if ((LA(1) == SERVICE) && (LA(2) == IP || LA(2) == WORD)) { service_other(); } else { @@ -1209,6 +1042,7 @@ void PIXCfgParser::named_object_service_parameters() { } void PIXCfgParser::service_icmp() { + Tracer traceInOut(this, "service_icmp"); ANTLR_USE_NAMESPACE(antlr)RefToken icmp_type = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken icmp_word = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -1222,11 +1056,11 @@ void PIXCfgParser::service_icmp() { icmp_type = LT(1); match(INT_CONST); if ( inputState->guessing==0 ) { -#line 289 "pix.g" +#line 283 "pix.g" importer->icmp_type = LT(0)->getText(); -#line 1230 "PIXCfgParser.cpp" +#line 1064 "PIXCfgParser.cpp" } break; } @@ -1235,11 +1069,11 @@ void PIXCfgParser::service_icmp() { icmp_word = LT(1); match(WORD); if ( inputState->guessing==0 ) { -#line 293 "pix.g" +#line 287 "pix.g" importer->icmp_spec = icmp_word->getText(); -#line 1243 "PIXCfgParser.cpp" +#line 1077 "PIXCfgParser.cpp" } break; } @@ -1250,13 +1084,13 @@ void PIXCfgParser::service_icmp() { } } if ( inputState->guessing==0 ) { -#line 297 "pix.g" +#line 291 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->commitNamedICMPServiceObject(); *dbg << "NAMED OBJECT SERVICE ICMP " << LT(0)->getText() << " "; -#line 1260 "PIXCfgParser.cpp" +#line 1094 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1270,6 +1104,7 @@ void PIXCfgParser::service_icmp() { } void PIXCfgParser::service_icmp6() { + Tracer traceInOut(this, "service_icmp6"); try { // for error handling match(SERVICE); @@ -1293,7 +1128,7 @@ void PIXCfgParser::service_icmp6() { } } if ( inputState->guessing==0 ) { -#line 305 "pix.g" +#line 299 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->addMessageToLog("Parser warning: " @@ -1302,7 +1137,7 @@ void PIXCfgParser::service_icmp6() { *dbg << "NAMED OBJECT SERVICE ICMP6 " << LT(0)->getText() << " "; consumeUntil(NEWLINE); -#line 1306 "PIXCfgParser.cpp" +#line 1141 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1316,6 +1151,7 @@ void PIXCfgParser::service_icmp6() { } void PIXCfgParser::service_tcp_udp() { + Tracer traceInOut(this, "service_tcp_udp"); try { // for error handling match(SERVICE); @@ -1338,12 +1174,12 @@ void PIXCfgParser::service_tcp_udp() { } } if ( inputState->guessing==0 ) { -#line 316 "pix.g" +#line 310 "pix.g" importer->protocol = LT(0)->getText(); *dbg << "NAMED OBJECT SERVICE " << LT(0)->getText() << " "; -#line 1347 "PIXCfgParser.cpp" +#line 1183 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -1354,8 +1190,8 @@ void PIXCfgParser::service_tcp_udp() { } case ANTLR_USE_NAMESPACE(antlr)Token::EOF_TYPE: case NEWLINE: - case IP: case QUIT: + case IP: case NAMES: case NAME: case WORD: @@ -1369,11 +1205,6 @@ void PIXCfgParser::service_tcp_udp() { case ACCESS_LIST: case CONTROLLER: case INTRFACE: - case VLAN: - case SEC_LEVEL: - case NAMEIF: - case SHUTDOWN: - case SWITCHPORT: case EXIT: case LINE_COMMENT: case COLON_COMMENT: @@ -1395,8 +1226,8 @@ void PIXCfgParser::service_tcp_udp() { } case ANTLR_USE_NAMESPACE(antlr)Token::EOF_TYPE: case NEWLINE: - case IP: case QUIT: + case IP: case NAMES: case NAME: case WORD: @@ -1409,11 +1240,6 @@ void PIXCfgParser::service_tcp_udp() { case ACCESS_LIST: case CONTROLLER: case INTRFACE: - case VLAN: - case SEC_LEVEL: - case NAMEIF: - case SHUTDOWN: - case SWITCHPORT: case EXIT: case LINE_COMMENT: case COLON_COMMENT: @@ -1427,12 +1253,12 @@ void PIXCfgParser::service_tcp_udp() { } } if ( inputState->guessing==0 ) { -#line 322 "pix.g" +#line 316 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->commitNamedTCPUDPServiceObject(); -#line 1436 "PIXCfgParser.cpp" +#line 1262 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1446,21 +1272,42 @@ void PIXCfgParser::service_tcp_udp() { } void PIXCfgParser::service_other() { + Tracer traceInOut(this, "service_other"); + ANTLR_USE_NAMESPACE(antlr)RefToken ip = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken n = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling match(SERVICE); - n = LT(1); - match(WORD); + { + switch ( LA(1)) { + case IP: + { + ip = LT(1); + match(IP); + break; + } + case WORD: + { + n = LT(1); + match(WORD); + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + } + } if ( inputState->guessing==0 ) { -#line 341 "pix.g" +#line 335 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); - importer->protocol = LT(0)->getText(); + if (ip) importer->protocol = "ip"; + if (n) importer->protocol = n->getText(); importer->commitNamedIPServiceObject(); *dbg << "NAMED OBJECT SERVICE " << LT(0)->getText() << " "; -#line 1464 "PIXCfgParser.cpp" +#line 1311 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1474,22 +1321,23 @@ void PIXCfgParser::service_other() { } void PIXCfgParser::src_port_spec() { + Tracer traceInOut(this, "src_port_spec"); try { // for error handling match(SOURCE); xoperator(); if ( inputState->guessing==0 ) { -#line 329 "pix.g" +#line 323 "pix.g" importer->SaveTmpPortToSrc(); -#line 1487 "PIXCfgParser.cpp" +#line 1335 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_4); + recover(ex,_tokenSet_5); } else { throw; } @@ -1497,16 +1345,17 @@ void PIXCfgParser::src_port_spec() { } void PIXCfgParser::dst_port_spec() { + Tracer traceInOut(this, "dst_port_spec"); try { // for error handling match(DESTINATION); xoperator(); if ( inputState->guessing==0 ) { -#line 335 "pix.g" +#line 329 "pix.g" importer->SaveTmpPortToDst(); -#line 1510 "PIXCfgParser.cpp" +#line 1359 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1520,6 +1369,7 @@ void PIXCfgParser::dst_port_spec() { } void PIXCfgParser::xoperator() { + Tracer traceInOut(this, "xoperator"); try { // for error handling switch ( LA(1)) { @@ -1545,7 +1395,7 @@ void PIXCfgParser::xoperator() { catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_5); + recover(ex,_tokenSet_6); } else { throw; } @@ -1553,27 +1403,28 @@ void PIXCfgParser::xoperator() { } void PIXCfgParser::permit_ext() { + Tracer traceInOut(this, "permit_ext"); try { // for error handling match(PERMIT); if ( inputState->guessing==0 ) { -#line 447 "pix.g" +#line 449 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->newPolicyRule(); importer->action = "permit"; *dbg << LT(1)->getLine() << ":" << " permit "; -#line 1568 "PIXCfgParser.cpp" +#line 1419 "PIXCfgParser.cpp" } rule_ext(); match(NEWLINE); if ( inputState->guessing==0 ) { -#line 454 "pix.g" +#line 456 "pix.g" importer->pushRule(); -#line 1577 "PIXCfgParser.cpp" +#line 1428 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1587,27 +1438,28 @@ void PIXCfgParser::permit_ext() { } void PIXCfgParser::deny_ext() { + Tracer traceInOut(this, "deny_ext"); try { // for error handling match(DENY); if ( inputState->guessing==0 ) { -#line 460 "pix.g" +#line 462 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->newPolicyRule(); importer->action = "deny"; *dbg << LT(1)->getLine() << ":" << " deny "; -#line 1602 "PIXCfgParser.cpp" +#line 1454 "PIXCfgParser.cpp" } rule_ext(); match(NEWLINE); if ( inputState->guessing==0 ) { -#line 467 "pix.g" +#line 469 "pix.g" importer->pushRule(); -#line 1611 "PIXCfgParser.cpp" +#line 1463 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1621,11 +1473,12 @@ void PIXCfgParser::deny_ext() { } void PIXCfgParser::remark() { + Tracer traceInOut(this, "remark"); try { // for error handling match(REMARK); if ( inputState->guessing==0 ) { -#line 894 "pix.g" +#line 944 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); *dbg << LT(1)->getLine() << ":"; @@ -1639,7 +1492,7 @@ void PIXCfgParser::remark() { *dbg << " REMARK " << rem << std::endl; //consumeUntil(NEWLINE); -#line 1643 "PIXCfgParser.cpp" +#line 1496 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -1653,6 +1506,7 @@ void PIXCfgParser::remark() { } void PIXCfgParser::rule_ext() { + Tracer traceInOut(this, "rule_ext"); try { // for error handling { @@ -1663,15 +1517,15 @@ void PIXCfgParser::rule_ext() { ip_protocols(); hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 477 "pix.g" +#line 479 "pix.g" importer->SaveTmpAddrToSrc(); *dbg << "(src) "; -#line 1669 "PIXCfgParser.cpp" +#line 1523 "PIXCfgParser.cpp" } hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 478 "pix.g" +#line 480 "pix.g" importer->SaveTmpAddrToDst(); *dbg << "(dst) "; -#line 1675 "PIXCfgParser.cpp" +#line 1529 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -1736,24 +1590,24 @@ void PIXCfgParser::rule_ext() { { match(ICMP); if ( inputState->guessing==0 ) { -#line 484 "pix.g" +#line 486 "pix.g" importer->protocol = LT(0)->getText(); *dbg << "protocol " << LT(0)->getText() << " "; -#line 1745 "PIXCfgParser.cpp" +#line 1599 "PIXCfgParser.cpp" } hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 488 "pix.g" +#line 490 "pix.g" importer->SaveTmpAddrToSrc(); *dbg << "(src) "; -#line 1751 "PIXCfgParser.cpp" +#line 1605 "PIXCfgParser.cpp" } hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 489 "pix.g" +#line 491 "pix.g" importer->SaveTmpAddrToDst(); *dbg << "(dst) "; -#line 1757 "PIXCfgParser.cpp" +#line 1611 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -1858,18 +1712,18 @@ void PIXCfgParser::rule_ext() { } } if ( inputState->guessing==0 ) { -#line 496 "pix.g" +#line 498 "pix.g" importer->protocol = LT(0)->getText(); *dbg << "protocol " << LT(0)->getText() << " "; -#line 1867 "PIXCfgParser.cpp" +#line 1721 "PIXCfgParser.cpp" } hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 500 "pix.g" +#line 502 "pix.g" importer->SaveTmpAddrToSrc(); *dbg << "(src) "; -#line 1873 "PIXCfgParser.cpp" +#line 1727 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -1881,9 +1735,9 @@ void PIXCfgParser::rule_ext() { { xoperator(); if ( inputState->guessing==0 ) { -#line 501 "pix.g" +#line 503 "pix.g" importer->SaveTmpPortToSrc(); -#line 1887 "PIXCfgParser.cpp" +#line 1741 "PIXCfgParser.cpp" } break; } @@ -1901,9 +1755,9 @@ void PIXCfgParser::rule_ext() { } hostaddr_ext(); if ( inputState->guessing==0 ) { -#line 502 "pix.g" +#line 504 "pix.g" importer->SaveTmpAddrToDst(); *dbg << "(dst) "; -#line 1907 "PIXCfgParser.cpp" +#line 1761 "PIXCfgParser.cpp" } { switch ( LA(1)) { @@ -1915,9 +1769,9 @@ void PIXCfgParser::rule_ext() { { xoperator(); if ( inputState->guessing==0 ) { -#line 503 "pix.g" +#line 505 "pix.g" importer->SaveTmpPortToDst(); -#line 1921 "PIXCfgParser.cpp" +#line 1775 "PIXCfgParser.cpp" } break; } @@ -2023,17 +1877,17 @@ void PIXCfgParser::rule_ext() { } } if ( inputState->guessing==0 ) { -#line 509 "pix.g" +#line 511 "pix.g" *dbg << std::endl; -#line 2031 "PIXCfgParser.cpp" +#line 1885 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_6); + recover(ex,_tokenSet_7); } else { throw; } @@ -2041,6 +1895,7 @@ void PIXCfgParser::rule_ext() { } void PIXCfgParser::ip_protocols() { + Tracer traceInOut(this, "ip_protocols"); try { // for error handling { @@ -2062,18 +1917,18 @@ void PIXCfgParser::ip_protocols() { } } if ( inputState->guessing==0 ) { -#line 517 "pix.g" +#line 519 "pix.g" importer->protocol = LT(0)->getText(); *dbg << "protocol " << LT(0)->getText() << " "; -#line 2071 "PIXCfgParser.cpp" +#line 1926 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_7); + recover(ex,_tokenSet_8); } else { throw; } @@ -2081,6 +1936,7 @@ void PIXCfgParser::ip_protocols() { } void PIXCfgParser::hostaddr_ext() { + Tracer traceInOut(this, "hostaddr_ext"); ANTLR_USE_NAMESPACE(antlr)RefToken h = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken m = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2095,13 +1951,13 @@ void PIXCfgParser::hostaddr_ext() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 580 "pix.g" +#line 582 "pix.g" importer->tmp_a = h->getText(); importer->tmp_nm = "255.255.255.255"; *dbg << h->getText() << "/255.255.255.255"; -#line 2105 "PIXCfgParser.cpp" +#line 1961 "PIXCfgParser.cpp" } break; } @@ -2114,13 +1970,13 @@ void PIXCfgParser::hostaddr_ext() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 587 "pix.g" +#line 589 "pix.g" importer->tmp_a = a->getText(); importer->tmp_nm = m->getText(); *dbg << a->getText() << "/" << m->getText(); -#line 2124 "PIXCfgParser.cpp" +#line 1980 "PIXCfgParser.cpp" } break; } @@ -2128,13 +1984,13 @@ void PIXCfgParser::hostaddr_ext() { { match(ANY); if ( inputState->guessing==0 ) { -#line 594 "pix.g" +#line 596 "pix.g" importer->tmp_a = "0.0.0.0"; importer->tmp_nm = "0.0.0.0"; *dbg << "0.0.0.0/0.0.0.0"; -#line 2138 "PIXCfgParser.cpp" +#line 1994 "PIXCfgParser.cpp" } break; } @@ -2144,32 +2000,6 @@ void PIXCfgParser::hostaddr_ext() { } } } - catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { - if( inputState->guessing == 0 ) { - reportError(ex); - recover(ex,_tokenSet_8); - } else { - throw; - } - } -} - -void PIXCfgParser::time_range() { - ANTLR_USE_NAMESPACE(antlr)RefToken tr_name = ANTLR_USE_NAMESPACE(antlr)nullToken; - - try { // for error handling - match(TIME_RANGE); - tr_name = LT(1); - match(WORD); - if ( inputState->guessing==0 ) { -#line 646 "pix.g" - - importer->time_range_name = tr_name->getText(); - *dbg << "time_range " << tr_name->getText() << " "; - -#line 2171 "PIXCfgParser.cpp" - } - } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); @@ -2180,17 +2010,21 @@ void PIXCfgParser::time_range() { } } -void PIXCfgParser::fragments() { +void PIXCfgParser::time_range() { + Tracer traceInOut(this, "time_range"); + ANTLR_USE_NAMESPACE(antlr)RefToken tr_name = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling - match(FRAGMENTS); + match(TIME_RANGE); + tr_name = LT(1); + match(WORD); if ( inputState->guessing==0 ) { -#line 639 "pix.g" +#line 648 "pix.g" - importer->fragments = true; - *dbg << "fragments "; + importer->time_range_name = tr_name->getText(); + *dbg << "time_range " << tr_name->getText() << " "; -#line 2194 "PIXCfgParser.cpp" +#line 2028 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -2203,7 +2037,32 @@ void PIXCfgParser::fragments() { } } +void PIXCfgParser::fragments() { + Tracer traceInOut(this, "fragments"); + + try { // for error handling + match(FRAGMENTS); + if ( inputState->guessing==0 ) { +#line 641 "pix.g" + + importer->fragments = true; + *dbg << "fragments "; + +#line 2052 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_11); + } else { + throw; + } + } +} + void PIXCfgParser::log() { + Tracer traceInOut(this, "log"); try { // for error handling { @@ -2225,18 +2084,18 @@ void PIXCfgParser::log() { } } if ( inputState->guessing==0 ) { -#line 625 "pix.g" +#line 627 "pix.g" importer->logging = true; *dbg << "logging "; -#line 2234 "PIXCfgParser.cpp" +#line 2093 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_6); + recover(ex,_tokenSet_7); } else { throw; } @@ -2244,6 +2103,7 @@ void PIXCfgParser::log() { } void PIXCfgParser::icmp_spec() { + Tracer traceInOut(this, "icmp_spec"); ANTLR_USE_NAMESPACE(antlr)RefToken icmp_type = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken icmp_code = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken icmp_word = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2260,7 +2120,7 @@ void PIXCfgParser::icmp_spec() { match(INT_CONST); } if ( inputState->guessing==0 ) { -#line 525 "pix.g" +#line 527 "pix.g" importer->icmp_type = icmp_type->getText(); importer->icmp_code = icmp_code->getText(); @@ -2268,7 +2128,7 @@ void PIXCfgParser::icmp_spec() { *dbg << icmp_type->getText() << " " << icmp_code->getText() << " "; -#line 2272 "PIXCfgParser.cpp" +#line 2132 "PIXCfgParser.cpp" } break; } @@ -2277,12 +2137,12 @@ void PIXCfgParser::icmp_spec() { icmp_word = LT(1); match(WORD); if ( inputState->guessing==0 ) { -#line 534 "pix.g" +#line 536 "pix.g" importer->icmp_spec = icmp_word->getText(); *dbg << icmp_word->getText() << " "; -#line 2286 "PIXCfgParser.cpp" +#line 2146 "PIXCfgParser.cpp" } break; } @@ -2296,7 +2156,7 @@ void PIXCfgParser::icmp_spec() { catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_11); + recover(ex,_tokenSet_12); } else { throw; } @@ -2304,22 +2164,23 @@ void PIXCfgParser::icmp_spec() { } void PIXCfgParser::established() { + Tracer traceInOut(this, "established"); try { // for error handling match(ESTABLISHED); if ( inputState->guessing==0 ) { -#line 632 "pix.g" +#line 634 "pix.g" importer->established = true; *dbg << "established "; -#line 2317 "PIXCfgParser.cpp" +#line 2178 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_11); + recover(ex,_tokenSet_12); } else { throw; } @@ -2327,6 +2188,7 @@ void PIXCfgParser::established() { } void PIXCfgParser::single_port_op() { + Tracer traceInOut(this, "single_port_op"); try { // for error handling { @@ -2358,19 +2220,19 @@ void PIXCfgParser::single_port_op() { } } if ( inputState->guessing==0 ) { -#line 545 "pix.g" +#line 547 "pix.g" importer->tmp_port_op = LT(0)->getText(); *dbg << LT(0)->getText() << " "; -#line 2367 "PIXCfgParser.cpp" +#line 2229 "PIXCfgParser.cpp" } port_spec(); } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_5); + recover(ex,_tokenSet_6); } else { throw; } @@ -2378,23 +2240,24 @@ void PIXCfgParser::single_port_op() { } void PIXCfgParser::port_range() { + Tracer traceInOut(this, "port_range"); try { // for error handling match(RANGE); pair_of_ports_spec(); if ( inputState->guessing==0 ) { -#line 560 "pix.g" +#line 562 "pix.g" importer->tmp_port_op = "range"; *dbg << "range "; -#line 2392 "PIXCfgParser.cpp" +#line 2255 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_5); + recover(ex,_tokenSet_6); } else { throw; } @@ -2402,6 +2265,7 @@ void PIXCfgParser::port_range() { } void PIXCfgParser::port_spec() { + Tracer traceInOut(this, "port_spec"); try { // for error handling { @@ -2423,18 +2287,18 @@ void PIXCfgParser::port_spec() { } } if ( inputState->guessing==0 ) { -#line 553 "pix.g" +#line 555 "pix.g" importer->tmp_port_spec = (std::string(" ") + LT(0)->getText()); *dbg << LT(0)->getText() << " " << importer->tmp_port_spec; -#line 2432 "PIXCfgParser.cpp" +#line 2296 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_5); + recover(ex,_tokenSet_6); } else { throw; } @@ -2442,6 +2306,7 @@ void PIXCfgParser::port_spec() { } void PIXCfgParser::pair_of_ports_spec() { + Tracer traceInOut(this, "pair_of_ports_spec"); ANTLR_USE_NAMESPACE(antlr)RefToken s1 = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken s2 = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken e1 = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2489,7 +2354,7 @@ void PIXCfgParser::pair_of_ports_spec() { } } if ( inputState->guessing==0 ) { -#line 567 "pix.g" +#line 569 "pix.g" importer->tmp_port_spec = ""; if (s1) importer->tmp_port_spec += s1->getText(); @@ -2499,13 +2364,13 @@ void PIXCfgParser::pair_of_ports_spec() { if (e2) importer->tmp_port_spec += e2->getText(); *dbg << "pair of ports: " << importer->tmp_port_spec; -#line 2503 "PIXCfgParser.cpp" +#line 2368 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_5); + recover(ex,_tokenSet_6); } else { throw; } @@ -2513,6 +2378,7 @@ void PIXCfgParser::pair_of_ports_spec() { } void PIXCfgParser::hostaddr_std() { + Tracer traceInOut(this, "hostaddr_std"); ANTLR_USE_NAMESPACE(antlr)RefToken h = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken m = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2524,13 +2390,13 @@ void PIXCfgParser::hostaddr_std() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 603 "pix.g" +#line 605 "pix.g" importer->tmp_a = h->getText(); importer->tmp_nm = "0.0.0.0"; *dbg << h->getText() << "/0.0.0.0"; -#line 2534 "PIXCfgParser.cpp" +#line 2400 "PIXCfgParser.cpp" } } else if ((LA(1) == IPV4) && (LA(2) == IPV4)) { @@ -2541,25 +2407,25 @@ void PIXCfgParser::hostaddr_std() { match(IPV4); } if ( inputState->guessing==0 ) { -#line 610 "pix.g" +#line 612 "pix.g" importer->tmp_a = a->getText(); importer->tmp_nm = m->getText(); *dbg << a->getText() << "/" << m->getText(); -#line 2551 "PIXCfgParser.cpp" +#line 2417 "PIXCfgParser.cpp" } } else if ((LA(1) == ANY)) { match(ANY); if ( inputState->guessing==0 ) { -#line 617 "pix.g" +#line 619 "pix.g" importer->tmp_a = "0.0.0.0"; importer->tmp_nm = "0.0.0.0"; *dbg << "0.0.0.0/0.0.0.0"; -#line 2563 "PIXCfgParser.cpp" +#line 2429 "PIXCfgParser.cpp" } } else { @@ -2578,48 +2444,78 @@ void PIXCfgParser::hostaddr_std() { } void PIXCfgParser::interface_parameters() { + Tracer traceInOut(this, "interface_parameters"); try { // for error handling match(NEWLINE); if ( inputState->guessing==0 ) { -#line 716 "pix.g" +#line 718 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); -#line 2590 "PIXCfgParser.cpp" +#line 2457 "PIXCfgParser.cpp" + } + { + switch ( LA(1)) { + case IP: + { + intf_address(); + break; + } + case VLAN: + { + vlan_interface(); + break; + } + case SEC_LEVEL: + { + sec_level(); + break; + } + case NAMEIF: + { + nameif(); + break; + } + case DESCRIPTION: + { + interface_description(); + break; + } + case SWITCHPORT: + { + switchport(); + break; + } + case SHUTDOWN: + { + shutdown(); + break; + } + case SPEED: + case DUPLEX: + case DDNS: + case FORWARD: + case DELAY: + case HOLD_TIME: + case IGMP: + case IPV6: + case MAC_ADDRESS: + case MULTICAST: + case OSPF: + case PIM: + case PPPOE: + case RIP: + { + unsupported_interface_commands(); + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } } - { // ( ... )+ - int _cnt101=0; - for (;;) { - if ((LA(1) == IP) && (LA(2) == ADDRESS)) { - intf_address(); - } - else if ((LA(1) == VLAN) && (LA(2) == INT_CONST)) { - vlan_interface(); - } - else if ((LA(1) == SEC_LEVEL) && (LA(2) == INT_CONST)) { - sec_level(); - } - else if ((LA(1) == NAMEIF) && (LA(2) == WORD)) { - nameif(); - } - else if ((LA(1) == DESCRIPTION)) { - interface_description(); - } - else if ((LA(1) == SWITCHPORT) && (LA(2) == ACCESS)) { - switchport(); - } - else if ((LA(1) == SHUTDOWN) && (_tokenSet_3.member(LA(2)))) { - shutdown(); - } - else { - if ( _cnt101>=1 ) { goto _loop101; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());} - } - - _cnt101++; } - _loop101:; - } // ( ... )+ } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { @@ -2632,6 +2528,7 @@ void PIXCfgParser::interface_parameters() { } void PIXCfgParser::intf_address() { + Tracer traceInOut(this, "intf_address"); try { // for error handling match(IP); @@ -2659,7 +2556,125 @@ void PIXCfgParser::intf_address() { catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::vlan_interface() { + Tracer traceInOut(this, "vlan_interface"); + ANTLR_USE_NAMESPACE(antlr)RefToken vlan_id = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(VLAN); + vlan_id = LT(1); + match(INT_CONST); + if ( inputState->guessing==0 ) { +#line 741 "pix.g" + + importer->setInterfaceVlanId(vlan_id->getText()); + *dbg << " VLAN: " << vlan_id->getText() << std::endl; + +#line 2581 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::sec_level() { + Tracer traceInOut(this, "sec_level"); + ANTLR_USE_NAMESPACE(antlr)RefToken sec_level = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(SEC_LEVEL); + sec_level = LT(1); + match(INT_CONST); + if ( inputState->guessing==0 ) { +#line 785 "pix.g" + + importer->setInterfaceSecurityLevel(sec_level->getText()); + *dbg << "SEC_LEVEL: " << sec_level->getText() << std::endl; + +#line 2608 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::nameif() { + Tracer traceInOut(this, "nameif"); + ANTLR_USE_NAMESPACE(antlr)RefToken p_intf = ANTLR_USE_NAMESPACE(antlr)nullToken; + ANTLR_USE_NAMESPACE(antlr)RefToken intf_label = ANTLR_USE_NAMESPACE(antlr)nullToken; + ANTLR_USE_NAMESPACE(antlr)RefToken sec_level = ANTLR_USE_NAMESPACE(antlr)nullToken; + + try { // for error handling + match(NAMEIF); + p_intf = LT(1); + match(WORD); + { + bool synPredMatched108 = false; + if (((LA(1) == WORD) && (LA(2) == WORD) && (_tokenSet_1.member(LA(3))))) { + int _m108 = mark(); + synPredMatched108 = true; + inputState->guessing++; + try { + { + match(WORD); + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) { + synPredMatched108 = false; + } + rewind(_m108); + inputState->guessing--; + } + if ( synPredMatched108 ) { + intf_label = LT(1); + match(WORD); + sec_level = LT(1); + match(WORD); + } + else if ((_tokenSet_1.member(LA(1))) && (_tokenSet_13.member(LA(2))) && (_tokenSet_14.member(LA(3)))) { + { + } + } + else { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + + } + if ( inputState->guessing==0 ) { +#line 808 "pix.g" + + std::string label = (intf_label) ? intf_label->getText() : ""; + std::string seclevel = (sec_level) ? sec_level->getText() : ""; + importer->setInterfaceParametes(p_intf->getText(), label, seclevel); + *dbg << " NAMEIF: " + << p_intf->getText() << label << seclevel << std::endl; + +#line 2672 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); } else { throw; } @@ -2667,11 +2682,12 @@ void PIXCfgParser::intf_address() { } void PIXCfgParser::interface_description() { + Tracer traceInOut(this, "interface_description"); try { // for error handling match(DESCRIPTION); if ( inputState->guessing==0 ) { -#line 765 "pix.g" +#line 820 "pix.g" *dbg << LT(1)->getLine() << ":"; std::string descr; @@ -2684,31 +2700,169 @@ void PIXCfgParser::interface_description() { *dbg << " DESCRIPTION " << descr << std::endl; //consumeUntil(NEWLINE); -#line 2688 "PIXCfgParser.cpp" +#line 2704 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } } } -void PIXCfgParser::interface_known_commands() { +void PIXCfgParser::switchport() { + Tracer traceInOut(this, "switchport"); + ANTLR_USE_NAMESPACE(antlr)RefToken vlan_num = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling - { - intf_address(); + match(SWITCHPORT); + match(ACCESS); + match(VLAN); + vlan_num = LT(1); + match(INT_CONST); + if ( inputState->guessing==0 ) { +#line 932 "pix.g" + + importer->addMessageToLog("Switch port vlan " + vlan_num->getText()); + *dbg << "Switch port vlan " << vlan_num->getText() << std::endl; + +#line 2733 "PIXCfgParser.cpp" } - match(NEWLINE); } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_0); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::shutdown() { + Tracer traceInOut(this, "shutdown"); + + try { // for error handling + match(SHUTDOWN); + if ( inputState->guessing==0 ) { +#line 835 "pix.g" + + importer->ignoreCurrentInterface(); + *dbg<< LT(1)->getLine() << ":" + << " INTERFACE SHUTDOWN " << std::endl; + +#line 2758 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); + } else { + throw; + } + } +} + +void PIXCfgParser::unsupported_interface_commands() { + Tracer traceInOut(this, "unsupported_interface_commands"); + + try { // for error handling + { + switch ( LA(1)) { + case SPEED: + { + match(SPEED); + break; + } + case DUPLEX: + { + match(DUPLEX); + break; + } + case DDNS: + { + match(DDNS); + break; + } + case FORWARD: + { + match(FORWARD); + break; + } + case DELAY: + { + match(DELAY); + break; + } + case HOLD_TIME: + { + match(HOLD_TIME); + break; + } + case IGMP: + { + match(IGMP); + break; + } + case IPV6: + { + match(IPV6); + break; + } + case MAC_ADDRESS: + { + match(MAC_ADDRESS); + break; + } + case MULTICAST: + { + match(MULTICAST); + break; + } + case OSPF: + { + match(OSPF); + break; + } + case PIM: + { + match(PIM); + break; + } + case PPPOE: + { + match(PPPOE); + break; + } + case RIP: + { + match(RIP); + break; + } + default: + { + throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename()); + } + } + } + if ( inputState->guessing==0 ) { +#line 777 "pix.g" + + *dbg << " UNSUPPORTED INTERFACE COMMAND: " + << LT(0)->getText() << std::endl; + consumeUntil(NEWLINE); + +#line 2860 "PIXCfgParser.cpp" + } + } + catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { + if( inputState->guessing == 0 ) { + reportError(ex); + recover(ex,_tokenSet_1); } else { throw; } @@ -2716,6 +2870,7 @@ void PIXCfgParser::interface_known_commands() { } void PIXCfgParser::v6_ip_address() { + Tracer traceInOut(this, "v6_ip_address"); try { // for error handling if ((LA(1) == WORD) && (LA(2) == DHCP)) { @@ -2732,7 +2887,7 @@ void PIXCfgParser::v6_ip_address() { catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2740,6 +2895,7 @@ void PIXCfgParser::v6_ip_address() { } void PIXCfgParser::v7_ip_address() { + Tracer traceInOut(this, "v7_ip_address"); try { // for error handling switch ( LA(1)) { @@ -2762,7 +2918,7 @@ void PIXCfgParser::v7_ip_address() { catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2770,6 +2926,7 @@ void PIXCfgParser::v7_ip_address() { } void PIXCfgParser::v6_dhcp_address() { + Tracer traceInOut(this, "v6_dhcp_address"); ANTLR_USE_NAMESPACE(antlr)RefToken lbl = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken dhcp = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2779,7 +2936,7 @@ void PIXCfgParser::v6_dhcp_address() { dhcp = LT(1); match(DHCP); if ( inputState->guessing==0 ) { -#line 820 "pix.g" +#line 870 "pix.g" std::string label = lbl->getText(); std::string addr = dhcp->getText(); @@ -2790,13 +2947,13 @@ void PIXCfgParser::v6_dhcp_address() { // which we do not support consumeUntil(NEWLINE); -#line 2794 "PIXCfgParser.cpp" +#line 2951 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2804,6 +2961,7 @@ void PIXCfgParser::v6_dhcp_address() { } void PIXCfgParser::v6_static_address() { + Tracer traceInOut(this, "v6_static_address"); ANTLR_USE_NAMESPACE(antlr)RefToken lbl = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken m = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2816,7 +2974,7 @@ void PIXCfgParser::v6_static_address() { m = LT(1); match(IPV4); if ( inputState->guessing==0 ) { -#line 833 "pix.g" +#line 883 "pix.g" std::string label = lbl->getText(); std::string addr = a->getText(); @@ -2827,13 +2985,13 @@ void PIXCfgParser::v6_static_address() { // in case there are some other parameters after address and netmask consumeUntil(NEWLINE); -#line 2831 "PIXCfgParser.cpp" +#line 2989 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2841,13 +2999,14 @@ void PIXCfgParser::v6_static_address() { } void PIXCfgParser::v7_dhcp_address() { + Tracer traceInOut(this, "v7_dhcp_address"); ANTLR_USE_NAMESPACE(antlr)RefToken dhcp = ANTLR_USE_NAMESPACE(antlr)nullToken; try { // for error handling dhcp = LT(1); match(DHCP); if ( inputState->guessing==0 ) { -#line 850 "pix.g" +#line 900 "pix.g" std::string addr = dhcp->getText(); importer->addInterfaceAddress(addr, ""); @@ -2855,13 +3014,13 @@ void PIXCfgParser::v7_dhcp_address() { << " INTRFACE ADDRESS: " << addr << std::endl; consumeUntil(NEWLINE); -#line 2859 "PIXCfgParser.cpp" +#line 3018 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2869,6 +3028,7 @@ void PIXCfgParser::v7_dhcp_address() { } void PIXCfgParser::v7_static_address() { + Tracer traceInOut(this, "v7_static_address"); ANTLR_USE_NAMESPACE(antlr)RefToken a = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken m = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken s = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2888,13 +3048,12 @@ void PIXCfgParser::v7_static_address() { } case ANTLR_USE_NAMESPACE(antlr)Token::EOF_TYPE: case NEWLINE: - case IP: case QUIT: + case IP: case NAMES: case NAME: case WORD: case OBJECT: - case DESCRIPTION: case CRYPTO: case CERTIFICATE: case PIX_WORD: @@ -2903,11 +3062,6 @@ void PIXCfgParser::v7_static_address() { case ACCESS_LIST: case CONTROLLER: case INTRFACE: - case VLAN: - case SEC_LEVEL: - case NAMEIF: - case SHUTDOWN: - case SWITCHPORT: case EXIT: case LINE_COMMENT: case COLON_COMMENT: @@ -2921,7 +3075,7 @@ void PIXCfgParser::v7_static_address() { } } if ( inputState->guessing==0 ) { -#line 861 "pix.g" +#line 911 "pix.g" std::string addr = a->getText(); std::string netm = m->getText(); @@ -2938,13 +3092,13 @@ void PIXCfgParser::v7_static_address() { } consumeUntil(NEWLINE); -#line 2942 "PIXCfgParser.cpp" +#line 3096 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { if( inputState->guessing == 0 ) { reportError(ex); - recover(ex,_tokenSet_3); + recover(ex,_tokenSet_1); } else { throw; } @@ -2952,6 +3106,7 @@ void PIXCfgParser::v7_static_address() { } void PIXCfgParser::access_group_by_name() { + Tracer traceInOut(this, "access_group_by_name"); ANTLR_USE_NAMESPACE(antlr)RefToken acln = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken dir = ANTLR_USE_NAMESPACE(antlr)nullToken; ANTLR_USE_NAMESPACE(antlr)RefToken intf_label = ANTLR_USE_NAMESPACE(antlr)nullToken; @@ -2966,7 +3121,7 @@ void PIXCfgParser::access_group_by_name() { intf_label = LT(1); match(WORD); if ( inputState->guessing==0 ) { -#line 912 "pix.g" +#line 962 "pix.g" importer->setCurrentLineNumber(LT(0)->getLine()); importer->setInterfaceAndDirectionForRuleSet( @@ -2978,7 +3133,7 @@ void PIXCfgParser::access_group_by_name() { << " " << intf_label->getText() << " " << dir->getText() << std::endl; -#line 2982 "PIXCfgParser.cpp" +#line 3137 "PIXCfgParser.cpp" } } catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) { @@ -3000,8 +3155,8 @@ const char* PIXCfgParser::tokenNames[] = { "<2>", "NULL_TREE_LOOKAHEAD", "NEWLINE", - "\"ip\"", "\"quit\"", + "\"ip\"", "\"community-list\"", "\"names\"", "\"name\"", @@ -3046,6 +3201,20 @@ const char* PIXCfgParser::tokenNames[] = { "\"controller\"", "\"interface\"", "\"vlan\"", + "\"speed\"", + "\"duplex\"", + "\"ddns\"", + "\"forward\"", + "\"delay\"", + "\"hold-time\"", + "\"igmp\"", + "\"ipv6\"", + "\"mac-address\"", + "\"multicast\"", + "\"ospf\"", + "\"pim\"", + "PPPOE", + "\"rip\"", "\"security-level\"", "\"nameif\"", "\"shutdown\"", @@ -3061,6 +3230,14 @@ const char* PIXCfgParser::tokenNames[] = { "COLON_COMMENT", "\"secondary\"", "\"setroute\"", + "\"ahp\"", + "\"eigrp\"", + "\"esp\"", + "\"gre\"", + "\"igrp\"", + "\"ipinip\"", + "\"nos\"", + "\"pcp\"", "\"extended\"", "\"standard\"", "\"object-group\"", @@ -3102,52 +3279,69 @@ const char* PIXCfgParser::tokenNames[] = { const unsigned long PIXCfgParser::_tokenSet_0_data_[] = { 2UL, 0UL, 0UL, 0UL }; // EOF const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_0(_tokenSet_0_data_,4); -const unsigned long PIXCfgParser::_tokenSet_1_data_[] = { 2013272946UL, 3795779594UL, 0UL, 0UL }; -// EOF NEWLINE "ip" "quit" "names" "name" WORD "object" "crypto" "certificate" -// "PIX" "ASA" "hostname" "access-list" "controller" "interface" "vlan" -// "security-level" "nameif" "shutdown" "switchport" "exit" LINE_COMMENT -// COLON_COMMENT -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_1(_tokenSet_1_data_,4); -const unsigned long PIXCfgParser::_tokenSet_2_data_[] = { 32800UL, 37486592UL, 0UL, 0UL }; -// "ip" "description" "vlan" "security-level" "nameif" "shutdown" "switchport" -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_2(_tokenSet_2_data_,4); -const unsigned long PIXCfgParser::_tokenSet_3_data_[] = { 2013305714UL, 3795779594UL, 0UL, 0UL }; -// EOF NEWLINE "ip" "quit" "names" "name" WORD "object" "description" "crypto" +const unsigned long PIXCfgParser::_tokenSet_1_data_[] = { 2013272946UL, 196618UL, 14336UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "names" "name" WORD "object" "crypto" "certificate" +// "PIX" "ASA" "hostname" "access-list" "controller" "interface" "exit" +// LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_1(_tokenSet_1_data_,8); +const unsigned long PIXCfgParser::_tokenSet_2_data_[] = { 32832UL, 4294705152UL, 143UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// "ip" "description" "vlan" "speed" "duplex" "ddns" "forward" "delay" +// "hold-time" "igmp" "ipv6" "mac-address" "multicast" "ospf" "pim" PPPOE +// "rip" "security-level" "nameif" "shutdown" "switchport" +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_2(_tokenSet_2_data_,8); +const unsigned long PIXCfgParser::_tokenSet_3_data_[] = { 2015370098UL, 196618UL, 14608UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "names" "name" WORD "object" INT_CONST "crypto" // "certificate" "PIX" "ASA" "hostname" "access-list" "controller" "interface" -// "vlan" "security-level" "nameif" "shutdown" "switchport" "exit" LINE_COMMENT -// COLON_COMMENT -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_3(_tokenSet_3_data_,4); -const unsigned long PIXCfgParser::_tokenSet_4_data_[] = { 2080381810UL, 3795779594UL, 0UL, 0UL }; -// EOF NEWLINE "ip" "quit" "names" "name" WORD "object" "destination" "crypto" +// "address" "access" "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_3(_tokenSet_3_data_,8); +const unsigned long PIXCfgParser::_tokenSet_4_data_[] = { 2043681650UL, 196618UL, 14336UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "names" "name" WORD "object" "icmp" ICMP6 "tcp" +// "udp" "crypto" "certificate" "PIX" "ASA" "hostname" "access-list" "controller" +// "interface" "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_4(_tokenSet_4_data_,8); +const unsigned long PIXCfgParser::_tokenSet_5_data_[] = { 2080381810UL, 196618UL, 14336UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "names" "name" WORD "object" "destination" "crypto" // "certificate" "PIX" "ASA" "hostname" "access-list" "controller" "interface" -// "vlan" "security-level" "nameif" "shutdown" "switchport" "exit" LINE_COMMENT -// COLON_COMMENT -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_4(_tokenSet_4_data_,4); -const unsigned long PIXCfgParser::_tokenSet_5_data_[] = { 2080448370UL, 3795844106UL, 0UL, 0UL }; -// EOF NEWLINE "ip" "quit" "names" "name" IPV4 WORD "object" "host" "destination" +// "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_5(_tokenSet_5_data_,8); +const unsigned long PIXCfgParser::_tokenSet_6_data_[] = { 2080448370UL, 261130UL, 14336UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "names" "name" IPV4 WORD "object" "host" "destination" // "crypto" "certificate" "PIX" "ASA" "hostname" "access-list" "any" "log" // "log-input" "established" "fragments" "time-range" "controller" "interface" -// "vlan" "security-level" "nameif" "shutdown" "switchport" "exit" LINE_COMMENT -// COLON_COMMENT -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_5(_tokenSet_5_data_,4); -const unsigned long PIXCfgParser::_tokenSet_6_data_[] = { 16UL, 0UL, 0UL, 0UL }; +// "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_6(_tokenSet_6_data_,8); +const unsigned long PIXCfgParser::_tokenSet_7_data_[] = { 16UL, 0UL, 0UL, 0UL }; // NEWLINE -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_6(_tokenSet_6_data_,4); -const unsigned long PIXCfgParser::_tokenSet_7_data_[] = { 66560UL, 1024UL, 0UL, 0UL }; -// IPV4 "host" "any" const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_7(_tokenSet_7_data_,4); -const unsigned long PIXCfgParser::_tokenSet_8_data_[] = { 2296848UL, 65472UL, 0UL, 0UL }; +const unsigned long PIXCfgParser::_tokenSet_8_data_[] = { 66560UL, 1024UL, 0UL, 0UL }; +// IPV4 "host" "any" +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_8(_tokenSet_8_data_,4); +const unsigned long PIXCfgParser::_tokenSet_9_data_[] = { 2296848UL, 65472UL, 0UL, 0UL }; // NEWLINE IPV4 WORD "host" "range" INT_CONST "eq" "gt" "lt" "neq" "any" // "log" "log-input" "established" "fragments" "time-range" -const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_8(_tokenSet_8_data_,4); -const unsigned long PIXCfgParser::_tokenSet_9_data_[] = { 16UL, 22528UL, 0UL, 0UL }; -// NEWLINE "log" "log-input" "fragments" const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_9(_tokenSet_9_data_,4); -const unsigned long PIXCfgParser::_tokenSet_10_data_[] = { 16UL, 6144UL, 0UL, 0UL }; -// NEWLINE "log" "log-input" +const unsigned long PIXCfgParser::_tokenSet_10_data_[] = { 16UL, 22528UL, 0UL, 0UL }; +// NEWLINE "log" "log-input" "fragments" const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_10(_tokenSet_10_data_,4); -const unsigned long PIXCfgParser::_tokenSet_11_data_[] = { 16UL, 55296UL, 0UL, 0UL }; -// NEWLINE "log" "log-input" "fragments" "time-range" +const unsigned long PIXCfgParser::_tokenSet_11_data_[] = { 16UL, 6144UL, 0UL, 0UL }; +// NEWLINE "log" "log-input" const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_11(_tokenSet_11_data_,4); +const unsigned long PIXCfgParser::_tokenSet_12_data_[] = { 16UL, 55296UL, 0UL, 0UL }; +// NEWLINE "log" "log-input" "fragments" "time-range" +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_12(_tokenSet_12_data_,4); +const unsigned long PIXCfgParser::_tokenSet_13_data_[] = { 4163420146UL, 4294901774UL, 14479UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "community-list" "names" "name" IPV4 WORD "object" +// "network" "description" "service" INT_CONST "crypto" "certificate" "PIX" +// "ASA" "Version" "hostname" STRING "access-list" "controller" "interface" +// "vlan" "speed" "duplex" "ddns" "forward" "delay" "hold-time" "igmp" +// "ipv6" "mac-address" "multicast" "ospf" "pim" PPPOE "rip" "security-level" +// "nameif" "shutdown" "switchport" "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_13(_tokenSet_13_data_,8); +const unsigned long PIXCfgParser::_tokenSet_14_data_[] = { 4163387378UL, 196671UL, 15120UL, 0UL, 0UL, 0UL, 0UL, 0UL }; +// EOF NEWLINE "quit" "ip" "community-list" "names" "name" IPV4 WORD "object" +// "network" "service" INT_CONST "crypto" "certificate" "PIX" "ASA" "Version" +// NUMBER "hostname" STRING "access-list" "permit" "deny" "controller" +// "interface" "address" "access" "remark" "exit" LINE_COMMENT COLON_COMMENT +const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgParser::_tokenSet_14(_tokenSet_14_data_,8); diff --git a/src/parsers/PIXCfgParser.hpp b/src/parsers/PIXCfgParser.hpp index 80f02c6d0..4f89ddfeb 100644 --- a/src/parsers/PIXCfgParser.hpp +++ b/src/parsers/PIXCfgParser.hpp @@ -69,13 +69,10 @@ public: public: void comment(); public: void version(); public: void hostname(); - public: void ip_commands(); + public: void ip_access_list_ext(); + public: void community_list_command(); + public: void unknown_ip_command(); public: void intrface(); - public: void vlan_interface(); - public: void switchport(); - public: void shutdown(); - public: void sec_level(); - public: void nameif(); public: void controller(); public: void access_list_commands(); public: void exit(); @@ -87,8 +84,6 @@ public: public: void named_object_service(); public: void crypto(); public: void unknown_command(); - public: void ip_access_list_ext(); - public: void community_list_command(); public: void named_object_network_parameters(); public: void named_object_nat(); public: void named_object_description(); @@ -121,8 +116,13 @@ public: public: void hostaddr_std(); public: void interface_parameters(); public: void intf_address(); + public: void vlan_interface(); + public: void sec_level(); + public: void nameif(); public: void interface_description(); - public: void interface_known_commands(); + public: void switchport(); + public: void shutdown(); + public: void unsupported_interface_commands(); public: void v6_ip_address(); public: void v7_ip_address(); public: void v6_dhcp_address(); @@ -141,10 +141,10 @@ protected: private: static const char* tokenNames[]; #ifndef NO_STATIC_CONSTS - static const int NUM_TOKENS = 101; + static const int NUM_TOKENS = 123; #else enum { - NUM_TOKENS = 101 + NUM_TOKENS = 123 }; #endif @@ -172,6 +172,12 @@ private: static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_10; static const unsigned long _tokenSet_11_data_[]; static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_11; + static const unsigned long _tokenSet_12_data_[]; + static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_12; + static const unsigned long _tokenSet_13_data_[]; + static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_13; + static const unsigned long _tokenSet_14_data_[]; + static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_14; }; #endif /*INC_PIXCfgParser_hpp_*/ diff --git a/src/parsers/PIXCfgParserTokenTypes.hpp b/src/parsers/PIXCfgParserTokenTypes.hpp index e4ce3ac02..837a32cc0 100644 --- a/src/parsers/PIXCfgParserTokenTypes.hpp +++ b/src/parsers/PIXCfgParserTokenTypes.hpp @@ -13,8 +13,8 @@ struct CUSTOM_API PIXCfgParserTokenTypes { enum { EOF_ = 1, NEWLINE = 4, - IP = 5, - QUIT = 6, + QUIT = 5, + IP = 6, COMMUNITY_LIST = 7, NAMES = 8, NAME = 9, @@ -59,56 +59,78 @@ struct CUSTOM_API PIXCfgParserTokenTypes { CONTROLLER = 48, INTRFACE = 49, VLAN = 50, - SEC_LEVEL = 51, - NAMEIF = 52, - SHUTDOWN = 53, - ADDRESS = 54, - DHCP = 55, - STANDBY = 56, - SWITCHPORT = 57, - ACCESS = 58, - REMARK = 59, - ACCESS_GROUP = 60, - EXIT = 61, - LINE_COMMENT = 62, - COLON_COMMENT = 63, - SECONDARY = 64, - SETROUTE = 65, - EXTENDED = 66, - STANDARD = 67, - OBJECT_GROUP = 68, - Whitespace = 69, - HEX_CONST = 70, - NEG_INT_CONST = 71, - DIGIT = 72, - HEXDIGIT = 73, - PIPE_CHAR = 74, - NUMBER_SIGN = 75, - PERCENT = 76, - AMPERSAND = 77, - APOSTROPHE = 78, - OPENING_PAREN = 79, - CLOSING_PAREN = 80, - STAR = 81, - PLUS = 82, - COMMA = 83, - MINUS = 84, - DOT = 85, - SLASH = 86, - COLON = 87, - SEMICOLON = 88, - LESS_THAN = 89, - EQUALS = 90, - GREATER_THAN = 91, - QUESTION = 92, - COMMERCIAL_AT = 93, - OPENING_SQUARE = 94, - CLOSING_SQUARE = 95, - CARET = 96, - UNDERLINE = 97, - OPENING_BRACE = 98, - CLOSING_BRACE = 99, - TILDE = 100, + SPEED = 51, + DUPLEX = 52, + DDNS = 53, + FORWARD = 54, + DELAY = 55, + HOLD_TIME = 56, + IGMP = 57, + IPV6 = 58, + MAC_ADDRESS = 59, + MULTICAST = 60, + OSPF = 61, + PIM = 62, + PPPOE = 63, + RIP = 64, + SEC_LEVEL = 65, + NAMEIF = 66, + SHUTDOWN = 67, + ADDRESS = 68, + DHCP = 69, + STANDBY = 70, + SWITCHPORT = 71, + ACCESS = 72, + REMARK = 73, + ACCESS_GROUP = 74, + EXIT = 75, + LINE_COMMENT = 76, + COLON_COMMENT = 77, + SECONDARY = 78, + SETROUTE = 79, + AHP = 80, + EIGRP = 81, + ESP = 82, + GRE = 83, + IGRP = 84, + IPINIP = 85, + NOS = 86, + PCP = 87, + EXTENDED = 88, + STANDARD = 89, + OBJECT_GROUP = 90, + Whitespace = 91, + HEX_CONST = 92, + NEG_INT_CONST = 93, + DIGIT = 94, + HEXDIGIT = 95, + PIPE_CHAR = 96, + NUMBER_SIGN = 97, + PERCENT = 98, + AMPERSAND = 99, + APOSTROPHE = 100, + OPENING_PAREN = 101, + CLOSING_PAREN = 102, + STAR = 103, + PLUS = 104, + COMMA = 105, + MINUS = 106, + DOT = 107, + SLASH = 108, + COLON = 109, + SEMICOLON = 110, + LESS_THAN = 111, + EQUALS = 112, + GREATER_THAN = 113, + QUESTION = 114, + COMMERCIAL_AT = 115, + OPENING_SQUARE = 116, + CLOSING_SQUARE = 117, + CARET = 118, + UNDERLINE = 119, + OPENING_BRACE = 120, + CLOSING_BRACE = 121, + TILDE = 122, NULL_TREE_LOOKAHEAD = 3 }; #ifdef __cplusplus diff --git a/src/parsers/PIXCfgParserTokenTypes.txt b/src/parsers/PIXCfgParserTokenTypes.txt index 9146e5445..ec04ef7f7 100644 --- a/src/parsers/PIXCfgParserTokenTypes.txt +++ b/src/parsers/PIXCfgParserTokenTypes.txt @@ -1,8 +1,8 @@ // $ANTLR 2.7.7 (20090306): pix.g -> PIXCfgParserTokenTypes.txt$ PIXCfgParser // output token vocab name NEWLINE=4 -IP="ip"=5 -QUIT="quit"=6 +QUIT="quit"=5 +IP="ip"=6 COMMUNITY_LIST="community-list"=7 NAMES="names"=8 NAME="name"=9 @@ -47,53 +47,75 @@ TIME_RANGE="time-range"=47 CONTROLLER="controller"=48 INTRFACE="interface"=49 VLAN="vlan"=50 -SEC_LEVEL="security-level"=51 -NAMEIF="nameif"=52 -SHUTDOWN="shutdown"=53 -ADDRESS="address"=54 -DHCP="dhcp"=55 -STANDBY="standby"=56 -SWITCHPORT="switchport"=57 -ACCESS="access"=58 -REMARK="remark"=59 -ACCESS_GROUP="access-group"=60 -EXIT="exit"=61 -LINE_COMMENT=62 -COLON_COMMENT=63 -SECONDARY="secondary"=64 -SETROUTE="setroute"=65 -EXTENDED="extended"=66 -STANDARD="standard"=67 -OBJECT_GROUP="object-group"=68 -Whitespace=69 -HEX_CONST=70 -NEG_INT_CONST=71 -DIGIT=72 -HEXDIGIT=73 -PIPE_CHAR=74 -NUMBER_SIGN=75 -PERCENT=76 -AMPERSAND=77 -APOSTROPHE=78 -OPENING_PAREN=79 -CLOSING_PAREN=80 -STAR=81 -PLUS=82 -COMMA=83 -MINUS=84 -DOT=85 -SLASH=86 -COLON=87 -SEMICOLON=88 -LESS_THAN=89 -EQUALS=90 -GREATER_THAN=91 -QUESTION=92 -COMMERCIAL_AT=93 -OPENING_SQUARE=94 -CLOSING_SQUARE=95 -CARET=96 -UNDERLINE=97 -OPENING_BRACE=98 -CLOSING_BRACE=99 -TILDE=100 +SPEED="speed"=51 +DUPLEX="duplex"=52 +DDNS="ddns"=53 +FORWARD="forward"=54 +DELAY="delay"=55 +HOLD_TIME="hold-time"=56 +IGMP="igmp"=57 +IPV6="ipv6"=58 +MAC_ADDRESS="mac-address"=59 +MULTICAST="multicast"=60 +OSPF="ospf"=61 +PIM="pim"=62 +PPPOE=63 +RIP="rip"=64 +SEC_LEVEL="security-level"=65 +NAMEIF="nameif"=66 +SHUTDOWN="shutdown"=67 +ADDRESS="address"=68 +DHCP="dhcp"=69 +STANDBY="standby"=70 +SWITCHPORT="switchport"=71 +ACCESS="access"=72 +REMARK="remark"=73 +ACCESS_GROUP="access-group"=74 +EXIT="exit"=75 +LINE_COMMENT=76 +COLON_COMMENT=77 +SECONDARY="secondary"=78 +SETROUTE="setroute"=79 +AHP="ahp"=80 +EIGRP="eigrp"=81 +ESP="esp"=82 +GRE="gre"=83 +IGRP="igrp"=84 +IPINIP="ipinip"=85 +NOS="nos"=86 +PCP="pcp"=87 +EXTENDED="extended"=88 +STANDARD="standard"=89 +OBJECT_GROUP="object-group"=90 +Whitespace=91 +HEX_CONST=92 +NEG_INT_CONST=93 +DIGIT=94 +HEXDIGIT=95 +PIPE_CHAR=96 +NUMBER_SIGN=97 +PERCENT=98 +AMPERSAND=99 +APOSTROPHE=100 +OPENING_PAREN=101 +CLOSING_PAREN=102 +STAR=103 +PLUS=104 +COMMA=105 +MINUS=106 +DOT=107 +SLASH=108 +COLON=109 +SEMICOLON=110 +LESS_THAN=111 +EQUALS=112 +GREATER_THAN=113 +QUESTION=114 +COMMERCIAL_AT=115 +OPENING_SQUARE=116 +CLOSING_SQUARE=117 +CARET=118 +UNDERLINE=119 +OPENING_BRACE=120 +CLOSING_BRACE=121 +TILDE=122 diff --git a/src/parsers/pix.g b/src/parsers/pix.g index 0e8c51424..b437bbd1d 100644 --- a/src/parsers/pix.g +++ b/src/parsers/pix.g @@ -67,7 +67,7 @@ options class PIXCfgParser extends Parser; options { - k = 2; + k = 3; // defaultErrorHandler=false; } { @@ -87,19 +87,13 @@ cfgfile : | hostname | - ip_commands + ip_access_list_ext + | + community_list_command + | + unknown_ip_command | intrface - | - vlan_interface - | - switchport - | - shutdown - | - sec_level - | - nameif | controller | @@ -129,8 +123,8 @@ cfgfile : //**************************************************************** -ip_commands : IP ( ip_access_list_ext | community_list_command | unknown_command ) - ; +// ip_commands : IP ( ip_access_list_ext | community_list_command | unknown_ip_command ) +// ; //**************************************************************** quit : QUIT @@ -140,7 +134,7 @@ quit : QUIT ; //**************************************************************** -community_list_command : COMMUNITY_LIST +community_list_command : IP COMMUNITY_LIST { consumeUntil(NEWLINE); } @@ -337,10 +331,11 @@ dst_port_spec : DESTINATION xoperator } ; -service_other : SERVICE n:WORD +service_other : SERVICE (ip:IP|n:WORD) { importer->setCurrentLineNumber(LT(0)->getLine()); - importer->protocol = LT(0)->getText(); + if (ip) importer->protocol = "ip"; + if (n) importer->protocol = n->getText(); importer->commitNamedIPServiceObject(); *dbg << "NAMED OBJECT SERVICE " << LT(0)->getText() << " "; } @@ -354,6 +349,13 @@ crypto : CRYPTO } ; +//**************************************************************** +unknown_ip_command : IP WORD + { + consumeUntil(NEWLINE); + } + ; + //**************************************************************** unknown_command : WORD { @@ -416,7 +418,7 @@ access_list_commands : ACCESS_LIST acl_num:INT_CONST //**************************************************************** -ip_access_list_ext : ACCESS_LIST name:WORD +ip_access_list_ext : IP ACCESS_LIST name:WORD { importer->setCurrentLineNumber(LT(0)->getLine()); importer->clear(); @@ -730,7 +732,9 @@ interface_parameters : switchport | shutdown - )+ + | + unsupported_interface_commands + ) ; vlan_interface : VLAN vlan_id:INT_CONST @@ -738,7 +742,43 @@ vlan_interface : VLAN vlan_id:INT_CONST importer->setInterfaceVlanId(vlan_id->getText()); *dbg << " VLAN: " << vlan_id->getText() << std::endl; } - NEWLINE + ; + +unsupported_interface_commands : + ( + SPEED + | + DUPLEX + | + DDNS + | + FORWARD + | + DELAY + | + HOLD_TIME + | + IGMP + | + IPV6 + | + MAC_ADDRESS + | + MULTICAST + | + OSPF + | + PIM + | + PPPOE + | + RIP + ) + { + *dbg << " UNSUPPORTED INTERFACE COMMAND: " + << LT(0)->getText() << std::endl; + consumeUntil(NEWLINE); + } ; sec_level : SEC_LEVEL sec_level:INT_CONST @@ -746,16 +786,31 @@ sec_level : SEC_LEVEL sec_level:INT_CONST importer->setInterfaceSecurityLevel(sec_level->getText()); *dbg << "SEC_LEVEL: " << sec_level->getText() << std::endl; } - NEWLINE ; -nameif : NAMEIF phys_intf:WORD (NEWLINE | intf_label:WORD sec_level:WORD NEWLINE) +// +// If there is a word after label, then there must be sec_level +// also. Otherwise there must be nothing. +// +// In case of pix6 configs, "nameif" is not really inside interface +// context but is rather located at the top level, the same level +// where "interface" line is found. Also, pix6 places all definitions +// of physical interfaces ("interface") first, then all nameif lines +// under them. Even though match for nameif is in the interface +// context in the grammar, function setInterfaceParametes() can locate +// right interface using its first parameter. +// +nameif : NAMEIF p_intf:WORD + ( + ( WORD ) => intf_label:WORD sec_level:WORD | + ( ) + ) { std::string label = (intf_label) ? intf_label->getText() : ""; std::string seclevel = (sec_level) ? sec_level->getText() : ""; - importer->setInterfaceParametes(phys_intf->getText(), label, seclevel); + importer->setInterfaceParametes(p_intf->getText(), label, seclevel); *dbg << " NAMEIF: " - << phys_intf->getText() << label << seclevel << std::endl; + << p_intf->getText() << label << seclevel << std::endl; } ; @@ -784,11 +839,6 @@ shutdown : SHUTDOWN } ; -interface_known_commands : - ( - intf_address - ) NEWLINE ; - // Interface IP address. // @@ -967,6 +1017,15 @@ tokens DESCRIPTION = "description"; REMARK = "remark"; SHUTDOWN = "shutdown"; + SPEED = "speed"; + DUPLEX = "duplex"; + DELAY = "delay"; + DDNS = "ddns"; + FORWARD = "forward"; + HOLD_TIME = "hold-time"; + IPV6 = "ipv6"; + MAC_ADDRESS = "mac-address"; + MULTICAST = "multicast"; VLAN = "vlan"; SWITCHPORT = "switchport"; @@ -999,17 +1058,18 @@ tokens DESTINATION = "destination"; SOURCE = "source"; -// AHP = "ahp"; -// EIGRP = "eigrp"; -// ESP = "esp"; -// GRE = "gre"; -// IGMP = "igmp"; -// IGRP = "igrp"; -// IPINIP = "ipinip"; -// NOS = "nos"; -// OSPF = "ospf"; -// PCP = "pcp"; -// PIM = "pim"; + AHP = "ahp"; + EIGRP = "eigrp"; + ESP = "esp"; + GRE = "gre"; + IGMP = "igmp"; + IGRP = "igrp"; + IPINIP = "ipinip"; + NOS = "nos"; + OSPF = "ospf"; + PCP = "pcp"; + PIM = "pim"; + RIP = "rip"; HOST = "host"; ANY = "any";