Skip to main content

stackforge_core/layer/ipv4/
protocol.rs

1//! IPv4 Protocol numbers.
2//!
3//! Registry of common IP protocol numbers assigned by IANA.
4//! These values correspond to the "Protocol" field in the IPv4 header.
5
6/// IPv6 Hop-by-Hop Option (RFC 8200)
7pub const HOPOPT: u8 = 0;
8
9/// Internet Control Message (RFC 792)
10pub const ICMP: u8 = 1;
11
12/// Internet Group Management (RFC 1112)
13pub const IGMP: u8 = 2;
14
15/// Gateway-to-Gateway (RFC 823)
16pub const GGP: u8 = 3;
17
18/// IP in IP (encapsulation) (RFC 2003)
19pub const IPIP: u8 = 4;
20
21/// IPv4 Encapsulation (alias for IPIP)
22pub const IPV4: u8 = 4;
23
24/// Stream Internet (RFC 1190)
25pub const ST: u8 = 5;
26
27/// Transmission Control (RFC 793)
28pub const TCP: u8 = 6;
29
30/// CBT (RFC 2189)
31pub const CBT: u8 = 7;
32
33/// Exterior Gateway Protocol (RFC 888)
34pub const EGP: u8 = 8;
35
36/// IGP (any private interior gateway: used by Cisco for their IGRP)
37pub const IGP: u8 = 9;
38
39/// BBN RCC Monitoring
40pub const BBN_RCC_MON: u8 = 10;
41
42/// Network Voice Protocol (RFC 741)
43pub const NVP_II: u8 = 11;
44
45/// PUP
46pub const PUP: u8 = 12;
47
48/// ARGUS
49pub const ARGUS: u8 = 13;
50
51/// EMCON
52pub const EMCON: u8 = 14;
53
54/// Cross Net Debugger
55pub const XNET: u8 = 15;
56
57/// Chaos
58pub const CHAOS: u8 = 16;
59
60/// User Datagram (RFC 768)
61pub const UDP: u8 = 17;
62
63/// Multiplexing
64pub const MUX: u8 = 18;
65
66/// DCN Measurement Subsystems
67pub const DCN_MEAS: u8 = 19;
68
69/// Host Monitoring (RFC 869)
70pub const HMP: u8 = 20;
71
72/// Packet Radio Measurement
73pub const PRM: u8 = 21;
74
75/// XEROX NS IDP
76pub const XNS_IDP: u8 = 22;
77
78/// Trunk-1
79pub const TRUNK_1: u8 = 23;
80
81/// Trunk-2
82pub const TRUNK_2: u8 = 24;
83
84/// Leaf-1
85pub const LEAF_1: u8 = 25;
86
87/// Leaf-2
88pub const LEAF_2: u8 = 26;
89
90/// Reliable Data Protocol (RFC 908)
91pub const RDP: u8 = 27;
92
93/// Internet Reliable Transaction (RFC 938)
94pub const IRTP: u8 = 28;
95
96/// ISO Transport Class 4 (RFC 905)
97pub const ISO_TP4: u8 = 29;
98
99/// Bulk Data Transfer Protocol (RFC 969)
100pub const NETBLT: u8 = 30;
101
102/// MFE Network Services Protocol
103pub const MFE_NSP: u8 = 31;
104
105/// MERIT Internodal Protocol
106pub const MERIT_INP: u8 = 32;
107
108/// Datagram Congestion Control Protocol (RFC 4340)
109pub const DCCP: u8 = 33;
110
111/// Third Party Connect Protocol
112pub const THIRD_PARTY_CONNECT: u8 = 34;
113
114/// IDPR (RFC 1479)
115pub const IDPR: u8 = 35;
116
117/// XTP
118pub const XTP: u8 = 36;
119
120/// Datagram Delivery Protocol
121pub const DDP: u8 = 37;
122
123/// IDPR Control Message Transport Proto
124pub const IDPR_CMTP: u8 = 38;
125
126/// TP++ Transport Protocol
127pub const TP_PLUS_PLUS: u8 = 39;
128
129/// IL Transport Protocol
130pub const IL: u8 = 40;
131
132/// IPv6 Encapsulation (RFC 2473)
133pub const IPV6: u8 = 41;
134
135/// Source Demand Routing Protocol
136pub const SDRP: u8 = 42;
137
138/// Routing Header for IPv6 (RFC 8200)
139pub const IPV6_ROUTE: u8 = 43;
140
141/// Fragment Header for IPv6 (RFC 8200)
142pub const IPV6_FRAG: u8 = 44;
143
144/// Inter-Domain Policy Routing Protocol
145pub const IDRP: u8 = 45;
146
147/// Reservation Protocol (RFC 2205)
148pub const RSVP: u8 = 46;
149
150/// Generic Routing Encapsulation (RFC 2784)
151pub const GRE: u8 = 47;
152
153/// Dynamic Source Routing Protocol (RFC 4728)
154pub const DSR: u8 = 48;
155
156/// BNA
157pub const BNA: u8 = 49;
158
159/// Encap Security Payload (RFC 4303)
160pub const ESP: u8 = 50;
161
162/// Authentication Header (RFC 4302)
163pub const AH: u8 = 51;
164
165/// Integrated Net Layer Security  TUBA
166pub const I_NLSP: u8 = 52;
167
168/// IP with Encryption
169pub const SWIPE: u8 = 53;
170
171/// NBMA Address Resolution Protocol (RFC 1735)
172pub const NARP: u8 = 54;
173
174/// IP Mobility (RFC 2004)
175pub const MOBILE: u8 = 55;
176
177/// Transport Layer Security Protocol using Kryptonet key management
178pub const TLSP: u8 = 56;
179
180/// SKIP
181pub const SKIP: u8 = 57;
182
183/// ICMP for IPv6 (RFC 4443)
184pub const ICMPV6: u8 = 58;
185
186/// No Next Header for IPv6 (RFC 8200)
187pub const IPV6_NONXT: u8 = 59;
188
189/// Destination Options for IPv6 (RFC 8200)
190pub const IPV6_OPTS: u8 = 60;
191
192/// Any host internal protocol
193pub const ANY_HOST_INTERNAL: u8 = 61;
194
195/// CFTP
196pub const CFTP: u8 = 62;
197
198/// Any local network
199pub const ANY_LOCAL_NETWORK: u8 = 63;
200
201/// SATNET and Backroom EXPAK
202pub const SAT_EXPAK: u8 = 64;
203
204/// Kryptolan
205pub const KRYPTOLAN: u8 = 65;
206
207/// MIT Remote Virtual Disk Protocol
208pub const RVD: u8 = 66;
209
210/// Internet Pluribus Packet Core
211pub const IPPC: u8 = 67;
212
213/// Any distributed file system
214pub const ANY_DIST_FS: u8 = 68;
215
216/// SATNET Monitoring
217pub const SAT_MON: u8 = 69;
218
219/// VISA Protocol
220pub const VISA: u8 = 70;
221
222/// Internet Packet Core Utility
223pub const IPCV: u8 = 71;
224
225/// Computer Protocol Network Executive
226pub const CPNX: u8 = 72;
227
228/// Computer Protocol Heart Beat
229pub const CPHB: u8 = 73;
230
231/// Wang Span Network
232pub const WSN: u8 = 74;
233
234/// Packet Video Protocol
235pub const PVP: u8 = 75;
236
237/// Backroom SATNET Monitoring
238pub const BR_SAT_MON: u8 = 76;
239
240/// SUN ND PROTOCOL-Temporary
241pub const SUN_ND: u8 = 77;
242
243/// WIDEBAND Monitoring
244pub const WB_MON: u8 = 78;
245
246/// WIDEBAND EXPAK
247pub const WB_EXPAK: u8 = 79;
248
249/// ISO Internet Protocol
250pub const ISO_IP: u8 = 80;
251
252/// VMTP
253pub const VMTP: u8 = 81;
254
255/// SECURE-VMTP
256pub const SECURE_VMTP: u8 = 82;
257
258/// VINES
259pub const VINES: u8 = 83;
260
261/// Transaction Transport Protocol (IPTM)
262pub const TTP: u8 = 84;
263
264/// NSFNET-IGP
265pub const NSFNET_IGP: u8 = 85;
266
267/// Dissimilar Gateway Protocol
268pub const DGP: u8 = 86;
269
270/// TCF
271pub const TCF: u8 = 87;
272
273/// EIGRP (RFC 7868)
274pub const EIGRP: u8 = 88;
275
276/// OSPF (RFC 2328)
277pub const OSPFIGP: u8 = 89;
278
279/// Sprite RPC Protocol
280pub const SPRITE_RPC: u8 = 90;
281
282/// Locus Address Resolution Protocol
283pub const LARP: u8 = 91;
284
285/// Multicast Transport Protocol
286pub const MTP: u8 = 92;
287
288/// AX.25 Frames
289pub const AX_25: u8 = 93;
290
291/// IP-within-IP Encapsulation Protocol
292pub const IPIP_ENCAP: u8 = 94;
293
294/// Mobile Internetworking Control Pro. (RFC 2003)
295pub const MICP: u8 = 95;
296
297/// Semaphore Communications Sec. Pro.
298pub const SCC_SP: u8 = 96;
299
300/// Ethernet-within-IP Encapsulation (RFC 3378)
301pub const ETHERIP: u8 = 97;
302
303/// Encapsulation Header (RFC 1241)
304pub const ENCAP: u8 = 98;
305
306/// Any private encryption scheme
307pub const ANY_ENC: u8 = 99;
308
309/// GMTP
310pub const GMTP: u8 = 100;
311
312/// Ipsilon Flow Management Protocol
313pub const IFMP: u8 = 101;
314
315/// PNNI over IP
316pub const PNNI: u8 = 102;
317
318/// Protocol Independent Multicast (RFC 7761)
319pub const PIM: u8 = 103;
320
321/// ARIS
322pub const ARIS: u8 = 104;
323
324/// SCPS
325pub const SCPS: u8 = 105;
326
327/// QNX
328pub const QNX: u8 = 106;
329
330/// Active Networks
331pub const AN: u8 = 107;
332
333/// IP Payload Compression Protocol (RFC 2393)
334pub const IPCOMP: u8 = 108;
335
336/// Sitara Networks Protocol
337pub const SNP: u8 = 109;
338
339/// Compaq Peer Protocol
340pub const COMPAQ_PEER: u8 = 110;
341
342/// IPX in IP
343pub const IPX_IN_IP: u8 = 111;
344
345/// Virtual Router Redundancy Protocol (RFC 5798)
346pub const VRRP: u8 = 112;
347
348/// PGM Reliable Transport Protocol
349pub const PGM: u8 = 113;
350
351/// Any 0-hop protocol
352pub const ANY_0_HOP: u8 = 114;
353
354/// Layer Two Tunneling Protocol (RFC 3931)
355pub const L2TP: u8 = 115;
356
357/// D-II Data Exchange (DX)
358pub const DDX: u8 = 116;
359
360/// Interactive Agent Transfer Protocol
361pub const IATP: u8 = 117;
362
363/// Schedule Transfer Protocol
364pub const STP: u8 = 118;
365
366/// `SpectraLink` Radio Protocol
367pub const SRP: u8 = 119;
368
369/// UTI
370pub const UTI: u8 = 120;
371
372/// Simple Message Protocol
373pub const SMP: u8 = 121;
374
375/// Simple Multicast Protocol
376pub const SM: u8 = 122;
377
378/// Performance Transparency Protocol
379pub const PTP: u8 = 123;
380
381/// ISIS over IPv4 (RFC 1142)
382pub const ISIS_OVER_IPV4: u8 = 124;
383
384/// CRTP
385pub const FIRE: u8 = 125;
386
387/// Combat Radio Transport Protocol
388pub const CRTP: u8 = 126;
389
390/// Combat Radio User Datagram
391pub const CRUDP: u8 = 127;
392
393/// SSCOPMCE
394pub const SSCOPMCE: u8 = 128;
395
396/// IPLT
397pub const IPLT: u8 = 129;
398
399/// Secure Packet Shield
400pub const SPS: u8 = 130;
401
402/// Private IP Encapsulation within IP
403pub const PIPE: u8 = 131;
404
405/// Stream Control Transmission Protocol (RFC 4960)
406pub const SCTP: u8 = 132;
407
408/// Fibre Channel
409pub const FC: u8 = 133;
410
411/// RSVP-E2E-IGNORE (RFC 3175)
412pub const RSVP_E2E_IGNORE: u8 = 134;
413
414/// Mobility Header (RFC 6275)
415pub const MOBILITY_HEADER: u8 = 135;
416
417/// `UDPLite` (RFC 3828)
418pub const UDPLITE: u8 = 136;
419
420/// MPLS-in-IP (RFC 4023)
421pub const MPLS_IN_IP: u8 = 137;
422
423/// MANET Protocols (RFC 5498)
424pub const MANET: u8 = 138;
425
426/// Host Identity Protocol (RFC 7401)
427pub const HIP: u8 = 139;
428
429/// Shim6 Protocol (RFC 5533)
430pub const SHIM6: u8 = 140;
431
432/// Wrapped Encapsulating Security Payload (RFC 5840)
433pub const WESP: u8 = 141;
434
435/// `RObust` Header Compression (RFC 5858)
436pub const ROHC: u8 = 142;
437
438/// Ethernet (RFC 8986)
439pub const ETHERNET: u8 = 143;
440
441/// AGGFRAG encapsulation payload for ESP (RFC 9347)
442pub const AGGFRAG: u8 = 144;
443
444/// Reserved
445pub const RESERVED: u8 = 255;
446
447/// Convert a string name to a protocol number (case-insensitive).
448#[must_use]
449pub fn from_name(name: &str) -> Option<u8> {
450    match name.to_ascii_lowercase().as_str() {
451        "ip" => Some(0), // Sometimes used as alias for HOPOPT
452        "ipv4" => Some(IPV4),
453        "icmp" => Some(ICMP),
454        "igmp" => Some(IGMP),
455        "ggp" => Some(GGP),
456        "ipip" => Some(IPIP),
457        "tcp" => Some(TCP),
458        "egp" => Some(EGP),
459        "igp" => Some(IGP),
460        "pup" => Some(PUP),
461        "udp" => Some(UDP),
462        "hmp" => Some(HMP),
463        "xns-idp" => Some(XNS_IDP),
464        "rdp" => Some(RDP),
465        "iso-tp4" => Some(ISO_TP4),
466        "dccp" => Some(DCCP),
467        "xtp" => Some(XTP),
468        "ddp" => Some(DDP),
469        "idpr-cmtp" => Some(IDPR_CMTP),
470        "ipv6" => Some(IPV6),
471        "ipv6-route" => Some(IPV6_ROUTE),
472        "ipv6-frag" => Some(IPV6_FRAG),
473        "idrp" => Some(IDRP),
474        "rsvp" => Some(RSVP),
475        "gre" => Some(GRE),
476        "esp" => Some(ESP),
477        "ah" => Some(AH),
478        "skip" => Some(SKIP),
479        "icmpv6" => Some(ICMPV6),
480        "ipv6-nonxt" => Some(IPV6_NONXT),
481        "ipv6-opts" => Some(IPV6_OPTS),
482        "eigrp" => Some(EIGRP),
483        "ospf" => Some(OSPFIGP),
484        "mtp" => Some(MTP),
485        "encap" => Some(ENCAP),
486        "pim" => Some(PIM),
487        "ipcomp" => Some(IPCOMP),
488        "vrrp" => Some(VRRP),
489        "l2tp" => Some(L2TP),
490        "isis" => Some(ISIS_OVER_IPV4),
491        "sctp" => Some(SCTP),
492        "fc" => Some(FC),
493        "mobility-header" => Some(MOBILITY_HEADER),
494        "udplite" => Some(UDPLITE),
495        "mpls-in-ip" => Some(MPLS_IN_IP),
496        "manet" => Some(MANET),
497        "hip" => Some(HIP),
498        "shim6" => Some(SHIM6),
499        "wesp" => Some(WESP),
500        "rohc" => Some(ROHC),
501        "ethernet" => Some(ETHERNET),
502        _ => None,
503    }
504}
505
506/// Get the string name for a protocol number.
507#[must_use]
508pub fn to_name(proto: u8) -> &'static str {
509    match proto {
510        HOPOPT => "HOPOPT",
511        ICMP => "ICMP",
512        IGMP => "IGMP",
513        GGP => "GGP",
514        IPIP => "IPIP",
515        ST => "ST",
516        TCP => "TCP",
517        CBT => "CBT",
518        EGP => "EGP",
519        IGP => "IGP",
520        BBN_RCC_MON => "BBN_RCC_MON",
521        NVP_II => "NVP_II",
522        PUP => "PUP",
523        ARGUS => "ARGUS",
524        EMCON => "EMCON",
525        XNET => "XNET",
526        CHAOS => "CHAOS",
527        UDP => "UDP",
528        MUX => "MUX",
529        DCN_MEAS => "DCN_MEAS",
530        HMP => "HMP",
531        PRM => "PRM",
532        XNS_IDP => "XNS_IDP",
533        TRUNK_1 => "TRUNK_1",
534        TRUNK_2 => "TRUNK_2",
535        LEAF_1 => "LEAF_1",
536        LEAF_2 => "LEAF_2",
537        RDP => "RDP",
538        IRTP => "IRTP",
539        ISO_TP4 => "ISO_TP4",
540        NETBLT => "NETBLT",
541        MFE_NSP => "MFE_NSP",
542        MERIT_INP => "MERIT_INP",
543        DCCP => "DCCP",
544        THIRD_PARTY_CONNECT => "THIRD_PARTY_CONNECT",
545        IDPR => "IDPR",
546        XTP => "XTP",
547        DDP => "DDP",
548        IDPR_CMTP => "IDPR_CMTP",
549        TP_PLUS_PLUS => "TP_PLUS_PLUS",
550        IL => "IL",
551        IPV6 => "IPV6",
552        SDRP => "SDRP",
553        IPV6_ROUTE => "IPV6_ROUTE",
554        IPV6_FRAG => "IPV6_FRAG",
555        IDRP => "IDRP",
556        RSVP => "RSVP",
557        GRE => "GRE",
558        DSR => "DSR",
559        BNA => "BNA",
560        ESP => "ESP",
561        AH => "AH",
562        I_NLSP => "I_NLSP",
563        SWIPE => "SWIPE",
564        NARP => "NARP",
565        MOBILE => "MOBILE",
566        TLSP => "TLSP",
567        SKIP => "SKIP",
568        ICMPV6 => "ICMPV6",
569        IPV6_NONXT => "IPV6_NONXT",
570        IPV6_OPTS => "IPV6_OPTS",
571        ANY_HOST_INTERNAL => "ANY_HOST_INTERNAL",
572        CFTP => "CFTP",
573        ANY_LOCAL_NETWORK => "ANY_LOCAL_NETWORK",
574        SAT_EXPAK => "SAT_EXPAK",
575        KRYPTOLAN => "KRYPTOLAN",
576        RVD => "RVD",
577        IPPC => "IPPC",
578        ANY_DIST_FS => "ANY_DIST_FS",
579        SAT_MON => "SAT_MON",
580        VISA => "VISA",
581        IPCV => "IPCV",
582        CPNX => "CPNX",
583        CPHB => "CPHB",
584        WSN => "WSN",
585        PVP => "PVP",
586        BR_SAT_MON => "BR_SAT_MON",
587        SUN_ND => "SUN_ND",
588        WB_MON => "WB_MON",
589        WB_EXPAK => "WB_EXPAK",
590        ISO_IP => "ISO_IP",
591        VMTP => "VMTP",
592        SECURE_VMTP => "SECURE_VMTP",
593        VINES => "VINES",
594        TTP => "TTP",
595        NSFNET_IGP => "NSFNET_IGP",
596        DGP => "DGP",
597        TCF => "TCF",
598        EIGRP => "EIGRP",
599        OSPFIGP => "OSPFIGP",
600        SPRITE_RPC => "SPRITE_RPC",
601        LARP => "LARP",
602        MTP => "MTP",
603        AX_25 => "AX_25",
604        IPIP_ENCAP => "IPIP_ENCAP",
605        MICP => "MICP",
606        SCC_SP => "SCC_SP",
607        ETHERIP => "ETHERIP",
608        ENCAP => "ENCAP",
609        ANY_ENC => "ANY_ENC",
610        GMTP => "GMTP",
611        IFMP => "IFMP",
612        PNNI => "PNNI",
613        PIM => "PIM",
614        ARIS => "ARIS",
615        SCPS => "SCPS",
616        QNX => "QNX",
617        AN => "AN",
618        IPCOMP => "IPCOMP",
619        SNP => "SNP",
620        COMPAQ_PEER => "COMPAQ_PEER",
621        IPX_IN_IP => "IPX_IN_IP",
622        VRRP => "VRRP",
623        PGM => "PGM",
624        ANY_0_HOP => "ANY_0_HOP",
625        L2TP => "L2TP",
626        DDX => "DDX",
627        IATP => "IATP",
628        STP => "STP",
629        SRP => "SRP",
630        UTI => "UTI",
631        SMP => "SMP",
632        SM => "SM",
633        PTP => "PTP",
634        ISIS_OVER_IPV4 => "ISIS_OVER_IPV4",
635        FIRE => "FIRE",
636        CRTP => "CRTP",
637        CRUDP => "CRUDP",
638        SSCOPMCE => "SSCOPMCE",
639        IPLT => "IPLT",
640        SPS => "SPS",
641        PIPE => "PIPE",
642        SCTP => "SCTP",
643        FC => "FC",
644        RSVP_E2E_IGNORE => "RSVP_E2E_IGNORE",
645        MOBILITY_HEADER => "MOBILITY_HEADER",
646        UDPLITE => "UDPLITE",
647        MPLS_IN_IP => "MPLS_IN_IP",
648        MANET => "MANET",
649        HIP => "HIP",
650        SHIM6 => "SHIM6",
651        WESP => "WESP",
652        ROHC => "ROHC",
653        ETHERNET => "ETHERNET",
654        AGGFRAG => "AGGFRAG",
655        RESERVED => "RESERVED",
656        _ => "UNKNOWN",
657    }
658}