package org.batfish.representation.juniper;
import java.util.List;
import java.util.Map;
import org.batfish.common.BatfishException;
import org.batfish.datamodel.IpAccessListLine;
import org.batfish.datamodel.IpProtocol;
import org.batfish.datamodel.NamedPort;
import org.batfish.datamodel.SubRange;
import org.batfish.common.Warnings;
import org.batfish.representation.juniper.BaseApplication.Term;
public enum JunosApplication implements Application {
JUNOS_AOL,
JUNOS_BGP,
JUNOS_BIFF,
JUNOS_BOOTPC,
JUNOS_BOOTPS,
JUNOS_CHARGEN,
JUNOS_CIFS,
JUNOS_CVSPSERVER,
JUNOS_DHCP_CLIENT,
JUNOS_DHCP_RELAY,
JUNOS_DHCP_SERVER,
JUNOS_DISCARD,
JUNOS_DNS_TCP,
JUNOS_DNS_UDP,
JUNOS_ECHO,
JUNOS_FINGER,
JUNOS_FTP,
JUNOS_GNUTELLA,
JUNOS_GOPHER,
JUNOS_GRE,
JUNOS_GTP,
JUNOS_H323,
JUNOS_HTTP,
JUNOS_HTTP_EXT,
JUNOS_HTTPS,
JUNOS_ICMP_ALL,
JUNOS_ICMP_PING,
JUNOS_ICMP6_ALL,
JUNOS_ICMP6_DST_UNREACH_ADDR,
JUNOS_ICMP6_DST_UNREACH_ADMIN,
JUNOS_ICMP6_DST_UNREACH_BEYOND,
JUNOS_ICMP6_DST_UNREACH_PORT,
JUNOS_ICMP6_DST_UNREACH_ROUTE,
JUNOS_ICMP6_ECHO_REPLY,
JUNOS_ICMP6_ECHO_REQUEST,
JUNOS_ICMP6_PACKET_TO_BIG,
JUNOS_ICMP6_PARAM_PROB_HEADER,
JUNOS_ICMP6_PARAM_PROB_NEXTHDR,
JUNOS_ICMP6_PARAM_PROB_OPTION,
JUNOS_ICMP6_TIME_EXCEED_REASSEMBLY,
JUNOS_ICMP6_TIME_EXCEED_TRANSIT,
JUNOS_IDENT,
JUNOS_IKE,
JUNOS_IKE_NAT,
JUNOS_IMAP,
JUNOS_IMAPS,
JUNOS_INTERNET_LOCATOR_SERVICE,
JUNOS_IRC,
JUNOS_L2TP,
JUNOS_LDAP,
JUNOS_LDP_TCP,
JUNOS_LDP_UDP,
JUNOS_LPR,
JUNOS_MAIL,
JUNOS_MGCP,
JUNOS_MGCP_CA,
JUNOS_MGCP_UA,
JUNOS_MS_RPC,
JUNOS_MS_RPC_ANY,
JUNOS_MS_RPC_EPM,
JUNOS_MS_RPC_IIS_COM,
JUNOS_MS_RPC_IIS_COM_1,
JUNOS_MS_RPC_IIS_COM_ADMINBASE,
JUNOS_MS_RPC_MSEXCHANGE,
JUNOS_MS_RPC_MSEXCHANGE_DIRECTORY_NSP,
JUNOS_MS_RPC_MSEXCHANGE_DIRECTORY_RFR,
JUNOS_MS_RPC_MSEXCHANGE_INFO_STORE,
JUNOS_MS_RPC_TCP,
JUNOS_MS_RPC_UDP,
JUNOS_MS_RPC_UUID_ANY_TCP,
JUNOS_MS_RPC_UUID_ANY_UDP,
JUNOS_MS_RPC_WMIC,
JUNOS_MS_RPC_WMIC_ADMIN,
JUNOS_MS_RPC_WMIC_ADMIN2,
JUNOS_MS_RPC_WMIC_MGMT,
JUNOS_MS_RPC_WMIC_WEBM_CALLRESULT,
JUNOS_MS_RPC_WMIC_WEBM_CLASSOBJECT,
JUNOS_MS_RPC_WMIC_WEBM_LEVEL1LOGIN,
JUNOS_MS_RPC_WMIC_WEBM_LOGIN_CLIENTID,
JUNOS_MS_RPC_WMIC_WEBM_LOGIN_HELPER,
JUNOS_MS_RPC_WMIC_WEBM_OBJECTSINK,
JUNOS_MS_RPC_WMIC_WEBM_REFRESHING_SERVICES,
JUNOS_MS_RPC_WMIC_WEBM_REMOTE_REFRESHER,
JUNOS_MS_RPC_WMIC_WEBM_SERVICES,
JUNOS_MS_RPC_WMIC_WEBM_SHUTDOWN,
JUNOS_MS_SQL,
JUNOS_MSN,
JUNOS_NBDS,
JUNOS_NBNAME,
JUNOS_NETBIOS_SESSION,
JUNOS_NFS,
JUNOS_NFSD_TCP,
JUNOS_NFSD_UDP,
JUNOS_NNTP,
JUNOS_NS_GLOBAL,
JUNOS_NS_GLOBAL_PRO,
JUNOS_NSM,
JUNOS_NTALK,
JUNOS_NTP,
JUNOS_OSPF,
JUNOS_PC_ANYWHERE,
JUNOS_PERSISTENT_NAT,
JUNOS_PING,
JUNOS_PINGV6,
JUNOS_POP3,
JUNOS_PPTP,
JUNOS_PRINTER,
JUNOS_R2CP,
JUNOS_RADACCT,
JUNOS_RADIUS,
JUNOS_REALAUDIO,
JUNOS_RIP,
JUNOS_ROUTING_INBOUND,
JUNOS_RSH,
JUNOS_RTSP,
JUNOS_SCCP,
JUNOS_SCTP_ANY,
JUNOS_SIP,
JUNOS_SMB,
JUNOS_SMB_SESSION,
JUNOS_SMTP,
JUNOS_SNMP_AGENTX,
JUNOS_SNPP,
JUNOS_SQL_MONITOR,
JUNOS_SQLNET_V1,
JUNOS_SQLNET_V2,
JUNOS_SSH,
JUNOS_STUN,
JUNOS_SUN_RPC,
JUNOS_SUN_RPC_ANY,
JUNOS_SUN_RPC_ANY_TCP,
JUNOS_SUN_RPC_ANY_UDP,
JUNOS_SUN_RPC_MOUNTD,
JUNOS_SUN_RPC_MOUNTD_TCP,
JUNOS_SUN_RPC_MOUNTD_UDP,
JUNOS_SUN_RPC_NFS,
JUNOS_SUN_RPC_NFS_ACCESS,
JUNOS_SUN_RPC_NFS_TCP,
JUNOS_SUN_RPC_NFS_UDP,
JUNOS_SUN_RPC_NLOCKMGR,
JUNOS_SUN_RPC_NLOCKMGR_TCP,
JUNOS_SUN_RPC_NLOCKMGR_UDP,
JUNOS_SUN_RPC_PORTMAP,
JUNOS_SUN_RPC_PORTMAP_TCP,
JUNOS_SUN_RPC_PORTMAP_UDP,
JUNOS_SUN_RPC_RQUOTAD,
JUNOS_SUN_RPC_RQUOTAD_TCP,
JUNOS_SUN_RPC_RQUOTAD_UDP,
JUNOS_SUN_RPC_RUSERD,
JUNOS_SUN_RPC_RUSERD_TCP,
JUNOS_SUN_RPC_RUSERD_UDP,
JUNOS_SUN_RPC_SADMIND,
JUNOS_SUN_RPC_SADMIND_TCP,
JUNOS_SUN_RPC_SADMIND_UDP,
JUNOS_SUN_RPC_SPRAYD,
JUNOS_SUN_RPC_SPRAYD_TCP,
JUNOS_SUN_RPC_SPRAYD_UDP,
JUNOS_SUN_RPC_STATUS,
JUNOS_SUN_RPC_STATUS_TCP,
JUNOS_SUN_RPC_STATUS_UDP,
JUNOS_SUN_RPC_TCP,
JUNOS_SUN_RPC_UDP,
JUNOS_SUN_RPC_WALLD,
JUNOS_SUN_RPC_WALLD_TCP,
JUNOS_SUN_RPC_WALLD_UDP,
JUNOS_SUN_RPC_YPBIND,
JUNOS_SUN_RPC_YPBIND_TCP,
JUNOS_SUN_RPC_YPBIND_UDP,
JUNOS_SUN_RPC_YPSERV,
JUNOS_SUN_RPC_YPSERV_TCP,
JUNOS_SUN_RPC_YPSERV_UDP,
JUNOS_SYSLOG,
JUNOS_TACACS,
JUNOS_TACACS_DS,
JUNOS_TALK,
JUNOS_TCP_ANY,
JUNOS_TELNET,
JUNOS_TFTP,
JUNOS_UDP_ANY,
JUNOS_UUCP,
JUNOS_VDO_LIVE,
JUNOS_VNC,
JUNOS_WAIS,
JUNOS_WHO,
JUNOS_WHOIS,
JUNOS_WINFRAME,
JUNOS_WXCONTROL,
JUNOS_X_WINDOWS,
JUNOS_XNM_CLEAR_TEXT,
JUNOS_XNM_SSL,
JUNOS_YMSG;
private BaseApplication _baseApplication;
private boolean _initialized;
@Override
public void applyTo(IpAccessListLine srcLine, List<IpAccessListLine> lines,
Warnings w) {
init();
_baseApplication.applyTo(srcLine, lines, w);
}
@Override
public boolean getIpv6() {
init();
return _baseApplication.getIpv6();
}
private synchronized void init() {
if (_initialized) {
return;
}
_initialized = true;
_baseApplication = new BaseApplication(name());
Map<String, Term> terms = _baseApplication.getTerms();
switch (this) {
case JUNOS_FTP: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.FTP.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_HTTP: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.HTTP.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_HTTPS: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.HTTPS.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_ICMP_ALL: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.ICMP);
terms.put(t1Name, t1);
break;
}
case JUNOS_ICMP6_ALL: {
_baseApplication.setIpv6(true);
// TODO
break;
}
case JUNOS_NNTP: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.NNTP.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_NTP: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.UDP);
int portNum = NamedPort.NTP.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_PPTP: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.PPTP.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
case JUNOS_SSH: {
String t1Name = "t1";
Term t1 = new Term(t1Name);
IpAccessListLine l1 = t1.getLine();
l1.getIpProtocols().add(IpProtocol.TCP);
int portNum = NamedPort.SSH.number();
l1.getDstPorts().add(new SubRange(portNum, portNum));
terms.put(t1Name, t1);
break;
}
// $CASES-OMITTED$
default:
throw new BatfishException(
"missing definition for pre-defined junos application: \""
+ name() + "\"");
}
}
}