1
0
mirror of https://github.com/fwbuilder/fwbuilder synced 2026-03-23 03:37:15 +01:00

see #87 import of interfaces for pix6,7 and 8 works. PArsing inetrface name, label, security level, address

This commit is contained in:
Vadim Kurland 2011-02-25 16:43:25 -08:00
parent e799b24496
commit db4d501ece
22 changed files with 1131 additions and 397 deletions

View File

@ -259,11 +259,26 @@ void Importer::setDiscoveredVersion(const std::string &v)
void Importer::newInterface(const std::string &name)
{
if (all_interfaces.count(name)>0) return;
FWObject *nobj = createObject(fw, Interface::TYPENAME, name);
FWObject *nobj = createObject(getFirewallObject(), Interface::TYPENAME, name);
current_interface = Interface::cast(nobj);
current_interface->setUnnumbered(true);
all_interfaces[name] = current_interface;
*logger << "Interface: " + name + "\n";
*logger << "New interface: " + name + "\n";
}
void Importer::addAddressObjectToInterface(Interface*intf,
const string &addr,
const string &netm)
{
intf->setUnnumbered(false);
if (addr == "dhcp") intf->setDyn(true);
else
{
string aname = getFirewallObject()->getName() + ":" + intf->getName() + ":ip";
FWObject *nobj = createObject(intf, IPv4::TYPENAME, aname);
IPv4::cast(nobj)->setAddress( InetAddr(addr) );
IPv4::cast(nobj)->setNetmask( InetAddr(netm) );
}
}
void Importer::addInterfaceAddress(const std::string &a,
@ -271,20 +286,28 @@ void Importer::addInterfaceAddress(const std::string &a,
{
if (current_interface!=NULL)
{
std::string aname = getFirewallObject()->getName() + ":"
+ current_interface->getName() + ":ip";
FWObject *nobj = createObject(current_interface,
IPv4::TYPENAME,
aname);
current_interface->setUnnumbered(false);
IPv4::cast(nobj)->setAddress( InetAddr(a) );
IPv4::cast(nobj)->setNetmask( InetAddr(nm) );
addAddressObjectToInterface(current_interface, a, nm);
*logger << "Interface address: " + a + "/" + nm + "\n";
}
}
void Importer::addInterfaceComment(const std::string &descr)
void Importer::addInterfaceAddress(const std::string &label,
const std::string &a,
const std::string &nm)
{
map<const string,Interface*>::iterator it;
for (it=all_interfaces.begin(); it!=all_interfaces.end(); ++it)
{
Interface *intf = it->second;
if (intf->getLabel() == label)
{
addAddressObjectToInterface(intf, a, nm);
*logger << "Interface address: " + a + "/" + nm + "\n";
}
}
}
void Importer::setInterfaceComment(const std::string &descr)
{
// current_interface can be NULL if parser encountered command
// that looked like interface description but in reality was
@ -298,7 +321,7 @@ void Importer::addInterfaceComment(const std::string &descr)
}
}
void Importer::addInterfaceLabel(const std::string &descr)
void Importer::setInterfaceLabel(const std::string &descr)
{
if (current_interface!=NULL)
{
@ -307,6 +330,53 @@ void Importer::addInterfaceLabel(const std::string &descr)
}
}
void Importer::setInterfaceParametes(const std::string &phys_intf_or_label,
const std::string &label,
const std::string &sec_level)
{
*logger << "Interface parameters: " + phys_intf_or_label + " " + label + " " + sec_level + "\n";
if (all_interfaces.count(phys_intf_or_label))
{
// since first arg. is physical interface name, this must be pix6
// "nameif ethernet0 outside security0"
Interface *intf = all_interfaces[phys_intf_or_label];
intf->setLabel(label);
QRegExp pix6_sec_level("security(\\d+)");
if (pix6_sec_level.indexIn(sec_level.c_str()) > -1)
intf->setSecurityLevel(pix6_sec_level.cap(1).toInt());
} else
{
// since first arg is not physical interface name, it must be a label
// as in pix7 config
//
// interface Ethernet0.101
// vlan 101
// nameif outside
// security-level 0
// ip address 192.0.2.253 255.255.255.0
setInterfaceLabel(phys_intf_or_label);
}
}
void Importer::setInterfaceSecurityLevel(const std::string &seclevel)
{
if (current_interface!=NULL)
{
QString sl(seclevel.c_str());
current_interface->setSecurityLevel(sl.toInt());
}
}
void Importer::setInterfaceVlanId(const std::string &vlan_id)
{
if (current_interface!=NULL)
{
current_interface->setStr("type", "8021q");
FWOptions *ifopt = (Interface::cast(current_interface))->getOptionsObject();
ifopt->setStr("vlan_id", vlan_id);
}
}
void Importer::addRuleComment(const std::string &comm)
{
rule_comment += comm;

View File

@ -127,6 +127,9 @@ protected:
libfwbuilder::FWObject* createObject(libfwbuilder::FWObject *parent,
const std::string &objType,
const std::string &objName);
void addAddressObjectToInterface(libfwbuilder::Interface*intf,
const std::string &addr,
const std::string &netm);
std::string getBadRuleColor();
// this method returns fw. It is created if fw==NULL
@ -275,8 +278,17 @@ public:
virtual void clearCurrentInterface() { current_interface = NULL; }
virtual void addInterfaceAddress(const std::string &a,
const std::string &nm);
virtual void addInterfaceComment(const std::string &descr);
virtual void addInterfaceLabel(const std::string &descr);
virtual void addInterfaceAddress(const std::string &label,
const std::string &a,
const std::string &nm);
virtual void setInterfaceComment(const std::string &descr);
virtual void setInterfaceLabel(const std::string &descr);
virtual void setInterfaceSecurityLevel(const std::string &seclevel);
virtual void setInterfaceParametes(const std::string &phys_intf,
const std::string &label,
const std::string &sec_level);
virtual void setInterfaceVlanId(const std::string &vlan_id);
virtual void addRuleComment(const std::string &comm);
/**

View File

@ -1,4 +1,4 @@
/* $ANTLR 2.7.6 (20070910): "iosacl.g" -> "IOSCfgLexer.cpp"$ */
/* $ANTLR 2.7.7 (20090306): "iosacl.g" -> "IOSCfgLexer.cpp"$ */
#line 42 "iosacl.g"
// gets inserted before the antlr generated includes in the cpp
@ -51,37 +51,37 @@ void IOSCfgLexer::initLiterals()
literals["access-list"] = 14;
literals["interface"] = 37;
literals["remark"] = 39;
literals["fragments"] = 33;
literals["certificate"] = 9;
literals["exit"] = 44;
literals["udp"] = 21;
literals["tcp"] = 20;
literals["controller"] = 36;
literals["eq"] = 22;
literals["ip"] = 5;
literals["access-group"] = 41;
literals["time-range"] = 34;
literals["version"] = 10;
literals["community-list"] = 7;
literals["icmp"] = 19;
literals["description"] = 38;
literals["permit"] = 17;
literals["lt"] = 24;
literals["standard"] = 46;
literals["log-input"] = 31;
literals["range"] = 26;
literals["gt"] = 23;
literals["secondary"] = 43;
literals["lt"] = 24;
literals["range"] = 26;
literals["log-input"] = 31;
literals["standard"] = 46;
literals["gt"] = 23;
literals["permit"] = 17;
literals["extended"] = 16;
literals["address"] = 42;
literals["established"] = 32;
literals["community-list"] = 7;
literals["neq"] = 25;
literals["quit"] = 6;
literals["vlan"] = 35;
literals["time-range"] = 34;
literals["any"] = 29;
literals["deny"] = 18;
literals["access-group"] = 41;
literals["shutdown"] = 40;
literals["hostname"] = 12;
literals["controller"] = 36;
literals["certificate"] = 9;
literals["fragments"] = 33;
}
ANTLR_USE_NAMESPACE(antlr)RefToken IOSCfgLexer::nextToken()

View File

@ -8,7 +8,7 @@
#line 10 "IOSCfgLexer.hpp"
#include <antlr/config.hpp>
/* $ANTLR 2.7.6 (20070910): "iosacl.g" -> "IOSCfgLexer.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iosacl.g" -> "IOSCfgLexer.hpp"$ */
#include <antlr/CommonToken.hpp>
#include <antlr/InputBuffer.hpp>
#include <antlr/BitSet.hpp>

View File

@ -1,4 +1,4 @@
/* $ANTLR 2.7.6 (20070910): "iosacl.g" -> "IOSCfgParser.cpp"$ */
/* $ANTLR 2.7.7 (20090306): "iosacl.g" -> "IOSCfgParser.cpp"$ */
#line 42 "iosacl.g"
// gets inserted before the antlr generated includes in the cpp
@ -444,7 +444,7 @@ void IOSCfgParser::description() {
descr += LT(1)->getText() + " ";
consume();
}
importer->addInterfaceComment( descr );
importer->setInterfaceComment( descr );
*dbg << " DESCRIPTION " << descr << std::endl;
//consumeUntil(NEWLINE);

View File

@ -8,7 +8,7 @@
#line 10 "IOSCfgParser.hpp"
#include <antlr/config.hpp>
/* $ANTLR 2.7.6 (20070910): "iosacl.g" -> "IOSCfgParser.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iosacl.g" -> "IOSCfgParser.hpp"$ */
#include <antlr/TokenStream.hpp>
#include <antlr/TokenBuffer.hpp>
#include "IOSCfgParserTokenTypes.hpp"

View File

@ -1,7 +1,7 @@
#ifndef INC_IOSCfgParserTokenTypes_hpp_
#define INC_IOSCfgParserTokenTypes_hpp_
/* $ANTLR 2.7.6 (20070910): "iosacl.g" -> "IOSCfgParserTokenTypes.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iosacl.g" -> "IOSCfgParserTokenTypes.hpp"$ */
#ifndef CUSTOM_API
# define CUSTOM_API

View File

@ -0,0 +1,77 @@
// $ANTLR 2.7.7 (20090306): iosacl.g -> IOSCfgParserTokenTypes.txt$
IOSCfgParser // output token vocab name
NEWLINE=4
IP="ip"=5
QUIT="quit"=6
COMMUNITY_LIST="community-list"=7
WORD=8
CERTIFICATE="certificate"=9
IOSVERSION="version"=10
NUMBER=11
HOSTNAME="hostname"=12
STRING=13
ACCESS_LIST="access-list"=14
INT_CONST=15
EXTENDED="extended"=16
PERMIT="permit"=17
DENY="deny"=18
ICMP="icmp"=19
TCP="tcp"=20
UDP="udp"=21
P_EQ="eq"=22
P_GT="gt"=23
P_LT="lt"=24
P_NEQ="neq"=25
P_RANGE="range"=26
HOST="host"=27
IPV4=28
ANY="any"=29
LOG="log"=30
LOG_INPUT="log-input"=31
ESTABLISHED="established"=32
FRAGMENTS="fragments"=33
TIME_RANGE="time-range"=34
VLAN="vlan"=35
CONTROLLER="controller"=36
INTRFACE="interface"=37
DESCRIPTION="description"=38
REMARK="remark"=39
SHUTDOWN="shutdown"=40
ACCESS_GROUP="access-group"=41
ADDRESS="address"=42
SECONDARY="secondary"=43
EXIT="exit"=44
LINE_COMMENT=45
STANDARD="standard"=46
Whitespace=47
HEX_CONST=48
NEG_INT_CONST=49
DIGIT=50
HEXDIGIT=51
PIPE_CHAR=52
NUMBER_SIGN=53
PERCENT=54
AMPERSAND=55
APOSTROPHE=56
OPENING_PAREN=57
CLOSING_PAREN=58
STAR=59
PLUS=60
COMMA=61
MINUS=62
DOT=63
SLASH=64
COLON=65
SEMICOLON=66
LESS_THAN=67
EQUALS=68
GREATER_THAN=69
QUESTION=70
COMMERCIAL_AT=71
OPENING_SQUARE=72
CLOSING_SQUARE=73
CARET=74
UNDERLINE=75
OPENING_BRACE=76
CLOSING_BRACE=77
TILDE=78

View File

@ -1,4 +1,4 @@
/* $ANTLR 2.7.7 (20100319): "iptables.g" -> "IPTCfgLexer.cpp"$ */
/* $ANTLR 2.7.7 (20090306): "iptables.g" -> "IPTCfgLexer.cpp"$ */
#line 42 "iptables.g"
// gets inserted before the antlr generated includes in the cpp

View File

@ -8,7 +8,7 @@
#line 10 "IPTCfgLexer.hpp"
#include <antlr/config.hpp>
/* $ANTLR 2.7.7 (20100319): "iptables.g" -> "IPTCfgLexer.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iptables.g" -> "IPTCfgLexer.hpp"$ */
#include <antlr/CommonToken.hpp>
#include <antlr/InputBuffer.hpp>
#include <antlr/BitSet.hpp>

View File

@ -1,4 +1,4 @@
/* $ANTLR 2.7.7 (20100319): "iptables.g" -> "IPTCfgParser.cpp"$ */
/* $ANTLR 2.7.7 (20090306): "iptables.g" -> "IPTCfgParser.cpp"$ */
#line 42 "iptables.g"
// gets inserted before the antlr generated includes in the cpp

View File

@ -8,7 +8,7 @@
#line 10 "IPTCfgParser.hpp"
#include <antlr/config.hpp>
/* $ANTLR 2.7.7 (20100319): "iptables.g" -> "IPTCfgParser.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iptables.g" -> "IPTCfgParser.hpp"$ */
#include <antlr/TokenStream.hpp>
#include <antlr/TokenBuffer.hpp>
#include "IPTCfgParserTokenTypes.hpp"

View File

@ -1,7 +1,7 @@
#ifndef INC_IPTCfgParserTokenTypes_hpp_
#define INC_IPTCfgParserTokenTypes_hpp_
/* $ANTLR 2.7.7 (20100319): "iptables.g" -> "IPTCfgParserTokenTypes.hpp"$ */
/* $ANTLR 2.7.7 (20090306): "iptables.g" -> "IPTCfgParserTokenTypes.hpp"$ */
#ifndef CUSTOM_API
# define CUSTOM_API

View File

@ -0,0 +1,142 @@
// $ANTLR 2.7.7 (20090306): iptables.g -> IPTCfgParserTokenTypes.txt$
IPTCfgParser // output token vocab name
NEWLINE=4
LINE_COMMENT=5
COMMIT="COMMIT"=6
STAR=7
WORD=8
INPUT="INPUT"=9
FORWARD="FORWARD"=10
OUTPUT="OUTPUT"=11
PREROUTING="PREROUTING"=12
POSTROUTING="POSTROUTING"=13
COLON=14
MINUS=15
OPENING_SQUARE=16
INT_CONST=17
CLOSING_SQUARE=18
ADD_RULE=19
UNSUPPORTED_OPTION=20
DIGIT=21
SLASH=22
OPT_MODULE=23
OPT_SRC=24
EXCLAMATION=25
IPV4=26
OPT_DST=27
OPT_IN_INTF=28
OPT_OUT_INTF=29
TCP="tcp"=30
UDP="udp"=31
ICMP="icmp"=32
OPT_PROTO=33
OPT_TARGET=34
REJECT_WITH=35
LOG_PREFIX=36
STRING=37
LOG_TCP_SEQ=38
LOG_TCP_OPT=39
LOG_IP_OPT=40
ULOG_PREFIX=41
LOG_LEVEL=42
SET_MARK=43
HEX_CONST=44
SET_TOS=45
SAVE_MARK=46
RESTORE_MARK=47
CONTINUE=48
ROUTE_IIF=49
ROUTE_OIF=50
ROUTE_GW=51
ROUTE_TEE=52
TO_SOURCE=53
TO_DESTINATION=54
TO_PORTS=55
TO_NETMAP=56
CLAMP_MSS=57
OPT_FRAGM=58
INVALID="INVALID"=59
NEW="NEW"=60
ESTABLISHED="ESTABLISHED"=61
RELATED="RELATED"=62
M_STATE="state"=63
MATCH_STATE=64
COMMA=65
M_MARK="mark"=66
MATCH_MARK=67
M_LIMIT="limit"=68
MATCH_LIMIT=69
MATCH_LIMIT_BURST=70
M_RECENT="recent"=71
M_IPRANGE="iprange"=72
MATCH_IPRANGE_SRC=73
MATCH_IPRANGE_DST=74
MATCH_RECENT_SET=75
MATCH_RECENT_RCHECK=76
MATCH_RECENT_UPDATE=77
MATCH_RECENT_REMOVE=78
MATCH_RECENT_RTTL=79
RSOURCE=80
MATCH_RECENT_RDEST=81
MATCH_RECENT_NAME=82
MATCH_RECENT_SECONDS=83
MATCH_RECENT_HITCOUNT=84
M_LENGTH="length"=85
MATCH_LENGTH=86
M_PKTTYPE="pkttype"=87
MATCH_PKT_TYPE=88
WORD_BROADCAST="broadcast"=89
WORD_MULTICAST="multicast"=90
WORD_UNICAST="unicast"=91
M_MPORT="multiport"=92
M_COMMENT="comment"=93
MATCH_COMMENT=94
MATCH_SRC_MULTIPORT=95
MATCH_DST_MULTIPORT=96
MATCH_BOTH_MULTIPORT=97
MATCH_ICMP_TYPE=98
MATCH_SRC_PORT=99
MATCH_SRC_PORT_SHORT=100
MATCH_DST_PORT=101
MATCH_DST_PORT_SHORT=102
MATCH_SYN=103
SYN="SYN"=104
ACK="ACK"=105
FIN="FIN"=106
RST="RST"=107
URG="URG"=108
PSH="PSH"=109
ALL="ALL"=110
NONE="NONE"=111
MATCH_TCP_FLAGS=112
MATCH_TCP_OPTION=113
Whitespace=114
IPV6=115
MAC_ADDRESS=116
NEG_INT_CONST=117
HEXDIGIT=118
NUM_3DIGIT=119
NUM_HEX_4DIGIT=120
NUMBER=121
ULOG_QTHR=122
ULOG_NLG=123
ULOG_CPR=124
NUMBER_SIGN=125
PERCENT=126
AMPERSAND=127
APOSTROPHE=128
OPENING_PAREN=129
CLOSING_PAREN=130
PLUS=131
DOT=132
SEMICOLON=133
LESS_THAN=134
EQUALS=135
GREATER_THAN=136
QUESTION=137
COMMERCIAL_AT=138
CARET=139
UNDERLINE=140
OPENING_BRACE=141
CLOSING_BRACE=142
TILDE=143

View File

@ -47,42 +47,45 @@ PIXCfgLexer::PIXCfgLexer(const ANTLR_USE_NAMESPACE(antlr)LexerSharedInputState&
void PIXCfgLexer::initLiterals()
{
literals["host"] = 28;
literals["setroute"] = 46;
literals["log"] = 31;
literals["access-list"] = 16;
literals["interface"] = 37;
literals["remark"] = 40;
literals["remark"] = 42;
literals["certificate"] = 9;
literals["exit"] = 48;
literals["exit"] = 51;
literals["udp"] = 22;
literals["tcp"] = 21;
literals["controller"] = 36;
literals["eq"] = 23;
literals["ip"] = 5;
literals["access-group"] = 47;
literals["access-group"] = 50;
literals["time-range"] = 35;
literals["community-list"] = 7;
literals["icmp"] = 20;
literals["description"] = 39;
literals["description"] = 41;
literals["Version"] = 12;
literals["nameif"] = 38;
literals["secondary"] = 43;
literals["access"] = 45;
literals["nameif"] = 40;
literals["security-level"] = 39;
literals["secondary"] = 47;
literals["access"] = 49;
literals["lt"] = 25;
literals["range"] = 27;
literals["switchport"] = 44;
literals["switchport"] = 48;
literals["log-input"] = 32;
literals["standard"] = 52;
literals["standard"] = 55;
literals["gt"] = 24;
literals["permit"] = 18;
literals["extended"] = 51;
literals["address"] = 42;
literals["extended"] = 54;
literals["address"] = 44;
literals["established"] = 33;
literals["dhcp"] = 45;
literals["neq"] = 26;
literals["quit"] = 6;
literals["vlan"] = 46;
literals["vlan"] = 38;
literals["any"] = 30;
literals["deny"] = 19;
literals["shutdown"] = 41;
literals["shutdown"] = 43;
literals["hostname"] = 14;
literals["PIX"] = 10;
literals["ASA"] = 11;
@ -403,11 +406,11 @@ void PIXCfgLexer::mLINE_COMMENT(bool _createToken) {
}
}
else {
goto _loop78;
goto _loop89;
}
}
_loop78:;
_loop89:;
} // ( ... )*
mNEWLINE(false);
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@ -439,9 +442,9 @@ void PIXCfgLexer::mNEWLINE(bool _createToken) {
}
if ( inputState->guessing==0 ) {
#line 655 "pix.g"
#line 763 "pix.g"
newline();
#line 445 "PIXCfgLexer.cpp"
#line 448 "PIXCfgLexer.cpp"
}
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@ -465,11 +468,11 @@ void PIXCfgLexer::mCOLON_COMMENT(bool _createToken) {
}
}
else {
goto _loop82;
goto _loop93;
}
}
_loop82:;
_loop93:;
} // ( ... )*
mNEWLINE(false);
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@ -563,9 +566,9 @@ void PIXCfgLexer::mWhitespace(bool _createToken) {
}
}
if ( inputState->guessing==0 ) {
#line 650 "pix.g"
#line 758 "pix.g"
_ttype = ANTLR_USE_NAMESPACE(antlr)Token::SKIP;
#line 569 "PIXCfgLexer.cpp"
#line 572 "PIXCfgLexer.cpp"
}
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@ -677,208 +680,208 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
ANTLR_USE_NAMESPACE(std)string::size_type _saveIndex;
{
bool synPredMatched101 = false;
bool synPredMatched112 = 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 _m101 = mark();
synPredMatched101 = true;
int _m112 = mark();
synPredMatched112 = true;
inputState->guessing++;
try {
{
{ // ( ... )+
int _cnt96=0;
int _cnt107=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt96>=1 ) { goto _loop96; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt107>=1 ) { goto _loop107; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt96++;
_cnt107++;
}
_loop96:;
_loop107:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt98=0;
int _cnt109=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt98>=1 ) { goto _loop98; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt109>=1 ) { goto _loop109; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt98++;
_cnt109++;
}
_loop98:;
_loop109:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt100=0;
int _cnt111=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt100>=1 ) { goto _loop100; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt111>=1 ) { goto _loop111; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt100++;
_cnt111++;
}
_loop100:;
_loop111:;
} // ( ... )+
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched101 = false;
synPredMatched112 = false;
}
rewind(_m101);
rewind(_m112);
inputState->guessing--;
}
if ( synPredMatched101 ) {
if ( synPredMatched112 ) {
{
{ // ( ... )+
int _cnt104=0;
int _cnt115=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt104>=1 ) { goto _loop104; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt115>=1 ) { goto _loop115; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt104++;
_cnt115++;
}
_loop104:;
_loop115:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt106=0;
int _cnt117=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt106>=1 ) { goto _loop106; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt117>=1 ) { goto _loop117; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt106++;
_cnt117++;
}
_loop106:;
_loop117:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt108=0;
int _cnt119=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt108>=1 ) { goto _loop108; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt119>=1 ) { goto _loop119; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt108++;
_cnt119++;
}
_loop108:;
_loop119:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt110=0;
int _cnt121=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt110>=1 ) { goto _loop110; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt121>=1 ) { goto _loop121; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt110++;
_cnt121++;
}
_loop110:;
_loop121:;
} // ( ... )+
}
if ( inputState->guessing==0 ) {
#line 675 "pix.g"
#line 783 "pix.g"
_ttype = IPV4;
#line 805 "PIXCfgLexer.cpp"
#line 808 "PIXCfgLexer.cpp"
}
}
else {
bool synPredMatched116 = false;
bool synPredMatched127 = 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 _m116 = mark();
synPredMatched116 = true;
int _m127 = mark();
synPredMatched127 = true;
inputState->guessing++;
try {
{
{ // ( ... )+
int _cnt113=0;
int _cnt124=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt113>=1 ) { goto _loop113; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt124>=1 ) { goto _loop124; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt113++;
_cnt124++;
}
_loop113:;
_loop124:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt115=0;
int _cnt126=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt115>=1 ) { goto _loop115; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt126>=1 ) { goto _loop126; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt115++;
_cnt126++;
}
_loop115:;
_loop126:;
} // ( ... )+
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& pe) {
synPredMatched116 = false;
synPredMatched127 = false;
}
rewind(_m116);
rewind(_m127);
inputState->guessing--;
}
if ( synPredMatched116 ) {
if ( synPredMatched127 ) {
{
{ // ( ... )+
int _cnt119=0;
int _cnt130=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt119>=1 ) { goto _loop119; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt130>=1 ) { goto _loop130; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt119++;
_cnt130++;
}
_loop119:;
_loop130:;
} // ( ... )+
mDOT(false);
{ // ( ... )+
int _cnt121=0;
int _cnt132=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt121>=1 ) { goto _loop121; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt132>=1 ) { goto _loop132; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt121++;
_cnt132++;
}
_loop121:;
_loop132:;
} // ( ... )+
}
}
@ -887,45 +890,45 @@ void PIXCfgLexer::mNUMBER(bool _createToken) {
match('0' /* charlit */ );
match('x' /* charlit */ );
{ // ( ... )+
int _cnt126=0;
int _cnt137=0;
for (;;) {
if ((_tokenSet_3.member(LA(1)))) {
mHEXDIGIT(false);
}
else {
if ( _cnt126>=1 ) { goto _loop126; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt137>=1 ) { goto _loop137; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt126++;
_cnt137++;
}
_loop126:;
_loop137:;
} // ( ... )+
}
if ( inputState->guessing==0 ) {
#line 681 "pix.g"
#line 789 "pix.g"
_ttype = HEX_CONST;
#line 908 "PIXCfgLexer.cpp"
#line 911 "PIXCfgLexer.cpp"
}
}
else if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ )) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true) && (true)) {
{ // ( ... )+
int _cnt123=0;
int _cnt134=0;
for (;;) {
if (((LA(1) >= 0x30 /* '0' */ && LA(1) <= 0x39 /* '9' */ ))) {
mDIGIT(false);
}
else {
if ( _cnt123>=1 ) { goto _loop123; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
if ( _cnt134>=1 ) { goto _loop134; } else {throw ANTLR_USE_NAMESPACE(antlr)NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());}
}
_cnt123++;
_cnt134++;
}
_loop123:;
_loop134:;
} // ( ... )+
if ( inputState->guessing==0 ) {
#line 679 "pix.g"
#line 787 "pix.g"
_ttype = INT_CONST;
#line 929 "PIXCfgLexer.cpp"
#line 932 "PIXCfgLexer.cpp"
}
}
else {
@ -1186,11 +1189,11 @@ void PIXCfgLexer::mWORD(bool _createToken) {
}
default:
{
goto _loop130;
goto _loop141;
}
}
}
_loop130:;
_loop141:;
} // ( ... )*
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
_token = makeToken(_ttype);
@ -1212,11 +1215,11 @@ void PIXCfgLexer::mSTRING(bool _createToken) {
matchNot('\"' /* charlit */ );
}
else {
goto _loop133;
goto _loop144;
}
}
_loop133:;
_loop144:;
} // ( ... )*
match('\"' /* charlit */ );
if ( _createToken && _token==ANTLR_USE_NAMESPACE(antlr)nullToken && _ttype!=ANTLR_USE_NAMESPACE(antlr)Token::SKIP ) {
@ -1586,7 +1589,7 @@ 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
// H I J K L M N O P Q R S T U V W
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
@ -1598,6 +1601,6 @@ 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
// G H I J K L M N O P Q R S T U V W
const ANTLR_USE_NAMESPACE(antlr)BitSet PIXCfgLexer::_tokenSet_4(_tokenSet_4_data_,16);

View File

@ -47,6 +47,7 @@ PIXCfgParser::PIXCfgParser(const ANTLR_USE_NAMESPACE(antlr)ParserSharedInputStat
}
void PIXCfgParser::cfgfile() {
Tracer traceInOut(this, "cfgfile");
try { // for error handling
{ // ( ... )+
@ -80,6 +81,21 @@ void PIXCfgParser::cfgfile() {
intrface();
break;
}
case VLAN:
{
vlan_interface();
break;
}
case SEC_LEVEL:
{
sec_level();
break;
}
case NAMEIF:
{
nameif();
break;
}
case CONTROLLER:
{
controller();
@ -146,6 +162,7 @@ void PIXCfgParser::cfgfile() {
}
void PIXCfgParser::comment() {
Tracer traceInOut(this, "comment");
try { // for error handling
{
@ -178,6 +195,7 @@ void PIXCfgParser::comment() {
}
void PIXCfgParser::version() {
Tracer traceInOut(this, "version");
try { // for error handling
{
@ -201,13 +219,13 @@ void PIXCfgParser::version() {
match(VERSION_WORD);
match(NUMBER);
if ( inputState->guessing==0 ) {
#line 150 "pix.g"
#line 156 "pix.g"
importer->setDiscoveredVersion(LT(0)->getText());
*dbg << "VERSION " << LT(0)->getText() << std::endl;
consumeUntil(NEWLINE);
#line 211 "PIXCfgParser.cpp"
#line 229 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -221,6 +239,7 @@ void PIXCfgParser::version() {
}
void PIXCfgParser::hostname() {
Tracer traceInOut(this, "hostname");
try { // for error handling
match(HOSTNAME);
@ -243,14 +262,14 @@ void PIXCfgParser::hostname() {
}
}
if ( inputState->guessing==0 ) {
#line 159 "pix.g"
#line 165 "pix.g"
importer->setHostName( LT(0)->getText() );
*dbg << "HOSTNAME "
<< "LT0=" << LT(0)->getText()
<< std::endl;
#line 254 "PIXCfgParser.cpp"
#line 273 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -264,6 +283,7 @@ void PIXCfgParser::hostname() {
}
void PIXCfgParser::ip_commands() {
Tracer traceInOut(this, "ip_commands");
try { // for error handling
match(IP);
@ -309,6 +329,7 @@ void PIXCfgParser::ip_commands() {
}
void PIXCfgParser::intrface() {
Tracer traceInOut(this, "intrface");
ANTLR_USE_NAMESPACE(antlr)RefToken in = ANTLR_USE_NAMESPACE(antlr)nullToken;
try { // for error handling
@ -316,13 +337,41 @@ void PIXCfgParser::intrface() {
in = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 420 "pix.g"
#line 463 "pix.g"
importer->newInterface( in->getText() );
*dbg << in->getLine() << ":"
<< " INTRFACE: " << in->getText() << std::endl;
consumeUntil(NEWLINE);
#line 326 "PIXCfgParser.cpp"
#line 348 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
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 472 "pix.g"
importer->setInterfaceVlanId(vlan_id->getText());
*dbg << " VLAN: " << vlan_id->getText() << std::endl;
#line 375 "PIXCfgParser.cpp"
}
match(NEWLINE);
}
@ -336,17 +385,100 @@ void PIXCfgParser::intrface() {
}
}
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 480 "pix.g"
importer->setInterfaceSecurityLevel(sec_level->getText());
*dbg << "SEC_LEVEL: " << sec_level->getText() << std::endl;
#line 403 "PIXCfgParser.cpp"
}
match(NEWLINE);
}
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 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 488 "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 458 "PIXCfgParser.cpp"
}
}
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 411 "pix.g"
#line 417 "pix.g"
importer->clearCurrentInterface();
consumeUntil(NEWLINE);
#line 350 "PIXCfgParser.cpp"
#line 482 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -360,6 +492,7 @@ void PIXCfgParser::controller() {
}
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
@ -367,13 +500,13 @@ void PIXCfgParser::access_list_commands() {
acl_num = LT(1);
match(INT_CONST);
if ( inputState->guessing==0 ) {
#line 174 "pix.g"
#line 180 "pix.g"
importer->newUnidirRuleSet( std::string("acl_") + acl_num->getText() );
*dbg << acl_num->getLine() << ":"
<< " ACL #" << acl_num->getText() << " ";
#line 377 "PIXCfgParser.cpp"
#line 510 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -410,6 +543,7 @@ void PIXCfgParser::access_list_commands() {
}
void PIXCfgParser::exit() {
Tracer traceInOut(this, "exit");
try { // for error handling
match(EXIT);
@ -425,11 +559,12 @@ void PIXCfgParser::exit() {
}
void PIXCfgParser::description() {
Tracer traceInOut(this, "description");
try { // for error handling
match(DESCRIPTION);
if ( inputState->guessing==0 ) {
#line 440 "pix.g"
#line 500 "pix.g"
*dbg << LT(1)->getLine() << ":";
std::string descr;
@ -438,11 +573,11 @@ void PIXCfgParser::description() {
descr += LT(1)->getText() + " ";
consume();
}
importer->addInterfaceComment( descr );
importer->setInterfaceComment( descr );
*dbg << " DESCRIPTION " << descr << std::endl;
//consumeUntil(NEWLINE);
#line 446 "PIXCfgParser.cpp"
#line 581 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -456,16 +591,17 @@ void PIXCfgParser::description() {
}
void PIXCfgParser::shutdown() {
Tracer traceInOut(this, "shutdown");
try { // for error handling
match(SHUTDOWN);
if ( inputState->guessing==0 ) {
#line 475 "pix.g"
#line 535 "pix.g"
*dbg<< LT(1)->getLine() << ":"
<< " INTERFACE SHUTDOWN " << std::endl;
#line 469 "PIXCfgParser.cpp"
#line 605 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -479,17 +615,18 @@ void PIXCfgParser::shutdown() {
}
void PIXCfgParser::certificate() {
Tracer traceInOut(this, "certificate");
try { // for error handling
match(CERTIFICATE);
match(WORD);
if ( inputState->guessing==0 ) {
#line 142 "pix.g"
#line 148 "pix.g"
consumeUntil(NEWLINE);
consumeUntil(QUIT);
#line 493 "PIXCfgParser.cpp"
#line 630 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -503,15 +640,16 @@ void PIXCfgParser::certificate() {
}
void PIXCfgParser::quit() {
Tracer traceInOut(this, "quit");
try { // for error handling
match(QUIT);
if ( inputState->guessing==0 ) {
#line 121 "pix.g"
#line 127 "pix.g"
consumeUntil(NEWLINE);
#line 515 "PIXCfgParser.cpp"
#line 653 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -525,15 +663,16 @@ void PIXCfgParser::quit() {
}
void PIXCfgParser::unknown_command() {
Tracer traceInOut(this, "unknown_command");
try { // for error handling
match(WORD);
if ( inputState->guessing==0 ) {
#line 135 "pix.g"
#line 141 "pix.g"
consumeUntil(NEWLINE);
#line 537 "PIXCfgParser.cpp"
#line 676 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -547,6 +686,7 @@ 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
@ -554,13 +694,13 @@ void PIXCfgParser::ip_access_list_ext() {
name = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 191 "pix.g"
#line 197 "pix.g"
importer->newUnidirRuleSet( name->getText() );
*dbg << name->getLine() << ":"
<< " ACL ext " << name->getText() << std::endl;
#line 564 "PIXCfgParser.cpp"
#line 704 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -597,12 +737,12 @@ void PIXCfgParser::ip_access_list_ext() {
}
}
if ( inputState->guessing==0 ) {
#line 207 "pix.g"
#line 213 "pix.g"
*dbg << LT(0)->getLine() << ":"
<< " ACL line end" << std::endl << std::endl;
#line 606 "PIXCfgParser.cpp"
#line 746 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -616,6 +756,7 @@ void PIXCfgParser::ip_access_list_ext() {
}
void PIXCfgParser::interface_known_commands() {
Tracer traceInOut(this, "interface_known_commands");
try { // for error handling
{
@ -654,15 +795,16 @@ void PIXCfgParser::interface_known_commands() {
}
void PIXCfgParser::community_list_command() {
Tracer traceInOut(this, "community_list_command");
try { // for error handling
match(COMMUNITY_LIST);
if ( inputState->guessing==0 ) {
#line 128 "pix.g"
#line 134 "pix.g"
consumeUntil(NEWLINE);
#line 666 "PIXCfgParser.cpp"
#line 808 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -676,26 +818,27 @@ void PIXCfgParser::community_list_command() {
}
void PIXCfgParser::permit_ext() {
Tracer traceInOut(this, "permit_ext");
try { // for error handling
match(PERMIT);
if ( inputState->guessing==0 ) {
#line 215 "pix.g"
#line 221 "pix.g"
importer->newPolicyRule();
importer->action = "permit";
*dbg << LT(1)->getLine() << ":" << " permit ";
#line 690 "PIXCfgParser.cpp"
#line 833 "PIXCfgParser.cpp"
}
rule_ext();
match(NEWLINE);
if ( inputState->guessing==0 ) {
#line 221 "pix.g"
#line 227 "pix.g"
importer->pushRule();
#line 699 "PIXCfgParser.cpp"
#line 842 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -709,26 +852,27 @@ void PIXCfgParser::permit_ext() {
}
void PIXCfgParser::deny_ext() {
Tracer traceInOut(this, "deny_ext");
try { // for error handling
match(DENY);
if ( inputState->guessing==0 ) {
#line 227 "pix.g"
#line 233 "pix.g"
importer->newPolicyRule();
importer->action = "deny";
*dbg << LT(1)->getLine() << ":" << " deny ";
#line 723 "PIXCfgParser.cpp"
#line 867 "PIXCfgParser.cpp"
}
rule_ext();
match(NEWLINE);
if ( inputState->guessing==0 ) {
#line 233 "pix.g"
#line 239 "pix.g"
importer->pushRule();
#line 732 "PIXCfgParser.cpp"
#line 876 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -742,11 +886,12 @@ void PIXCfgParser::deny_ext() {
}
void PIXCfgParser::remark() {
Tracer traceInOut(this, "remark");
try { // for error handling
match(REMARK);
if ( inputState->guessing==0 ) {
#line 460 "pix.g"
#line 520 "pix.g"
*dbg << LT(1)->getLine() << ":";
std::string rem;
@ -759,7 +904,7 @@ void PIXCfgParser::remark() {
*dbg << " REMARK " << rem << std::endl;
//consumeUntil(NEWLINE);
#line 763 "PIXCfgParser.cpp"
#line 908 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -773,6 +918,7 @@ void PIXCfgParser::remark() {
}
void PIXCfgParser::rule_ext() {
Tracer traceInOut(this, "rule_ext");
try { // for error handling
{
@ -783,15 +929,15 @@ void PIXCfgParser::rule_ext() {
ip_protocols();
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 243 "pix.g"
#line 249 "pix.g"
importer->SaveTmpAddrToSrc(); *dbg << "(src) ";
#line 789 "PIXCfgParser.cpp"
#line 935 "PIXCfgParser.cpp"
}
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 244 "pix.g"
#line 250 "pix.g"
importer->SaveTmpAddrToDst(); *dbg << "(dst) ";
#line 795 "PIXCfgParser.cpp"
#line 941 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -856,24 +1002,24 @@ void PIXCfgParser::rule_ext() {
{
match(ICMP);
if ( inputState->guessing==0 ) {
#line 250 "pix.g"
#line 256 "pix.g"
importer->protocol = LT(0)->getText();
*dbg << "protocol " << LT(0)->getText() << " ";
#line 865 "PIXCfgParser.cpp"
#line 1011 "PIXCfgParser.cpp"
}
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 254 "pix.g"
#line 260 "pix.g"
importer->SaveTmpAddrToSrc(); *dbg << "(src) ";
#line 871 "PIXCfgParser.cpp"
#line 1017 "PIXCfgParser.cpp"
}
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 255 "pix.g"
#line 261 "pix.g"
importer->SaveTmpAddrToDst(); *dbg << "(dst) ";
#line 877 "PIXCfgParser.cpp"
#line 1023 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -978,18 +1124,18 @@ void PIXCfgParser::rule_ext() {
}
}
if ( inputState->guessing==0 ) {
#line 262 "pix.g"
#line 268 "pix.g"
importer->protocol = LT(0)->getText();
*dbg << "protocol " << LT(0)->getText() << " ";
#line 987 "PIXCfgParser.cpp"
#line 1133 "PIXCfgParser.cpp"
}
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 266 "pix.g"
#line 272 "pix.g"
importer->SaveTmpAddrToSrc(); *dbg << "(src) ";
#line 993 "PIXCfgParser.cpp"
#line 1139 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -1001,9 +1147,9 @@ void PIXCfgParser::rule_ext() {
{
xoperator();
if ( inputState->guessing==0 ) {
#line 267 "pix.g"
#line 273 "pix.g"
importer->SaveTmpPortToSrc();
#line 1007 "PIXCfgParser.cpp"
#line 1153 "PIXCfgParser.cpp"
}
break;
}
@ -1021,9 +1167,9 @@ void PIXCfgParser::rule_ext() {
}
hostaddr_ext();
if ( inputState->guessing==0 ) {
#line 268 "pix.g"
#line 274 "pix.g"
importer->SaveTmpAddrToDst(); *dbg << "(dst) ";
#line 1027 "PIXCfgParser.cpp"
#line 1173 "PIXCfgParser.cpp"
}
{
switch ( LA(1)) {
@ -1035,9 +1181,9 @@ void PIXCfgParser::rule_ext() {
{
xoperator();
if ( inputState->guessing==0 ) {
#line 269 "pix.g"
#line 275 "pix.g"
importer->SaveTmpPortToDst();
#line 1041 "PIXCfgParser.cpp"
#line 1187 "PIXCfgParser.cpp"
}
break;
}
@ -1143,11 +1289,11 @@ void PIXCfgParser::rule_ext() {
}
}
if ( inputState->guessing==0 ) {
#line 275 "pix.g"
#line 281 "pix.g"
*dbg << std::endl;
#line 1151 "PIXCfgParser.cpp"
#line 1297 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1161,6 +1307,7 @@ void PIXCfgParser::rule_ext() {
}
void PIXCfgParser::ip_protocols() {
Tracer traceInOut(this, "ip_protocols");
try { // for error handling
{
@ -1182,12 +1329,12 @@ void PIXCfgParser::ip_protocols() {
}
}
if ( inputState->guessing==0 ) {
#line 283 "pix.g"
#line 289 "pix.g"
importer->protocol = LT(0)->getText();
*dbg << "protocol " << LT(0)->getText() << " ";
#line 1191 "PIXCfgParser.cpp"
#line 1338 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1201,6 +1348,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;
@ -1215,13 +1363,13 @@ void PIXCfgParser::hostaddr_ext() {
match(IPV4);
}
if ( inputState->guessing==0 ) {
#line 335 "pix.g"
#line 341 "pix.g"
importer->tmp_a = h->getText();
importer->tmp_nm = "0.0.0.0";
*dbg << h->getText() << "/0.0.0.0";
#line 1225 "PIXCfgParser.cpp"
#line 1373 "PIXCfgParser.cpp"
}
break;
}
@ -1234,13 +1382,13 @@ void PIXCfgParser::hostaddr_ext() {
match(IPV4);
}
if ( inputState->guessing==0 ) {
#line 342 "pix.g"
#line 348 "pix.g"
importer->tmp_a = a->getText();
importer->tmp_nm = m->getText();
*dbg << a->getText() << "/" << m->getText();
#line 1244 "PIXCfgParser.cpp"
#line 1392 "PIXCfgParser.cpp"
}
break;
}
@ -1248,13 +1396,13 @@ void PIXCfgParser::hostaddr_ext() {
{
match(ANY);
if ( inputState->guessing==0 ) {
#line 349 "pix.g"
#line 355 "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 1258 "PIXCfgParser.cpp"
#line 1406 "PIXCfgParser.cpp"
}
break;
}
@ -1275,6 +1423,7 @@ void PIXCfgParser::hostaddr_ext() {
}
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
@ -1282,12 +1431,12 @@ void PIXCfgParser::time_range() {
tr_name = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 401 "pix.g"
#line 407 "pix.g"
importer->time_range_name = tr_name->getText();
*dbg << "time_range " << tr_name->getText() << " ";
#line 1291 "PIXCfgParser.cpp"
#line 1440 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1301,16 +1450,17 @@ void PIXCfgParser::time_range() {
}
void PIXCfgParser::fragments() {
Tracer traceInOut(this, "fragments");
try { // for error handling
match(FRAGMENTS);
if ( inputState->guessing==0 ) {
#line 394 "pix.g"
#line 400 "pix.g"
importer->fragments = true;
*dbg << "fragments ";
#line 1314 "PIXCfgParser.cpp"
#line 1464 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1324,6 +1474,7 @@ void PIXCfgParser::fragments() {
}
void PIXCfgParser::log() {
Tracer traceInOut(this, "log");
try { // for error handling
{
@ -1345,12 +1496,12 @@ void PIXCfgParser::log() {
}
}
if ( inputState->guessing==0 ) {
#line 380 "pix.g"
#line 386 "pix.g"
importer->logging = true;
*dbg << "logging ";
#line 1354 "PIXCfgParser.cpp"
#line 1505 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1364,6 +1515,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;
@ -1380,7 +1532,7 @@ void PIXCfgParser::icmp_spec() {
match(INT_CONST);
}
if ( inputState->guessing==0 ) {
#line 291 "pix.g"
#line 297 "pix.g"
importer->icmp_type = icmp_type->getText();
importer->icmp_code = icmp_code->getText();
@ -1388,7 +1540,7 @@ void PIXCfgParser::icmp_spec() {
*dbg << icmp_type->getText() << " "
<< icmp_code->getText() << " ";
#line 1392 "PIXCfgParser.cpp"
#line 1544 "PIXCfgParser.cpp"
}
break;
}
@ -1397,12 +1549,12 @@ void PIXCfgParser::icmp_spec() {
icmp_word = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 300 "pix.g"
#line 306 "pix.g"
importer->icmp_spec = icmp_word->getText();
*dbg << icmp_word->getText() << " ";
#line 1406 "PIXCfgParser.cpp"
#line 1558 "PIXCfgParser.cpp"
}
break;
}
@ -1424,6 +1576,7 @@ void PIXCfgParser::icmp_spec() {
}
void PIXCfgParser::xoperator() {
Tracer traceInOut(this, "xoperator");
try { // for error handling
switch ( LA(1)) {
@ -1457,16 +1610,17 @@ void PIXCfgParser::xoperator() {
}
void PIXCfgParser::established() {
Tracer traceInOut(this, "established");
try { // for error handling
match(ESTABLISHED);
if ( inputState->guessing==0 ) {
#line 387 "pix.g"
#line 393 "pix.g"
importer->established = true;
*dbg << "established ";
#line 1470 "PIXCfgParser.cpp"
#line 1624 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1480,6 +1634,7 @@ void PIXCfgParser::established() {
}
void PIXCfgParser::single_port_op() {
Tracer traceInOut(this, "single_port_op");
try { // for error handling
{
@ -1511,12 +1666,12 @@ void PIXCfgParser::single_port_op() {
}
}
if ( inputState->guessing==0 ) {
#line 311 "pix.g"
#line 317 "pix.g"
importer->tmp_port_op = LT(0)->getText();
*dbg << LT(0)->getText() << " ";
#line 1520 "PIXCfgParser.cpp"
#line 1675 "PIXCfgParser.cpp"
}
port_spec();
}
@ -1531,16 +1686,17 @@ void PIXCfgParser::single_port_op() {
}
void PIXCfgParser::port_range() {
Tracer traceInOut(this, "port_range");
try { // for error handling
match(P_RANGE);
if ( inputState->guessing==0 ) {
#line 319 "pix.g"
#line 325 "pix.g"
importer->tmp_port_op = LT(0)->getText();
*dbg << LT(0)->getText() << " ";
#line 1544 "PIXCfgParser.cpp"
#line 1700 "PIXCfgParser.cpp"
}
port_spec();
port_spec();
@ -1556,6 +1712,7 @@ void PIXCfgParser::port_range() {
}
void PIXCfgParser::port_spec() {
Tracer traceInOut(this, "port_spec");
try { // for error handling
{
@ -1577,12 +1734,12 @@ void PIXCfgParser::port_spec() {
}
}
if ( inputState->guessing==0 ) {
#line 327 "pix.g"
#line 333 "pix.g"
importer->tmp_port_spec += (std::string(" ") + LT(0)->getText());
*dbg << LT(0)->getText() << " ";
#line 1586 "PIXCfgParser.cpp"
#line 1743 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1596,6 +1753,7 @@ void PIXCfgParser::port_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;
@ -1607,13 +1765,13 @@ void PIXCfgParser::hostaddr_std() {
match(IPV4);
}
if ( inputState->guessing==0 ) {
#line 358 "pix.g"
#line 364 "pix.g"
importer->tmp_a = h->getText();
importer->tmp_nm = "0.0.0.0";
*dbg << h->getText() << "/0.0.0.0";
#line 1617 "PIXCfgParser.cpp"
#line 1775 "PIXCfgParser.cpp"
}
}
else if ((LA(1) == IPV4) && (LA(2) == IPV4)) {
@ -1624,25 +1782,25 @@ void PIXCfgParser::hostaddr_std() {
match(IPV4);
}
if ( inputState->guessing==0 ) {
#line 365 "pix.g"
#line 371 "pix.g"
importer->tmp_a = a->getText();
importer->tmp_nm = m->getText();
*dbg << a->getText() << "/" << m->getText();
#line 1634 "PIXCfgParser.cpp"
#line 1792 "PIXCfgParser.cpp"
}
}
else if ((LA(1) == ANY)) {
match(ANY);
if ( inputState->guessing==0 ) {
#line 372 "pix.g"
#line 378 "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 1646 "PIXCfgParser.cpp"
#line 1804 "PIXCfgParser.cpp"
}
}
else {
@ -1660,41 +1818,213 @@ void PIXCfgParser::hostaddr_std() {
}
}
void PIXCfgParser::nameif() {
ANTLR_USE_NAMESPACE(antlr)RefToken in = ANTLR_USE_NAMESPACE(antlr)nullToken;
void PIXCfgParser::intf_address() {
Tracer traceInOut(this, "intf_address");
try { // for error handling
match(NAMEIF);
in = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 429 "pix.g"
importer->addInterfaceLabel( in->getText() );
*dbg << in->getLine() << ":"
<< " INTRFACE LABEL: " << in->getText() << std::endl;
#line 1678 "PIXCfgParser.cpp"
match(ADDRESS);
{
switch ( LA(1)) {
case WORD:
{
v6_ip_address();
break;
}
case IPV4:
case DHCP:
{
v7_ip_address();
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
}
}
}
match(NEWLINE);
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
recover(ex,_tokenSet_0);
recover(ex,_tokenSet_2);
} else {
throw;
}
}
}
void PIXCfgParser::intf_address() {
void PIXCfgParser::switchport() {
Tracer traceInOut(this, "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(WORD);
if ( inputState->guessing==0 ) {
#line 620 "pix.g"
#line 1871 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
recover(ex,_tokenSet_2);
} else {
throw;
}
}
}
void PIXCfgParser::v6_ip_address() {
Tracer traceInOut(this, "v6_ip_address");
ANTLR_USE_NAMESPACE(antlr)RefToken lbl = ANTLR_USE_NAMESPACE(antlr)nullToken;
ANTLR_USE_NAMESPACE(antlr)RefToken dhcp = 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;
try { // for error handling
lbl = LT(1);
match(WORD);
{
switch ( LA(1)) {
case DHCP:
{
dhcp = LT(1);
match(DHCP);
break;
}
case IPV4:
{
{
a = LT(1);
match(IPV4);
m = LT(1);
match(IPV4);
}
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState->guessing==0 ) {
#line 576 "pix.g"
std::string label = lbl->getText();
std::string addr;
if (a) addr = a->getText();
if (dhcp) addr = dhcp->getText();
std::string netm;
if (m) netm = m->getText();
importer->addInterfaceAddress(label, addr, netm);
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << addr << "/" << netm << std::endl;
#line 1931 "PIXCfgParser.cpp"
}
match(NEWLINE);
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
recover(ex,_tokenSet_2);
} else {
throw;
}
}
}
void PIXCfgParser::v7_ip_address() {
Tracer traceInOut(this, "v7_ip_address");
try { // for error handling
switch ( LA(1)) {
case DHCP:
{
v7_dhcp_address();
break;
}
case IPV4:
{
v7_static_address();
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_2);
} else {
throw;
}
}
}
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);
{
switch ( LA(1)) {
case SETROUTE:
{
match(SETROUTE);
break;
}
case NEWLINE:
{
break;
}
default:
{
throw ANTLR_USE_NAMESPACE(antlr)NoViableAltException(LT(1), getFilename());
}
}
}
if ( inputState->guessing==0 ) {
#line 593 "pix.g"
std::string addr = dhcp->getText();
importer->addInterfaceAddress(addr, "");
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << addr << std::endl;
#line 2008 "PIXCfgParser.cpp"
}
match(NEWLINE);
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
recover(ex,_tokenSet_2);
} else {
throw;
}
}
}
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;
try { // for error handling
match(ADDRESS);
a = LT(1);
match(IPV4);
m = LT(1);
@ -1718,46 +2048,22 @@ void PIXCfgParser::intf_address() {
}
}
if ( inputState->guessing==0 ) {
#line 502 "pix.g"
#line 603 "pix.g"
importer->addInterfaceAddress(a->getText(), m->getText());
std::string addr = a->getText();
std::string netm = m->getText();
importer->addInterfaceAddress(addr, netm);
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << a->getText()
<< "/" << m->getText() << " ";
<< " INTRFACE ADDRESS: " << addr << "/" << netm << std::endl;
if (s)
{
*dbg << s->getText();
}
*dbg << std::endl;
#line 1734 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
reportError(ex);
recover(ex,_tokenSet_2);
} 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(WORD);
if ( inputState->guessing==0 ) {
#line 516 "pix.g"
#line 1760 "PIXCfgParser.cpp"
#line 2065 "PIXCfgParser.cpp"
}
match(NEWLINE);
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
if( inputState->guessing == 0 ) {
@ -1770,6 +2076,7 @@ void PIXCfgParser::switchport() {
}
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;
@ -1784,7 +2091,7 @@ void PIXCfgParser::access_group_by_name() {
intf_label = LT(1);
match(WORD);
if ( inputState->guessing==0 ) {
#line 523 "pix.g"
#line 627 "pix.g"
importer->setInterfaceAndDirectionForRuleSet(
acln->getText(),
@ -1795,7 +2102,7 @@ void PIXCfgParser::access_group_by_name() {
<< " " << intf_label->getText()
<< " " << dir->getText() << std::endl;
#line 1799 "PIXCfgParser.cpp"
#line 2106 "PIXCfgParser.cpp"
}
}
catch (ANTLR_USE_NAMESPACE(antlr)RecognitionException& ex) {
@ -1850,15 +2157,18 @@ const char* PIXCfgParser::tokenNames[] = {
"\"time-range\"",
"\"controller\"",
"\"interface\"",
"\"vlan\"",
"\"security-level\"",
"\"nameif\"",
"\"description\"",
"\"remark\"",
"\"shutdown\"",
"\"address\"",
"\"dhcp\"",
"\"setroute\"",
"\"secondary\"",
"\"switchport\"",
"\"access\"",
"\"vlan\"",
"\"access-group\"",
"\"exit\"",
"LINE_COMMENT",
@ -1903,10 +2213,10 @@ 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_[] = { 85874UL, 459440UL, 0UL, 0UL };
const unsigned long PIXCfgParser::_tokenSet_1_data_[] = { 85874UL, 3673072UL, 0UL, 0UL };
// EOF NEWLINE "ip" "quit" WORD "certificate" "PIX" "ASA" "hostname" "access-list"
// "controller" "interface" "description" "shutdown" "exit" LINE_COMMENT
// COLON_COMMENT
// "controller" "interface" "vlan" "security-level" "nameif" "description"
// "shutdown" "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_[] = { 16UL, 0UL, 0UL, 0UL };
// NEWLINE

View File

@ -71,6 +71,9 @@ public:
public: void hostname();
public: void ip_commands();
public: void intrface();
public: void vlan_interface();
public: void sec_level();
public: void nameif();
public: void controller();
public: void access_list_commands();
public: void exit();
@ -98,9 +101,12 @@ public:
public: void port_range();
public: void port_spec();
public: void hostaddr_std();
public: void nameif();
public: void intf_address();
public: void switchport();
public: void v6_ip_address();
public: void v7_ip_address();
public: void v7_dhcp_address();
public: void v7_static_address();
public: void access_group_by_name();
public:
ANTLR_USE_NAMESPACE(antlr)RefAST getAST()
@ -113,10 +119,10 @@ protected:
private:
static const char* tokenNames[];
#ifndef NO_STATIC_CONSTS
static const int NUM_TOKENS = 85;
static const int NUM_TOKENS = 88;
#else
enum {
NUM_TOKENS = 85
NUM_TOKENS = 88
};
#endif

View File

@ -46,53 +46,56 @@ struct CUSTOM_API PIXCfgParserTokenTypes {
TIME_RANGE = 35,
CONTROLLER = 36,
INTRFACE = 37,
NAMEIF = 38,
DESCRIPTION = 39,
REMARK = 40,
SHUTDOWN = 41,
ADDRESS = 42,
SECONDARY = 43,
SWITCHPORT = 44,
ACCESS = 45,
VLAN = 46,
ACCESS_GROUP = 47,
EXIT = 48,
LINE_COMMENT = 49,
COLON_COMMENT = 50,
EXTENDED = 51,
STANDARD = 52,
Whitespace = 53,
HEX_CONST = 54,
NEG_INT_CONST = 55,
DIGIT = 56,
HEXDIGIT = 57,
PIPE_CHAR = 58,
NUMBER_SIGN = 59,
PERCENT = 60,
AMPERSAND = 61,
APOSTROPHE = 62,
OPENING_PAREN = 63,
CLOSING_PAREN = 64,
STAR = 65,
PLUS = 66,
COMMA = 67,
MINUS = 68,
DOT = 69,
SLASH = 70,
COLON = 71,
SEMICOLON = 72,
LESS_THAN = 73,
EQUALS = 74,
GREATER_THAN = 75,
QUESTION = 76,
COMMERCIAL_AT = 77,
OPENING_SQUARE = 78,
CLOSING_SQUARE = 79,
CARET = 80,
UNDERLINE = 81,
OPENING_BRACE = 82,
CLOSING_BRACE = 83,
TILDE = 84,
VLAN = 38,
SEC_LEVEL = 39,
NAMEIF = 40,
DESCRIPTION = 41,
REMARK = 42,
SHUTDOWN = 43,
ADDRESS = 44,
DHCP = 45,
SETROUTE = 46,
SECONDARY = 47,
SWITCHPORT = 48,
ACCESS = 49,
ACCESS_GROUP = 50,
EXIT = 51,
LINE_COMMENT = 52,
COLON_COMMENT = 53,
EXTENDED = 54,
STANDARD = 55,
Whitespace = 56,
HEX_CONST = 57,
NEG_INT_CONST = 58,
DIGIT = 59,
HEXDIGIT = 60,
PIPE_CHAR = 61,
NUMBER_SIGN = 62,
PERCENT = 63,
AMPERSAND = 64,
APOSTROPHE = 65,
OPENING_PAREN = 66,
CLOSING_PAREN = 67,
STAR = 68,
PLUS = 69,
COMMA = 70,
MINUS = 71,
DOT = 72,
SLASH = 73,
COLON = 74,
SEMICOLON = 75,
LESS_THAN = 76,
EQUALS = 77,
GREATER_THAN = 78,
QUESTION = 79,
COMMERCIAL_AT = 80,
OPENING_SQUARE = 81,
CLOSING_SQUARE = 82,
CARET = 83,
UNDERLINE = 84,
OPENING_BRACE = 85,
CLOSING_BRACE = 86,
TILDE = 87,
NULL_TREE_LOOKAHEAD = 3
};
#ifdef __cplusplus

View File

@ -34,50 +34,53 @@ FRAGMENTS="fragments"=34
TIME_RANGE="time-range"=35
CONTROLLER="controller"=36
INTRFACE="interface"=37
NAMEIF="nameif"=38
DESCRIPTION="description"=39
REMARK="remark"=40
SHUTDOWN="shutdown"=41
ADDRESS="address"=42
SECONDARY="secondary"=43
SWITCHPORT="switchport"=44
ACCESS="access"=45
VLAN="vlan"=46
ACCESS_GROUP="access-group"=47
EXIT="exit"=48
LINE_COMMENT=49
COLON_COMMENT=50
EXTENDED="extended"=51
STANDARD="standard"=52
Whitespace=53
HEX_CONST=54
NEG_INT_CONST=55
DIGIT=56
HEXDIGIT=57
PIPE_CHAR=58
NUMBER_SIGN=59
PERCENT=60
AMPERSAND=61
APOSTROPHE=62
OPENING_PAREN=63
CLOSING_PAREN=64
STAR=65
PLUS=66
COMMA=67
MINUS=68
DOT=69
SLASH=70
COLON=71
SEMICOLON=72
LESS_THAN=73
EQUALS=74
GREATER_THAN=75
QUESTION=76
COMMERCIAL_AT=77
OPENING_SQUARE=78
CLOSING_SQUARE=79
CARET=80
UNDERLINE=81
OPENING_BRACE=82
CLOSING_BRACE=83
TILDE=84
VLAN="vlan"=38
SEC_LEVEL="security-level"=39
NAMEIF="nameif"=40
DESCRIPTION="description"=41
REMARK="remark"=42
SHUTDOWN="shutdown"=43
ADDRESS="address"=44
DHCP="dhcp"=45
SETROUTE="setroute"=46
SECONDARY="secondary"=47
SWITCHPORT="switchport"=48
ACCESS="access"=49
ACCESS_GROUP="access-group"=50
EXIT="exit"=51
LINE_COMMENT=52
COLON_COMMENT=53
EXTENDED="extended"=54
STANDARD="standard"=55
Whitespace=56
HEX_CONST=57
NEG_INT_CONST=58
DIGIT=59
HEXDIGIT=60
PIPE_CHAR=61
NUMBER_SIGN=62
PERCENT=63
AMPERSAND=64
APOSTROPHE=65
OPENING_PAREN=66
CLOSING_PAREN=67
STAR=68
PLUS=69
COMMA=70
MINUS=71
DOT=72
SLASH=73
COLON=74
SEMICOLON=75
LESS_THAN=76
EQUALS=77
GREATER_THAN=78
QUESTION=79
COMMERCIAL_AT=80
OPENING_SQUARE=81
CLOSING_SQUARE=82
CARET=83
UNDERLINE=84
OPENING_BRACE=85
CLOSING_BRACE=86
TILDE=87

View File

@ -51,7 +51,7 @@ header "post_include_cpp"
#include <antlr/Token.hpp>
#include <antlr/TokenBuffer.hpp>
#include "../gui/IOSImporter.h"
#include "../libgui/IOSImporter.h"
}
header
@ -496,7 +496,7 @@ description : DESCRIPTION
descr += LT(1)->getText() + " ";
consume();
}
importer->addInterfaceComment( descr );
importer->setInterfaceComment( descr );
*dbg << " DESCRIPTION " << descr << std::endl;
//consumeUntil(NEWLINE);
}

View File

@ -51,7 +51,7 @@ header "post_include_cpp"
#include <antlr/Token.hpp>
#include <antlr/TokenBuffer.hpp>
#include "../gui/IPTImporter.h"
#include "../libgui/IPTImporter.h"
#include "fwbuilder/TCPService.h"
#include "fwbuilder/Logger.h"

View File

@ -90,6 +90,12 @@ cfgfile :
ip_commands
|
intrface
|
vlan_interface
|
sec_level
|
nameif
|
controller
|
@ -415,25 +421,79 @@ controller : CONTROLLER
;
//****************************************************************
//
// **************** PIX 6 "interface" command:
//
// interface <hardware_id> [<hw_speed> [shutdown]]
// [no] interface <hardware_id> <vlan_id> [logical|physical] [shutdown]
// interface <hardware_id> change-vlan <old_vlan_id> <new_vlan_id>
// show interface
//
// Example:
//
// interface ethernet0 auto
// interface ethernet1 auto
// nameif ethernet0 outside security0
// nameif ethernet1 inside security100
//
// **************** PIX 7 "interface" command
//
// interface <type> <port>
// interface <type> <port>.<subif_number>
// no interface <type> <port>.<subif_number>
//
// Examples:
//
// interface Ethernet0
// no nameif
// no security-level
// no ip address
// !
// interface Ethernet0.101
// vlan 101
// nameif outside
// security-level 0
// ip address 192.0.2.253 255.255.255.0
// !
// vlans in pix6 config format are not parsed
intrface : INTRFACE in:WORD
{
importer->newInterface( in->getText() );
*dbg << in->getLine() << ":"
<< " INTRFACE: " << in->getText() << std::endl;
consumeUntil(NEWLINE);
}
;
vlan_interface : VLAN vlan_id:INT_CONST
{
importer->setInterfaceVlanId(vlan_id->getText());
*dbg << " VLAN: " << vlan_id->getText() << std::endl;
}
NEWLINE
;
nameif : NAMEIF in:WORD
sec_level : SEC_LEVEL sec_level:INT_CONST
{
importer->addInterfaceLabel( in->getText() );
*dbg << in->getLine() << ":"
<< " INTRFACE LABEL: " << in->getText() << std::endl;
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)
{
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;
}
;
// interface description
// Use it for comment
description : DESCRIPTION
@ -445,7 +505,7 @@ description : DESCRIPTION
descr += LT(1)->getText() + " ";
consume();
}
importer->addInterfaceComment( descr );
importer->setInterfaceComment( descr );
*dbg << " DESCRIPTION " << descr << std::endl;
//consumeUntil(NEWLINE);
}
@ -488,30 +548,74 @@ interface_known_commands :
) NEWLINE ;
// need this because "ospf", "bgp" and others are a known tokens
// (needed for protocol and ports in access lists) and "ip ospf" and
// similar are legit interface commands
// Interface IP address.
//
// **************** PIX 6
//
// ip address outside dhcp setroute retry 10
// ip address inside 10.3.14.202 255.255.255.0
//
// **************** PIX 7
//
// interface Ethernet0.101
// vlan 101
// nameif outside
// security-level 0
// ip address 192.0.2.253 255.255.255.0
// !
//
// interface Vlan1
// nameif inside
// security-level 100
// ip address dhcp setroute
// !
// ignore_interface_commands : (BGP | OSPF | DHCP)
// {
// consumeUntil(NEWLINE);
// }
// ;
intf_address : ADDRESS (v6_ip_address | v7_ip_address) ;
intf_address : ADDRESS a:IPV4 m:IPV4 (s:SECONDARY)?
v6_ip_address : lbl:WORD (dhcp:DHCP | (a:IPV4 m:IPV4))
{
importer->addInterfaceAddress(a->getText(), m->getText());
std::string label = lbl->getText();
std::string addr;
if (a) addr = a->getText();
if (dhcp) addr = dhcp->getText();
std::string netm;
if (m) netm = m->getText();
importer->addInterfaceAddress(label, addr, netm);
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << a->getText()
<< "/" << m->getText() << " ";
<< " INTRFACE ADDRESS: " << addr << "/" << netm << std::endl;
}
NEWLINE
;
v7_ip_address : v7_dhcp_address | v7_static_address;
v7_dhcp_address : dhcp:DHCP (SETROUTE) ?
{
std::string addr = dhcp->getText();
importer->addInterfaceAddress(addr, "");
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << addr << std::endl;
}
NEWLINE
;
v7_static_address : a:IPV4 m:IPV4 (s:SECONDARY)?
{
std::string addr = a->getText();
std::string netm = m->getText();
importer->addInterfaceAddress(addr, netm);
*dbg << LT(1)->getLine() << ":"
<< " INTRFACE ADDRESS: " << addr << "/" << netm << std::endl;
if (s)
{
*dbg << s->getText();
}
*dbg << std::endl;
}
NEWLINE
;
switchport : SWITCHPORT ACCESS VLAN vlan_num:WORD
{
}
@ -582,6 +686,7 @@ tokens
SWITCHPORT = "switchport";
ACCESS = "access";
NAMEIF = "nameif";
SEC_LEVEL = "security-level";
ACCESS_LIST = "access-list";
ACCESS_GROUP = "access-group";
@ -594,6 +699,9 @@ tokens
PERMIT = "permit";
DENY = "deny";
DHCP = "dhcp";
SETROUTE = "setroute";
// protocols for 'permit' and 'deny' commands
IP = "ip";