grammar TestKO; options { output=AST; ASTLabelType=CommonTree; } // Main rules main : STATIC_MAIN '{' stats '}' ; stats : (simpleStat ';' | complexStat)+ ; // Declaration of static strings STATIC_MAIN : 'Main'; // Simple statements simpleStat : ID_DOWNSTREAMFREQUENCY T_INT | ID_UPSTREAMCHANNELID T_INT | ID_NETWORKACCESS T_INT | ID_SWUPGRADEFILENAME T_STRING | ID_SNMPWRITECONTROL T_OID T_INT | ID_SNMPMIBOBJECT T_OID snmpType | ID_CPEMACADDRESS T_MACADDR | ID_MAXCPE T_INT | ID_TFTPTIMESTAMP T_INT | ID_TFTPMODEMADDRESS T_IP | ID_SWUPGRADESERVER T_IP | ID_MAXCLASSIFIERS T_INT | ID_GLOBALPRIVACYENABLE T_INT | ID_MFGCVCDATA T_INT | ID_MANUFACTURERCVC T_INT | ID_COSIGNERCVCDATA T_INT | ID_COSIGNERCVC T_INT | ID_SUBMGMTCONTROL T_HEXSTR | ID_DOCSISTWOENABLE T_INT | ID_TESTMODEENABLE T_INT | ID_SNMPCPEACCESSCONTROL T_INT | ID_IPV6SWUPGRADESERVER T_IPV6 | ID_MTACONFIGDELIMITER ; ID_DOWNSTREAMFREQUENCY : 'DownstreamFrequency'; ID_UPSTREAMCHANNELID : 'UpstreamChannelId'; ID_NETWORKACCESS : 'NetworkAccess'; ID_SWUPGRADEFILENAME : 'SwUpgradeFilename'; ID_SNMPWRITECONTROL : 'SnmpWriteControl'; ID_SNMPMIBOBJECT : 'SnmpMibObject'; ID_CPEMACADDRESS : 'CpeMacAddress'; ID_MAXCPE : 'MaxCPE'; ID_TFTPTIMESTAMP : 'TftpTimestamp'; ID_TFTPMODEMADDRESS : 'TftpModemAddress'; ID_SWUPGRADESERVER : 'SwUpgradeServer'; ID_MAXCLASSIFIERS : 'MaxClassifiers'; ID_GLOBALPRIVACYENABLE : 'GlobalPrivacyEnable'; ID_MFGCVCDATA : 'MfgCVCData'; ID_MANUFACTURERCVC : 'ManufacturerCVC'; ID_COSIGNERCVCDATA : 'CoSignerCVCData'; ID_COSIGNERCVC : 'CoSignerCVC'; ID_SUBMGMTCONTROL : 'SubMgmtControl'; ID_SUBMGMTFILTERS : 'SubMgmtFilters'; ID_DOCSISTWOENABLE // DOCSIS 2.0: TLV 39 : 'DocsisTwoEnable'; ID_TESTMODEENABLE // DOCSIS 2.0: TLV 40 : 'TestModeEnable'; ID_SNMPCPEACCESSCONTROL // DOCSIS 3.0: TLV 55 : 'SnmpCpeAccessControl'; ID_IPV6SWUPGRADESERVER // DOCSIS 3.0: TLV 58 : 'IPv6SwUpgradeServer'; ID_MTACONFIGDELIMITER : 'MtaConfigDelimiter'; // PACKETCABLE: TLV 254 // Complex statements complexStat : ID_CLASSOFSERVICE '{' classOfServiceStats '}' | ID_MODEMCAPABILITIES '{' modemCapabilitiesStats '}' | ID_BASELINEPRIVACY '{' baselinePrivacyStats '}' | ID_USPACKETCLASS '{' usdsPacketClassStats '}' | ID_PHS '{' phsStats '}' ; // ClassOfService complex rule and statements (DOCSIS 1.0 TLV 4) classOfServiceStats : (classOfServiceStat ';')+; classOfServiceStat : ID_CLASSID T_INT | ID_MAXRATEDOWN T_INT | ID_MAXRATEUP T_INT | ID_PRIORITYUP T_INT | ID_GUARANTEEDUP T_INT | ID_MAXBURSTUP T_INT | ID_PRIVACYENABLE T_INT ; ID_CLASSOFSERVICE // DOCSIS 1.0: TLV 4 : 'ClassOfService'; ID_CLASSID // DOCSIS 1.0: TLV 4.1 : 'ClassID'; ID_MAXRATEDOWN // DOCSIS 1.0: TLV 4.2 : 'MaxRateDown'; ID_MAXRATEUP // DOCSIS 1.0: TLV 4.3 : 'MaxRateUp'; ID_PRIORITYUP // DOCSIS 1.0: TLV 4.4 : 'PriorityUp'; ID_GUARANTEEDUP // DOCSIS 1.0: TLV 4.5 : 'GuaranteedUp'; ID_MAXBURSTUP // DOCSIS 1.0: TLV 4.6 : 'MaxBurstUp'; ID_PRIVACYENABLE // DOCSIS 1.0: TLV 4.7 : 'PrivacyEnable'; // ModemCapabilities complex rule and statements (DOCSIS x.x TLV 5) modemCapabilitiesStats : (modemCapabilitiesStat ';')+; modemCapabilitiesStat : ID_CONCATENATIONSUPPORT T_INT | ID_MODEMDOCSISVERSION T_INT | ID_FRAGMENTATIONSUPPORT T_INT | ID_PHSSUPPORT T_INT | ID_IGMPSUPPORT T_INT | ID_BASELINEPRIVACYSUPPORT T_INT | ID_DOWNSTREAMSAIDSUPPORT T_INT | ID_UPSTREAMSIDSUPPORT T_INT | ID_DCCSUPPORT T_INT ; ID_MODEMCAPABILITIES // DOCSIS 1.x: TLV 5 : 'ModemCapabilities'; ID_CONCATENATIONSUPPORT // DOCSIS 1.x: TLV 5.1 : 'ConcatenationSupport'; ID_MODEMDOCSISVERSION // DOCSIS 1.x: TLV 5.2 : 'ModemDocsisVersion'; ID_FRAGMENTATIONSUPPORT // DOCSIS 1.x: TLV 5.3 : 'FragmentationSupport'; ID_PHSSUPPORT // DOCSIS 1.x: TLV 5.4 : 'PHSSupport'; ID_IGMPSUPPORT // DOCSIS 1.x: TLV 5.5 : 'IGMPSupport'; ID_BASELINEPRIVACYSUPPORT // DOCSIS 1.x: TLV 5.6 : 'BaselinePrivacySupport'; ID_DOWNSTREAMSAIDSUPPORT // DOCSIS 1.x: TLV 5.7 : 'DownstreamSAIDSupport'; ID_UPSTREAMSIDSUPPORT // DOCSIS 1.x: TLV 5.8 : 'UpstreamSIDSupport'; ID_DCCSUPPORT // DOCSIS 1.x: TLV 5.12 : 'DCCSupport'; // BaselinePrivacy complex rule and statements (DOCSIS x.x TLV 17) baselinePrivacyStats : (baselinePrivacyStat ';')+; baselinePrivacyStat : ID_AUTHTIMEOUT T_INT | ID_REAUTHTIMEOUT T_INT | ID_AUTHGRACETIME T_INT | ID_OPERTIMEOUT T_INT | ID_REKEYTIMEOUT T_INT | ID_TEKGRACETIME T_INT | ID_AUTHREJECTTIMEOUT T_INT | ID_SAMAPWAITTIMEOUT T_INT | ID_SAMAPMAXRETRIES T_INT ; ID_BASELINEPRIVACY // DOCSIS 1.x: TLV 17 : 'BaselinePrivacy'; ID_AUTHTIMEOUT // DOCSIS 1.x: TLV 17.1 : 'AuthTimeout'; ID_REAUTHTIMEOUT // DOCSIS 1.x: TLV 17.2 : 'ReAuthTimeout'; ID_AUTHGRACETIME // DOCSIS 1.x: TLV 17.3 : 'AuthGraceTime'; ID_OPERTIMEOUT // DOCSIS 1.x: TLV 17.4 : 'OperTimeout'; ID_REKEYTIMEOUT // DOCSIS 1.x: TLV 17.5 : 'ReKeyTimeout'; ID_TEKGRACETIME // DOCSIS 1.x: TLV 17.6 : 'TEKGraceTime'; ID_AUTHREJECTTIMEOUT // DOCSIS 1.x: TLV 17.7 : 'AuthRejectTimeout'; ID_SAMAPWAITTIMEOUT // DOCSIS 1.x: TLV 17.8 : 'SAMapWaitTimeout'; ID_SAMAPMAXRETRIES // DOCSIS 1.x: TLV 17.9 : 'SAMapMaxRetries'; // [Us|Ds]PacketClass complex rule and statements (DOCSIS 1.1 TLV [22|23]) usdsPacketClassStats : (usdsPacketClassStat)+; usdsPacketClassStat : usdsPacketClassSimpleStat ';' | usdsPacketClassComplexStat ; usdsPacketClassSimpleStat : ID_CLASSIFIERREF T_INT | ID_CLASSIFIERID T_INT | ID_SERVICEFLOWREF T_INT | ID_SERVICEFLOWID T_INT | ID_RULEPRIORITY T_INT | ID_ACTIVATIONSTATE T_INT | ID_DSCACTION T_INT ; usdsPacketClass : ID_USPACKETCLASS | ID_DSPACKETCLASS; ID_USPACKETCLASS // DOCSIS 1.1: TLV 22 : 'UsPacketClass'; ID_DSPACKETCLASS // DOCSIS 1.1: TLV 23 : 'DsPacketClass'; ID_CLASSIFIERREF // DOCSIS 1.1: TLV [22|23].1 : 'ClassifierRef'; ID_CLASSIFIERID // DOCSIS 1.1: TLV [22|23].2 : 'ClassifierId'; ID_SERVICEFLOWREF // DOCSIS 1.1: TLV [22|23].3 + TLV [24|25].1 : 'ServiceFlowRef'; ID_SERVICEFLOWID // DOCSIS 1.1: TLV [22|23].4 + TLV [24|25].2 : 'ServiceFlowId'; ID_RULEPRIORITY // DOCSIS 1.1: TLV [22|23].5 : 'RulePriority'; ID_ACTIVATIONSTATE // DOCSIS 1.1: TLV [22|23].6 : 'ActivationState'; ID_DSCACTION // DOCSIS 1.1: TLV [22|23].7 : 'DscAction'; usdsPacketClassComplexStat : ID_IPPACKETCLASSIFIER '{' ipPacketClassifierStats '}' | ID_LLCPACKETCLASSIFIER '{' llcPacketClassifierStats '}' | ID_IEEE802CLASSIFIER '{' ieee802ClassifierStats '}' | ID_IPV6PACKETCLASSIFIER '{' ipv6PacketClassifierStats '}' ; // IpPacketClassifier complex rule and statements (DOCSIS 1.1 TLV [22|23]) ipPacketClassifierStats : (ipPacketClassifierStat ';')+; ipPacketClassifierStat : ID_IPTOS T_HEXSTR | ID_IPPROTO T_INT | ID_IPSRCADDR T_IP | ID_IPSRCMASK T_IP | ID_IPDSTADDR T_IP | ID_IPDSTMASK T_IP | ID_SRCPORTSTART T_INT | ID_SRCPORTEND T_INT | ID_DSTPORTSTART T_INT | ID_DSTPORTEND T_INT ; ID_IPPACKETCLASSIFIER // DOCSIS 1.1: TLV [22|23].9 : 'IpPacketClassifier'; ID_IPTOS // DOCSIS 1.1: TLV [22|23].9.1 : 'IpTos'; ID_IPPROTO // DOCSIS 1.1: TLV [22|23].9.2 : 'IpProto'; ID_IPSRCADDR // DOCSIS 1.1: TLV [22|23].9.3 : 'IpSrcAddr'; ID_IPSRCMASK // DOCSIS 1.1: TLV [22|23].9.4 : 'IpSrcMask'; ID_IPDSTADDR // DOCSIS 1.1: TLV [22|23].9.5 : 'IpDstAddr'; ID_IPDSTMASK // DOCSIS 1.1: TLV [22|23].9.6 : 'IpDstMask'; ID_SRCPORTSTART // DOCSIS 1.1: TLV [22|23].9.7 : 'SrcPortStart'; ID_SRCPORTEND // DOCSIS 1.1: TLV [22|23].9.8 : 'SrcPortEnd'; ID_DSTPORTSTART // DOCSIS 1.1: TLV [22|23].9.9 : 'DstPortStart'; ID_DSTPORTEND // DOCSIS 1.1: TLV [22|23].9.10 : 'DstPortEnd'; // LLCPacketClassifier complex rule and statements (DOCSIS 1.1 TLV [22|23]) llcPacketClassifierStats : (llcPacketClassifierStat ';')+; llcPacketClassifierStat : ID_DSTMACADDRESS T_MACMASK | ID_SRCMACADDRESS T_MACADDR | ID_ETHERTYPE T_HEXSTR ; ID_LLCPACKETCLASSIFIER // DOCSIS 1.1: TLV [22|23].10 : 'LLCacketClassifier'; ID_DSTMACADDRESS // DOCSIS 1.1: TLV [22|23].10.1 : 'DstMacAddress'; ID_SRCMACADDRESS // DOCSIS 1.1: TLV [22|23].10.2 : 'SrcMacAddress'; ID_ETHERTYPE // DOCSIS 1.1: TLV [22|23].10.3 : 'EtherType'; // IEEE802Classifier complex rule and statements (DOCSIS 1.1 TLV [22|23]) ieee802ClassifierStats : (ieee802ClassifierStat ';')+; ieee802ClassifierStat : ID_USERPRIORITY T_INT | ID_VLANID T_INT ; ID_IEEE802CLASSIFIER // DOCSIS 1.1: TLV [22|23].11 : 'IEEE802Classifier'; ID_USERPRIORITY // DOCSIS 1.1: TLV [22|23].11.1 : 'UserPriority'; ID_VLANID // DOCSIS 1.1: TLV [22|23].11.2 : 'VlanID'; // IPv6PacketClassifier complex rule and statements (DOCSIS 3.0 TLV [22|23]) ipv6PacketClassifierStats : (ipv6PacketClassifierStat ';')+; ipv6PacketClassifierStat : ID_IPV6TRAFFICCLASSRANGEMASK T_INT // TODO: CONFIGURE THE PROPER TYPE | ID_IPV6FLOWLABEL T_INT | ID_IPV6NEXTHEADERTYPE T_INT | ID_IPV6SRCADDR T_IPV6 | ID_IPV6SRCPREFLENGTH T_INT | ID_IPV6DSTADDR T_IPV6 | ID_IPV6DSTPREFLENGTH T_INT | ID_SRCPORTEND T_INT | ID_DSTPORTSTART T_INT | ID_DSTPORTEND T_INT ; ID_IPV6PACKETCLASSIFIER // DOCSIS 3.0: TLV [22|23].12 : 'IPv6PacketClassifier'; ID_IPV6TRAFFICCLASSRANGEMASK // DOCSIS 3.0: TLV [22|23].12.1 : 'IPv6TrafficClassRangeMask'; ID_IPV6FLOWLABEL // DOCSIS 3.0: TLV [22|23].12.2 : 'IPv6FlowLabel'; ID_IPV6NEXTHEADERTYPE // DOCSIS 3.0: TLV [22|23].12.3 : 'IPv6NextHeaderType'; ID_IPV6SRCADDR // DOCSIS 3.0: TLV [22|23].12.4 : 'IPv6SrcAddr'; ID_IPV6SRCPREFLENGTH // DOCSIS 3.0: TLV [22|23].12.5 : 'IPv6SrcPrefLength'; ID_IPV6DSTADDR // DOCSIS 3.0: TLV [22|23].12.6 : 'IPv6DstAddr'; ID_IPV6DSTPREFLENGTH // DOCSIS 3.0: TLV [22|23].12.7 : 'IPv6DstPrefLength'; // PHS complex rule and statements (DOCSIS x.x TLV 26) phsStats : (phsStat ';')+; phsStat : ID_PHSCLASSIFIERREF T_INT | ID_PHSCLASSIFIERID T_INT | ID_PHSERVICEFLOWREF T_INT | ID_PHSSERVICEFLOWID T_INT | ID_PHSFIELD T_HEXSTR | ID_PHSINDEX T_INT | ID_PHSMASK T_HEXSTR | ID_PHSSIZE T_INT | ID_PHSVERIFY T_INT ; ID_PHS // DOCSIS x.x: TLV 26 : 'PHS'; ID_PHSCLASSIFIERREF // DOCSIS x.x: TLV 26.1 : 'PHSClassifierRef'; ID_PHSCLASSIFIERID // DOCSIS x.x: TLV 26.2 : 'PHSClassifierId'; ID_PHSERVICEFLOWREF // DOCSIS x.x: TLV 26.3 : 'PHSServiceFlowRef'; ID_PHSSERVICEFLOWID // DOCSIS x.x: TLV 26.4 : 'PHSServiceFlowId'; ID_PHSFIELD // DOCSIS x.x: TLV 26.7 : 'PHSField'; ID_PHSINDEX // DOCSIS x.x: TLV 26.8 : 'PHSIndex'; ID_PHSMASK // DOCSIS x.x: TLV 26.9 : 'PHSMask'; ID_PHSSIZE // DOCSIS x.x: TLV 26.10 : 'PHSSize'; ID_PHSVERIFY // DOCSIS x.x: TLV 26.11 : 'PHSVerify'; // SNMP types and values snmpType // Not yet managed "OPAQUE" and "BITSTRING" : SNMP_INTEGER T_INT | SNMP_COUNTER32 T_INT | SNMP_GAUGE32 T_INT | SNMP_UNSIGNED32 T_INT | SNMP_COUNTER64 T_INT | SNMP_IPADDRESS T_IP | SNMP_OID T_OID | SNMP_STRING T_STRING | SNMP_HEXSTRING T_HEXSTR | SNMP_TIMETICKS T_TIMETICKS ; // Declaration of LEXERs for SNMP types SNMP_INTEGER : 'Integer'; SNMP_COUNTER32 : 'Counter32'; SNMP_GAUGE32 : 'Gauge' | 'Gauge32'; SNMP_TIMETICKS : 'TimeTicks'; SNMP_UNSIGNED32 : 'Unsigned32'; SNMP_COUNTER64 : 'Counter64'; SNMP_OCTETSTRING : 'OctetString'; SNMP_IPADDRESS : 'IpAddress'; SNMP_Opaque : 'Opaque'; SNMP_OID : 'ObjectID'; SNMP_BITSTRING : 'BitString'; SNMP_STRING : 'String'; SNMP_HEXSTRING : 'HexString'; // Declaration of LEXERs for data types T_INTLIST3 : T_INT ',' T_INT ',' T_INT; T_INT // Integer values : '-'? S_NUM+; T_HEXSTR // Hexadecimal strings ("0x001122..") : '0' ('x'|'X') S_HEX+; T_MACADDR // MAC address ("00:11:22:33:44:55") : S_HEX S_HEX ':' S_HEX S_HEX ':' S_HEX S_HEX ':' S_HEX S_HEX ':' S_HEX S_HEX ':' S_HEX S_HEX; T_MACMASK // MAC+mask : T_MACADDR '/' T_MACADDR; T_IP // IPv4 address : S_NUM+ '.' S_NUM+ '.' S_NUM+ '.' S_NUM+; T_IPV6 : S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC ':' S_HEX4FAC | ((S_HEX4FAC ':')* S_HEX4FAC+)? '::' ((S_HEX4FAC ':')* S_HEX4FAC+)? ; T_OID // SNMP OID (text or number) : '.'? ((S_ALPHANUM | '_' | '-')+ '.')+ (S_ALPHANUM)+ | '.'? ((S_ALPHANUM | '_' | '-')+ '.')+ '\'' (S_ALPHANUM | '[' | ']' | ',' | ':' | '_' | '-' | '.')+ '\'' | '.'? ((S_ALPHANUM | '_' | '-')+ '.')+ '"' (S_ALPHANUM | '[' | ']' | ',' | ':' | '_' | '-' | '.')+ '"' ; T_TIMETICKS // Tiketicks ("00:11:22.123") : (S_NUM+ ':')(S_NUM+ ':')(S_NUM+ ':') '.' S_NUM+ ; T_STRING // String : '"' ~'"'* '"'; // Declaration of fragment LEXERs for basic bricks fragment S_HEX4FAC : S_HEX ((S_HEX? S_HEX)? S_HEX)?; fragment S_NUM : ('0'..'9'); fragment S_HEX : ('0'..'9' | 'a'..'f' | 'A'..'F'); fragment S_ALPHA : ('a'..'z' | 'A'..'Z'); fragment S_ALPHANUM : (S_ALPHA | S_NUM);