Skip to content

Commit ef3485d

Browse files
author
Vadim Kurland
committed
see #2354 fixed parser to recognize top level "ip" commands that we do not use but that should not cause parser error
1 parent 6d5d1a9 commit ef3485d

File tree

9 files changed

+653
-513
lines changed

9 files changed

+653
-513
lines changed

src/parsers/IOSCfgLexer.cpp

Lines changed: 107 additions & 106 deletions
Large diffs are not rendered by default.

src/parsers/IOSCfgParser.cpp

Lines changed: 219 additions & 142 deletions
Large diffs are not rendered by default.

src/parsers/IOSCfgParser.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ class CUSTOM_API IOSCfgParser : public ANTLR_USE_NAMESPACE(antlr)LLkParser, publ
102102
public: void ip_access_list_ext();
103103
public: void interface_known_ip_commands();
104104
public: void community_list_command();
105+
public: void ip_unused_command();
105106
public: void permit_std();
106107
public: void deny_std();
107108
public: void permit_ext();
@@ -135,10 +136,10 @@ class CUSTOM_API IOSCfgParser : public ANTLR_USE_NAMESPACE(antlr)LLkParser, publ
135136
private:
136137
static const char* tokenNames[];
137138
#ifndef NO_STATIC_CONSTS
138-
static const int NUM_TOKENS = 79;
139+
static const int NUM_TOKENS = 80;
139140
#else
140141
enum {
141-
NUM_TOKENS = 79
142+
NUM_TOKENS = 80
142143
};
143144
#endif
144145

src/parsers/IOSCfgParserTokenTypes.hpp

