package org.batfish.datamodel;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import org.batfish.common.BatfishException;
import com.fasterxml.jackson.annotation.JsonCreator;
public enum IpProtocol {
AHP(51),
AN(107),
ANY_0_HOP_PROTOCOL(114),
ANY_DISTRIBUTED_FILE_SYSTEM(68),
ANY_HOST_INTERNAL_PROTOCOL(61),
ANY_LOCAL_NETWORK(63),
ANY_PRIVATE_ENCRYPTION_SCHEME(99),
ARGUS(13),
ARIS(104),
AX25(93),
BBN_RCC_MON(10),
BNA(49),
BR_SAT_MON(76),
CBT(7),
CFTP(62),
CHAOS(16),
COMPAQ_PEER(110),
CPHB(73),
CPNX(72),
CRTP(126),
CRUDP(127),
DCCP(33),
DCN_MEAS(19),
DDP(37),
DDX(116),
DGP(86),
EGP(8),
EIGRP(88),
EMCON(14),
ENCAP(98),
ESP(50),
ETHERIP(97),
FC(133),
FIRE(125),
GGP(3),
GMTP(100),
GRE(47),
HIP(139),
HMP(20),
HOPOPT(0),
I_NLSP(52),
IATP(117),
ICMP(1),
IDPR(35),
IDPR_CMTP(38),
IDRP(45),
IFMP(101),
IGMP(2),
IGP(9),
IL(40),
IP(256),
IPComp(108),
IPCU(71),
IPINIP(4),
IPIP(94),
IPLT(129),
IPPC(67),
IPV6(41),
IPV6_FRAG(44),
IPV6_ICMP(58),
IPV6_NO_NXT(59),
IPV6_OPTS(60),
IPV6_ROUTE(43),
IPX_IN_IP(111),
IRTP(28),
ISIS(124),
ISO_IP(80),
ISO_TP4(29),
KRYPTOLAN(65),
L2TP(115),
LARP(91),
LEAF1(25),
LEAF2(26),
MANAET(138),
MERIT_INP(32),
MFE_NSP(31),
MHRP(48),
MICP(95),
MOBILE(55),
MOBILITY(135),
MPLS_IN_IP(137),
MTP(92),
MUX(18),
NARP(54),
NETBLT(30),
NSFNET_IGP(85),
NVPII(11),
OSPF(89),
PGM(113),
PIM(103),
PIPE(131),
PNNI(102),
PRM(21),
PTP(123),
PUP(12),
PVP(75),
QNX(106),
RDP(27),
ROHC(142),
RSVP(46),
RSVP_E2E_IGNORE(134),
RVD(66),
SAT_EXPAK(64),
SAT_MON(69),
SCC_SP(96),
SCPS(105),
SCTP(132),
SDRP(42),
SECURE_VMTP(82),
SHIM6(140),
SKIP(57),
SM(122),
SMP(121),
SNP(109),
SPRITE_RPC(90),
SPS(130),
SRP(119),
SSCOPMCE(128),
ST(5),
STP(118),
SUN_ND(77),
SWIPE(53),
TCF(87),
TCP(6),
THREE_PC(34),
TLSP(56),
TPPLUSPLUS(39),
TRUNK1(23),
TRUNK2(24),
TTP(84),
UDP(17),
UDP_LITE(136),
UNNAMED_143(143),
UNNAMED_144(144),
UNNAMED_145(145),
UNNAMED_146(146),
UNNAMED_147(147),
UNNAMED_148(148),
UNNAMED_149(149),
UNNAMED_150(150),
UNNAMED_151(151),
UNNAMED_152(152),
UNNAMED_153(153),
UNNAMED_154(154),
UNNAMED_155(155),
UNNAMED_156(156),
UNNAMED_157(157),
UNNAMED_158(158),
UNNAMED_159(159),
UNNAMED_160(160),
UNNAMED_161(161),
UNNAMED_162(162),
UNNAMED_163(163),
UNNAMED_164(164),
UNNAMED_165(165),
UNNAMED_166(166),
UNNAMED_167(167),
UNNAMED_168(168),
UNNAMED_169(169),
UNNAMED_170(170),
UNNAMED_171(171),
UNNAMED_172(172),
UNNAMED_173(173),
UNNAMED_174(174),
UNNAMED_175(175),
UNNAMED_176(176),
UNNAMED_177(177),
UNNAMED_178(178),
UNNAMED_179(179),
UNNAMED_180(180),
UNNAMED_181(181),
UNNAMED_182(182),
UNNAMED_183(183),
UNNAMED_184(184),
UNNAMED_185(185),
UNNAMED_186(186),
UNNAMED_187(187),
UNNAMED_188(188),
UNNAMED_189(189),
UNNAMED_190(190),
UNNAMED_191(191),
UNNAMED_192(192),
UNNAMED_193(193),
UNNAMED_194(194),
UNNAMED_195(195),
UNNAMED_196(196),
UNNAMED_197(197),
UNNAMED_198(198),
UNNAMED_199(199),
UNNAMED_200(200),
UNNAMED_201(201),
UNNAMED_202(202),
UNNAMED_203(203),
UNNAMED_204(204),
UNNAMED_205(205),
UNNAMED_206(206),
UNNAMED_207(207),
UNNAMED_208(208),
UNNAMED_209(209),
UNNAMED_210(210),
UNNAMED_211(211),
UNNAMED_212(212),
UNNAMED_213(213),
UNNAMED_214(214),
UNNAMED_215(215),
UNNAMED_216(216),
UNNAMED_217(217),
UNNAMED_218(218),
UNNAMED_219(219),
UNNAMED_220(220),
UNNAMED_221(221),
UNNAMED_222(222),
UNNAMED_223(223),
UNNAMED_224(224),
UNNAMED_225(225),
UNNAMED_226(226),
UNNAMED_227(227),
UNNAMED_228(228),
UNNAMED_229(229),
UNNAMED_230(230),
UNNAMED_231(231),
UNNAMED_232(232),
UNNAMED_233(233),
UNNAMED_234(234),
UNNAMED_235(235),
UNNAMED_236(236),
UNNAMED_237(237),
UNNAMED_238(238),
UNNAMED_239(239),
UNNAMED_240(240),
UNNAMED_241(241),
UNNAMED_242(242),
UNNAMED_243(243),
UNNAMED_244(244),
UNNAMED_245(245),
UNNAMED_246(246),
UNNAMED_247(247),
UNNAMED_248(248),
UNNAMED_249(249),
UNNAMED_250(250),
UNNAMED_251(251),
UNNAMED_252(252),
UNNAMED_253(253),
UNNAMED_254(254),
UNNAMED_255(255),
UTI(120),
VINES(83),
VISA(70),
VMTP(81),
VRRP(112),
WB_EXPAK(79),
WB_MON(78),
WESP(141),
WSN(74),
XNET(15),
XNS_IDP(22),
XTP(36);
public static final Comparator<IpProtocol> BY_NUMBER = (p1, p2) -> Integer
.compare(p1.number(), p2.number());
private static final Map<Integer, IpProtocol> NUMBER_TO_PROTOCOL_MAP = buildNumberToProtocolMap();
private synchronized static Map<Integer, IpProtocol> buildNumberToProtocolMap() {
Map<Integer, IpProtocol> map = new HashMap<>();
for (IpProtocol protocol : values()) {
map.put(protocol._number, protocol);
}
return map;
}
public static IpProtocol fromNumber(int number) {
IpProtocol ret = NUMBER_TO_PROTOCOL_MAP.get(number);
if (ret == null) {
throw new BatfishException(
"missing enumeration for protocol number: " + number);
}
return ret;
}
@JsonCreator
public static IpProtocol fromString(String str) {
char firstChar = str.charAt(0);
if (firstChar >= '0' && firstChar <= '9') {
int number = Integer.parseInt(str);
return fromNumber(number);
}
else {
return valueOf(str.toUpperCase());
}
}
private int _number;
private IpProtocol(int number) {
_number = number;
}
public int number() {
return _number;
}
}