Lines changed: 63 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,27 @@ struct CUSTOM_API IOSCfgParserTokenTypes {
1515
NEWLINE = 4,
1616
IP = 5,
1717
QUIT = 6,
18-
COMMUNITY_LIST = 7,
19-
WORD = 8,
20-
CERTIFICATE = 9,
21-
IOSVERSION = 10,
22-
NUMBER = 11,
23-
HOSTNAME = 12,
24-
STRING = 13,
25-
ACCESS_LIST = 14,
26-
INT_CONST = 15,
27-
EXTENDED = 16,
28-
PERMIT = 17,
29-
DENY = 18,
30-
ICMP = 19,
31-
TCP = 20,
32-
UDP = 21,
33-
P_EQ = 22,
34-
P_GT = 23,
35-
P_LT = 24,
36-
P_NEQ = 25,
37-
P_RANGE = 26,
38-
HOST = 27,
18+
ICMP = 7,
19+
TCP = 8,
20+
HOST = 9,
21+
COMMUNITY_LIST = 10,
22+
WORD = 11,
23+
CERTIFICATE = 12,
24+
IOSVERSION = 13,
25+
NUMBER = 14,
26+
HOSTNAME = 15,
27+
STRING = 16,
28+
ACCESS_LIST = 17,
29+
INT_CONST = 18,
30+
EXTENDED = 19,
31+
PERMIT = 20,
32+
DENY = 21,
33+
UDP = 22,
34+
P_EQ = 23,
35+
P_GT = 24,
36+
P_LT = 25,
37+
P_NEQ = 26,
38+
P_RANGE = 27,
3939
IPV4 = 28,
4040
ANY = 29,
4141
LOG = 30,
@@ -46,47 +46,48 @@ struct CUSTOM_API IOSCfgParserTokenTypes {
4646
VLAN = 35,
4747
CONTROLLER = 36,
4848
INTRFACE = 37,
49-
DESCRIPTION = 38,
50-
REMARK = 39,
51-
SHUTDOWN = 40,
52-
ACCESS_GROUP = 41,
53-
ADDRESS = 42,
54-
SECONDARY = 43,
55-
EXIT = 44,
56-
LINE_COMMENT = 45,
57-
STANDARD = 46,
58-
Whitespace = 47,
59-
HEX_CONST = 48,
60-
NEG_INT_CONST = 49,
61-
DIGIT = 50,
62-
HEXDIGIT = 51,
63-
PIPE_CHAR = 52,
64-
NUMBER_SIGN = 53,
65-
PERCENT = 54,
66-
AMPERSAND = 55,
67-
APOSTROPHE = 56,
68-
OPENING_PAREN = 57,
69-
CLOSING_PAREN = 58,
70-
STAR = 59,
71-
PLUS = 60,
72-
COMMA = 61,
73-
MINUS = 62,
74-
DOT = 63,
75-
SLASH = 64,
76-
COLON = 65,
77-
SEMICOLON = 66,
78-
LESS_THAN = 67,
79-
EQUALS = 68,
80-
GREATER_THAN = 69,
81-
QUESTION = 70,
82-
COMMERCIAL_AT = 71,
83-
OPENING_SQUARE = 72,
84-
CLOSING_SQUARE = 73,
85-
CARET = 74,
86-
UNDERLINE = 75,
87-
OPENING_BRACE = 76,
88-
CLOSING_BRACE = 77,
89-
TILDE = 78,
49+
POINT_TO_POINT = 38,
50+
DESCRIPTION = 39,
51+
REMARK = 40,
52+
SHUTDOWN = 41,
53+
ACCESS_GROUP = 42,
54+
ADDRESS = 43,
55+
SECONDARY = 44,
56+
EXIT = 45,
57+
LINE_COMMENT = 46,
58+
STANDARD = 47,
59+
Whitespace = 48,
60+
HEX_CONST = 49,
61+
NEG_INT_CONST = 50,
62+
DIGIT = 51,
63+
HEXDIGIT = 52,
64+
PIPE_CHAR = 53,
65+
NUMBER_SIGN = 54,
66+
PERCENT = 55,
67+
AMPERSAND = 56,
68+
APOSTROPHE = 57,
69+
OPENING_PAREN = 58,
70+
CLOSING_PAREN = 59,
71+
STAR = 60,
72+
PLUS = 61,
73+
COMMA = 62,
74+
MINUS = 63,
75+
DOT = 64,
76+
SLASH = 65,
77+
COLON = 66,
78+
SEMICOLON = 67,
79+
LESS_THAN = 68,
80+
EQUALS = 69,
81+
GREATER_THAN = 70,
82+
QUESTION = 71,
83+
COMMERCIAL_AT = 72,
84+
OPENING_SQUARE = 73,
85+
CLOSING_SQUARE = 74,
86+
CARET = 75,
87+
UNDERLINE = 76,
88+
OPENING_BRACE = 77,
89+
CLOSING_BRACE = 78,
90+
TILDE = 79,
9091
NULL_TREE_LOOKAHEAD = 3
9192
};
9293
#ifdef __cplusplus

src/parsers/IOSCfgParserTokenTypes.txt

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

src/parsers/iosacl.g

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,18 @@ cfgfile :
134134

135135
//****************************************************************
136136

137-
ip_commands : IP ( ip_access_list_ext | interface_known_ip_commands | community_list_command | unknown_command )
137+
ip_commands : IP
138+
(
139+
ip_access_list_ext
140+
|
141+
interface_known_ip_commands
142+
|
143+
community_list_command
144+
|
145+
ip_unused_command
146+
|
147+
unknown_command
148+
)
138149
;
139150

140151
//****************************************************************
@@ -144,6 +155,17 @@ quit : QUIT
144155
}
145156
;
146157

158+
//****************************************************************
159+
// these are "ip ..." top level commands that we do not use but parser
160+
// should not abort on. Unlike unknown_command, these have known token as
161+
// a second word so they dont match unknown_command which expects WORD.
162+
163+
ip_unused_command : ICMP | TCP | HOST
164+
{
165+
consumeUntil(NEWLINE);
166+
}
167+
;
168+
147169
//****************************************************************
148170
community_list_command : COMMUNITY_LIST
149171
{
@@ -508,6 +530,14 @@ intrface : INTRFACE in:WORD
508530
*dbg << in->getLine() << ":"
509531
<< " INTRFACE: " << in->getText() << std::endl;
510532
}
533+
(
534+
POINT_TO_POINT
535+
{
536+
importer->addMessageToLog(
537+
QString("Warning: point-to-point interfaces "
538+
"are not supported"));
539+
}
540+
)?
511541
NEWLINE
512542
;
513543

@@ -717,6 +747,7 @@ tokens
717747
EXTENDED = "extended" ;
718748
STANDARD = "standard" ;
719749

750+
POINT_TO_POINT = "point-to-point" ;
720751
}
721752

722753
LINE_COMMENT : "!" (~('\r' | '\n'))* ; // NEWLINE ;

0 commit comments

Comments
 (0)