github.com/haraldrudell/parl@v0.4.176/iana/protocol.go (about)

     1  /*
     2  © 2022–present Harald Rudell <harald.rudell@gmail.com> (https://haraldrudell.github.io/haraldrudell/)
     3  ISC License
     4  */
     5  
     6  // Package iana provides iana-standardized Internet protocols, port numbers, address families and
     7  // an Internet-socket identifier
     8  package iana
     9  
    10  import (
    11  	"github.com/haraldrudell/parl/ints"
    12  	"github.com/haraldrudell/parl/perrors"
    13  	"github.com/haraldrudell/parl/sets"
    14  	"golang.org/x/exp/constraints"
    15  )
    16  
    17  // Protocol represents iana Assigned Internet Protocol Numbers for IPv4 and IPv6.
    18  //   - Protocol is ordered
    19  //   - Protocol implements fmt.Stringer
    20  //   - Protocol has methods IsValid Description Int Uint8
    21  //
    22  // IANA [protocol-numbers]
    23  //
    24  // [protocol-numbers]: https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml
    25  type Protocol uint8
    26  
    27  const (
    28  	IPhopopt   Protocol = iota       // IPv6 Hop-by-Hop Option IPv6xh RFC8200
    29  	IPicmp                           // Internet Control Message RFC792
    30  	IPigmp                           // IGMP Internet Group Management RFC1112
    31  	IPggp                            // GGP Gateway-to-Gateway RFC823
    32  	IPv4                             // IPv4 IPv4 encapsulation RFC2003
    33  	IPst                             // ST Stream RFC1190 RFC1819
    34  	IPtcp                            // TCP Transmission Control RFC9293
    35  	IPcbt                            // CBT CBT
    36  	IPegp                            // EGP Exterior Gateway Protocol RFC888
    37  	IPigp                            // IGP any private interior gateway
    38  	IPbbn                            // BBN-RCC-MON BBN RCC Monitoring
    39  	IPnvp                            // NVP-II Network Voice Protocol RFC741
    40  	IPpup                            // PUP PUP
    41  	IPargus                          // ARGUS (deprecated) ARGUS
    42  	IPemcon                          // EMCON EMCON
    43  	IPxnet                           // XNET Cross Net Debugger
    44  	IPchaos                          // CHAOS Chaos
    45  	IPudp                            // UDP User Datagram RFC768
    46  	IPmux                            // MUX Multiplexing
    47  	IPdcn                            // DCN-MEAS DCN Measurement Subsystems
    48  	IPhmp                            // HMP Host Monitoring RFC869
    49  	IPprm                            // PRM Packet Radio Measurement
    50  	IPxns                            // XNS-IDP XEROX NS IDP
    51  	IPtrunk1                         // TRUNK-1 Trunk-1
    52  	IPtrunk2                         // TRUNK-2 Trunk-2
    53  	IPleaf1                          // LEAF-1 Leaf-1
    54  	IPleaf2                          // LEAF-2 Leaf-2
    55  	IPrdp                            // RDP Reliable Data Protocol RFC908
    56  	IPirtp                           // IRTP Internet Reliable Transaction RFC938
    57  	IPisotp4                         // ISO-TP4 ISO Transport Protocol Class 4 RFC905
    58  	IPnetblt                         // NETBLT Bulk Data Transfer Protocol RFC969
    59  	IPmfe                            // MFE-NSP MFE Network Services Protocol
    60  	IPmerit                          // MERIT-INP MERIT Internodal Protocol
    61  	IPdccp                           // DCCP Datagram Congestion Control Protocol RFC4340
    62  	IP3pc                            // 3PC Third Party Connect Protocol
    63  	IPidpr                           // IDPR Inter-Domain Policy Routing Protocol
    64  	IPxtp                            // XTP XTP
    65  	IPddp                            // DDP Datagram Delivery Protocol
    66  	IPidprcmtp                       // IDPR-CMTP IDPR Control Message Transport Proto
    67  	IPtp                             // TP++ TP++ Transport Protocol
    68  	IPil                             // IL IL Transport Protocol
    69  	IPv6                             // IPv6 IPv6 encapsulation RFC2473
    70  	IPsdrp                           // SDRP Source Demand Routing Protocol
    71  	IPv6route                        // IPv6-Route Routing Header for IPv6 IPv6xh
    72  	IPv6frag                         // IPv6-Frag Fragment Header for IPv6 IPv6xh
    73  	IPidrp                           // IDRP Inter-Domain Routing Protocol
    74  	IPrsvp                           // RSVP Reservation Protocol RFC2205 RFC3209
    75  	IPgre                            // GRE Generic Routing Encapsulation RFC2784
    76  	IPdsr                            // DSR Dynamic Source Routing Protocol RFC4728
    77  	IPbna                            // BNA BNA
    78  	IPesp                            // ESP Encap Security Payload IPv6xh RFC4303
    79  	IPah                             // AH Authentication Header IPv6xh RFC4302
    80  	IPinlsp                          // I-NLSP Integrated Net Layer Security TUBA
    81  	IPswipe                          // SWIPE (deprecated) IP with Encryption
    82  	IPnarp                           // NARP NBMA Address Resolution Protocol RFC1735
    83  	IPmobile                         // MOBILE IP Mobility
    84  	IPtlsp                           // TLSP Transport Layer Security Protocol using Kryptonet key management
    85  	IPskip                           // SKIP SKIP
    86  	IPv6icmp                         // IPv6-ICMP ICMP for IPv6 RFC8200
    87  	IPv6nonxt                        // IPv6-NoNxt No Next Header for IPv6 RFC8200
    88  	IPv6opts                         // IPv6-Opts Destination Options for IPv6 IPv6xh RFC8200
    89  	IPanyhost                        // ANYHOST any host internal protocol
    90  	IPcftp                           // CFTP CFTP Network Message
    91  	IPanynw                          // ANYNW any local network
    92  	IPsat                            // SAT-EXPAK SATNET and Backroom EXPAK
    93  	IPkrypto                         // KRYPTOLAN Kryptolan
    94  	IPrvd                            // RVD MIT Remote Virtual Disk Protocol
    95  	IPippc                           // IPPC Internet Pluribus Packet Core
    96  	IPanyfs                          // ANYFS any distributed file system
    97  	IPsatmon                         // SAT-MON SATNET Monitoring
    98  	IPvisa                           // VISA VISA Protocol
    99  	IPipcv                           // IPCV Internet Packet Core Utility
   100  	IPcpnx                           // CPNX Computer Protocol Network Executive
   101  	IPcphb                           // CPHB Computer Protocol Heart Beat
   102  	IPwsn                            // WSN Wang Span Network
   103  	IPpvp                            // PVP Packet Video Protocol
   104  	IPbrsat                          // BR-SAT-MON Backroom SATNET Monitoring
   105  	IPsun                            // SUN-ND SUN ND PROTOCOL
   106  	IPwbmon                          // WB-MON WIDEBAND Monitoring
   107  	IPwbexpak                        // WB-EXPAK WIDEBAND EXPAK
   108  	IPisoip                          // ISO-IP ISO Internet Protocol
   109  	IPvmtp                           // VMTP VMTP
   110  	IPsvmtp                          // SECURE-VMTP SECURE-VMTP
   111  	IPvines                          // VINES VINES
   112  	IPttp                            // TTP Transaction Transport Protocol, IPTM Internet Protocol Traffic Manager
   113  	IPnsf                            // NSFNET-IGP NSFNET-IGP
   114  	IPdgp                            // DGP Dissimilar Gateway Protocol
   115  	IPtcf                            // TCF TCF
   116  	IPeigrp                          // EIGRP EIGRP RFC7868
   117  	IPospf                           // OSPFIGP OSPFIGP RFC1583 RFC2328 RFC5340
   118  	IPrpc                            // Sprite-RPC Sprite RPC Protocol
   119  	IPlarp                           // LARP Locus Address Resolution Protocol
   120  	IPmtp                            // MTP Multicast Transport Protocol
   121  	IPax25                           // AX.25 AX.25 Frames
   122  	IPip                             // IPIP IP-within-IP Encapsulation Protocol
   123  	IPmicp                           // MICP (deprecated) Mobile Internetworking Control Pro.
   124  	IPscc                            // SCC-SP Semaphore Communications Sec. Pro.
   125  	IPether                          // ETHERIP Ethernet-within-IP Encapsulation RFC3378
   126  	IPencap                          // ENCAP Encapsulation Header RFC1241
   127  	IPenc                            // ENC any private encryption scheme
   128  	IPgmtp                           // GMTP GMTP RXB5
   129  	IPifmp                           // IFMP Ipsilon Flow Management Protocol
   130  	IPpnni                           // PNNI PNNI over IP
   131  	IPpim                            // PIM Protocol Independent Multicast RFC7761
   132  	IParis                           // ARIS ARIS
   133  	IPscps                           // SCPS SCPS
   134  	IPqnx                            // QNX QNX
   135  	IPan                             // A/N Active Networks
   136  	IPcomp                           // IPComp IP Payload Compression Protocol RFC2393
   137  	IPsnp                            // SNP Sitara Networks Protocol
   138  	IPcq                             // Compaq-Peer Compaq Peer Protocol
   139  	IPipx                            // IPX-in-IP IPX in IP
   140  	IPvrrp                           // VRRP Virtual Router Redundancy Protocol RFC5798
   141  	IPpgm                            // PGM PGM Reliable Transport Protocol
   142  	IPany0                           // any 0-hop protocol any 0-hop protocol
   143  	IPl2tp                           // L2TP Layer Two Tunneling Protocol RFC3931
   144  	IPddx                            // DDX D-II Data Exchange (DDX)
   145  	IPiatp                           // IATP Interactive Agent Transfer Protocol
   146  	IPstp                            // STP Schedule Transfer Protocol
   147  	IPsrp                            // SRP SpectraLink Radio Protocol
   148  	IPuti                            // UTI UTI
   149  	IPsmp                            // SMP Simple Message Protocol
   150  	IPsm                             // SM (deprecated) Simple Multicast Protocol
   151  	IPptp                            // PTP Performance Transparency Protocol
   152  	IPisis                           // ISIS ISIS over IPv4
   153  	IPfire                           // FIRE FIRE
   154  	IPcrtp                           // CRTP Combat Radio Transport Protocol
   155  	IPcrudp                          // CRUDP Combat Radio User Datagram
   156  	IPssc                            // SSCOPMCE SSCOPMCE
   157  	IPlt                             // IPLT IPLT
   158  	IPsps                            // SPS Secure Packet Shield
   159  	IPpipe                           // PIPE Private IP Encapsulation within IP
   160  	IPsctp                           // SCTP Stream Control Transmission Protocol
   161  	IPfc                             // FC Fibre Channel Murali_Rajagopal RFC6172
   162  	IPrsvpi                          // RSVP RSVP-E2E-IGNORE  RFC3175
   163  	IPmobility                       // MOBILITY Mobility Header IPv6xh RFC6275
   164  	IPudplite                        // UDPLite UDPLite RFC3828
   165  	IPmpls                           // MPLS-in-IP MPLS-in-IP RFC4023
   166  	IPmanet                          // manet MANET Protocols RFC5498
   167  	IPhip                            // HIP Host Identity Protocol IPv6xh RFC7401
   168  	IPshim6                          // Shim6 Shim6 Protocol IPv6xh RFC5533
   169  	IPwesp                           // WESP Wrapped Encapsulating Security Payload RFC5840
   170  	IProhc                           // ROHC Robust Header Compression RFC5858
   171  	IPeth                            // Ethernet Ethernet RFC8986
   172  	IPagg                            // AGGFRAG AGGFRAG encapsulation payload for ESP RFC-ietf-ipsecme-iptfs-19
   173  	IP253      Protocol = 108 + iota // 253 Use for experimentation and testing IPv6xh RFC3692
   174  	IP254                            // 254 Use for experimentation and testing IPv6xh RFC3692
   175  	IP255                            // Reserved Reserved
   176  )
   177  
   178  // NewProtocol returns iana.Protocol for any integer value.
   179  //   - values larger that 255 produce error testable with errors.Is(err, ints.ErrTooLarge)
   180  //   - protocol may be invalid, ie. not an iana-assigned value, check with protocol.IsValid
   181  //   - or use NewValidProtocol
   182  func NewProtocol[T constraints.Integer](integer T) (protocol Protocol, err error) {
   183  
   184  	// convert to uint8
   185  	var u8 uint8
   186  	if u8, err = ints.Unsigned[uint8](integer, perrors.PackFunc()); err != nil {
   187  		return
   188  	}
   189  
   190  	// convert to iana.Protocol
   191  	protocol = Protocol(u8)
   192  
   193  	return
   194  }
   195  
   196  // NewProtocol returns iana.Protocol for any integer value.
   197  //   - values larger that 255 produce error testable with errors.Is(err, ints.ErrTooLarge)
   198  //   - protocol is valid
   199  func NewValidProtocol[T constraints.Integer](integer T) (protocol Protocol, err error) {
   200  	if protocol, err = NewProtocol(integer); err != nil {
   201  		return
   202  	}
   203  	if !protocol.IsValid() {
   204  		err = perrors.ErrorfPF("invalid protocol value: %d 0x%[1]x", protocol)
   205  		return
   206  	}
   207  
   208  	return
   209  }
   210  
   211  // NewProtocol returns iana.Protocol for any integer value.
   212  //   - if value is too large, panic
   213  //   - protocol may be invalid, ie. not an iana-assigned value, check with protocol.IsValid
   214  //   - or use NewValidProtocol
   215  func NewProtocol1[T constraints.Integer](integer T) (protocol Protocol) {
   216  	var err error
   217  	if protocol, err = NewProtocol(integer); err != nil {
   218  		panic(err)
   219  	}
   220  
   221  	return
   222  }
   223  
   224  func (pr Protocol) String() (s string) {
   225  	return ianaSet.StringT(pr)
   226  }
   227  
   228  func (pr Protocol) Int() (protocolInt int) {
   229  	return int(pr)
   230  }
   231  
   232  func (pr Protocol) Uint8() (protocolInt uint8) {
   233  	return uint8(pr)
   234  }
   235  
   236  func (pr Protocol) IsValid() (isValid bool) {
   237  	return ianaSet.IsValid(pr)
   238  }
   239  
   240  // Description returns a sentence describing protocol
   241  func (pr Protocol) Description() (full string) {
   242  	return ianaSet.Description(pr)
   243  }
   244  
   245  var ianaSet = sets.NewSet[Protocol]([]sets.SetElementFull[Protocol]{
   246  	{ValueV: IPhopopt, Name: "HOPOPT", Full: "IPv6 Hop-by-Hop Option IPv6xh RFC8200"},
   247  	{ValueV: IPicmp, Name: "ICMP", Full: "Internet Control Message RFC792"},
   248  	{ValueV: IPigmp, Name: "IGMP", Full: "Internet Group Management RFC1112"},
   249  	{ValueV: IPggp, Name: "GGP", Full: "Gateway-to-Gateway RFC823"},
   250  	{ValueV: IPv4, Name: "IPv4", Full: "IPv4 encapsulation RFC2003"},
   251  	{ValueV: IPst, Name: "ST", Full: "Stream RFC1190 RFC1819"},
   252  	{ValueV: IPtcp, Name: "TCP", Full: "Transmission Control RFC9293"},
   253  	{ValueV: IPcbt, Name: "CBT", Full: "CBT"},
   254  	{ValueV: IPegp, Name: "EGP", Full: "Exterior Gateway Protocol RFC888"},
   255  	{ValueV: IPigp, Name: "IGP", Full: "any private interior gateway"},
   256  	{ValueV: IPbbn, Name: "BBN-RCC-MON", Full: "BBN RCC Monitoring"},
   257  	{ValueV: IPnvp, Name: "NVP-II", Full: "Network Voice Protocol RFC741"},
   258  	{ValueV: IPpup, Name: "PUP", Full: "PUP"},
   259  	{ValueV: IPargus, Name: "ARGUS", Full: "(deprecated) ARGUS"},
   260  	{ValueV: IPemcon, Name: "EMCON", Full: "EMCON"},
   261  	{ValueV: IPxnet, Name: "XNET", Full: "Cross Net Debugger"},
   262  	{ValueV: IPchaos, Name: "CHAOS", Full: "Chaos"},
   263  	{ValueV: IPudp, Name: "UDP", Full: "User Datagram RFC768"},
   264  	{ValueV: IPmux, Name: "MUX", Full: "Multiplexing"},
   265  	{ValueV: IPdcn, Name: "DCN-MEAS", Full: "DCN Measurement Subsystems"},
   266  	{ValueV: IPhmp, Name: "HMP", Full: "Host Monitoring RFC869"},
   267  	{ValueV: IPprm, Name: "PRM", Full: "Packet Radio Measurement"},
   268  	{ValueV: IPxns, Name: "XNS-IDP", Full: "XEROX NS IDP"},
   269  	{ValueV: IPtrunk1, Name: "TRUNK-1", Full: "Trunk-1"},
   270  	{ValueV: IPtrunk2, Name: "TRUNK-2", Full: "Trunk-2"},
   271  	{ValueV: IPleaf1, Name: "LEAF-1", Full: "Leaf-1"},
   272  	{ValueV: IPleaf2, Name: "LEAF-2", Full: "Leaf-2"},
   273  	{ValueV: IPrdp, Name: "RDP", Full: "Reliable Data Protocol RFC908"},
   274  	{ValueV: IPirtp, Name: "IRTP", Full: "Internet Reliable Transaction RFC938"},
   275  	{ValueV: IPisotp4, Name: "ISO-TP4", Full: "ISO Transport Protocol Class 4 RFC905"},
   276  	{ValueV: IPnetblt, Name: "NETBLT", Full: "Bulk Data Transfer Protocol RFC969"},
   277  	{ValueV: IPmfe, Name: "MFE-NSP", Full: "MFE Network Services Protocol"},
   278  	{ValueV: IPmerit, Name: "MERIT-INP", Full: "MERIT Internodal Protocol"},
   279  	{ValueV: IPdccp, Name: "DCCP", Full: "Datagram Congestion Control Protocol RFC4340"},
   280  	{ValueV: IP3pc, Name: "3PC", Full: "Third Party Connect Protocol"},
   281  	{ValueV: IPidpr, Name: "IDPR", Full: "Inter-Domain Policy Routing Protocol"},
   282  	{ValueV: IPxtp, Name: "XTP", Full: "XTP"},
   283  	{ValueV: IPddp, Name: "DDP", Full: "Datagram Delivery Protocol"},
   284  	{ValueV: IPidprcmtp, Name: "IDPR-CMTP", Full: "IDPR Control Message Transport Proto"},
   285  	{ValueV: IPtp, Name: "TP++", Full: "TP++ Transport Protocol"},
   286  	{ValueV: IPil, Name: "IL", Full: "IL Transport Protocol"},
   287  	{ValueV: IPv6, Name: "IPv6", Full: "IPv6 encapsulation RFC2473"},
   288  	{ValueV: IPsdrp, Name: "SDRP", Full: "Source Demand Routing Protocol"},
   289  	{ValueV: IPv6route, Name: "IPv6-Route", Full: "Routing Header for IPv6 IPv6xh"},
   290  	{ValueV: IPv6frag, Name: "IPv6-Frag", Full: "Fragment Header for IPv6 IPv6xh"},
   291  	{ValueV: IPidrp, Name: "IDRP", Full: "Inter-Domain Routing Protocol"},
   292  	{ValueV: IPrsvp, Name: "RSVP", Full: "Reservation Protocol RFC2205 RFC3209"},
   293  	{ValueV: IPgre, Name: "GRE", Full: "Generic Routing Encapsulation RFC2784"},
   294  	{ValueV: IPdsr, Name: "DSR", Full: "Dynamic Source Routing Protocol RFC4728"},
   295  	{ValueV: IPbna, Name: "BNA", Full: "BNA"},
   296  	{ValueV: IPesp, Name: "ESP", Full: "Encap Security Payload IPv6xh RFC4303"},
   297  	{ValueV: IPah, Name: "AH", Full: "Authentication Header IPv6xh RFC4302"},
   298  	{ValueV: IPinlsp, Name: "I-NLSP", Full: "Integrated Net Layer Security TUBA"},
   299  	{ValueV: IPswipe, Name: "SWIPE", Full: "(deprecated) IP with Encryption"},
   300  	{ValueV: IPnarp, Name: "NARP", Full: "NBMA Address Resolution Protocol RFC1735"},
   301  	{ValueV: IPmobile, Name: "MOBILE", Full: "IP Mobility"},
   302  	{ValueV: IPtlsp, Name: "TLSP", Full: "Transport Layer Security Protocol using Kryptonet key management"},
   303  	{ValueV: IPskip, Name: "SKIP", Full: "SKIP"},
   304  	{ValueV: IPv6icmp, Name: "IPv6-ICMP", Full: "ICMP for IPv6 RFC8200"},
   305  	{ValueV: IPv6nonxt, Name: "IPv6-NoNxt", Full: "No Next Header for IPv6 RFC8200"},
   306  	{ValueV: IPv6opts, Name: "IPv6-Opts", Full: "Destination Options for IPv6 IPv6xh RFC8200"},
   307  	{ValueV: IPanyhost, Name: "ANYHOST", Full: "any host internal protocol"},
   308  	{ValueV: IPcftp, Name: "CFTP", Full: "CFTP Network Message"},
   309  	{ValueV: IPanynw, Name: "ANYNW", Full: "any local network"},
   310  	{ValueV: IPsat, Name: "SAT-EXPAK", Full: "SATNET and Backroom EXPAK"},
   311  	{ValueV: IPkrypto, Name: "KRYPTOLAN", Full: "Kryptolan"},
   312  	{ValueV: IPrvd, Name: "RVD", Full: "MIT Remote Virtual Disk Protocol"},
   313  	{ValueV: IPippc, Name: "IPPC", Full: "Internet Pluribus Packet Core"},
   314  	{ValueV: IPanyfs, Name: "ANYFS", Full: "any distributed file system"},
   315  	{ValueV: IPsatmon, Name: "SAT-MON", Full: "SATNET Monitoring"},
   316  	{ValueV: IPvisa, Name: "VISA", Full: "VISA Protocol"},
   317  	{ValueV: IPipcv, Name: "IPCV", Full: "Internet Packet Core Utility"},
   318  	{ValueV: IPcpnx, Name: "CPNX", Full: "Computer Protocol Network Executive"},
   319  	{ValueV: IPcphb, Name: "CPHB", Full: "Computer Protocol Heart Beat"},
   320  	{ValueV: IPwsn, Name: "WSN", Full: "Wang Span Network"},
   321  	{ValueV: IPpvp, Name: "PVP", Full: "Packet Video Protocol"},
   322  	{ValueV: IPbrsat, Name: "BR-SAT-MON", Full: "Backroom SATNET Monitoring"},
   323  	{ValueV: IPsun, Name: "SUN-ND", Full: "SUN ND PROTOCOL"},
   324  	{ValueV: IPwbmon, Name: "WB-MON", Full: "WIDEBAND Monitoring"},
   325  	{ValueV: IPwbexpak, Name: "WB-EXPAK", Full: "WIDEBAND EXPAK"},
   326  	{ValueV: IPisoip, Name: "ISO-IP", Full: "ISO Internet Protocol"},
   327  	{ValueV: IPvmtp, Name: "VMTP", Full: "VMTP"},
   328  	{ValueV: IPsvmtp, Name: "SECURE-VMTP", Full: "SECURE-VMTP"},
   329  	{ValueV: IPvines, Name: "VINES", Full: "VINES"},
   330  	{ValueV: IPttp, Name: "TTP", Full: "Transaction Transport Protocol / Internet Protocol Traffic Manager"},
   331  	{ValueV: IPnsf, Name: "NSFNET-IGP", Full: "NSFNET-IGP"},
   332  	{ValueV: IPdgp, Name: "DGP", Full: "Dissimilar Gateway Protocol"},
   333  	{ValueV: IPtcf, Name: "TCF", Full: "TCF"},
   334  	{ValueV: IPeigrp, Name: "EIGRP", Full: "EIGRP RFC7868"},
   335  	{ValueV: IPospf, Name: "OSPFIGP", Full: "OSPFIGP RFC1583 RFC2328 RFC5340"},
   336  	{ValueV: IPrpc, Name: "Sprite-RPC", Full: "Sprite RPC Protocol"},
   337  	{ValueV: IPlarp, Name: "LARP", Full: "Locus Address Resolution Protocol"},
   338  	{ValueV: IPmtp, Name: "MTP", Full: "Multicast Transport Protocol"},
   339  	{ValueV: IPax25, Name: "AX.25", Full: "AX.25 Frames"},
   340  	{ValueV: IPip, Name: "IPIP", Full: "IP-within-IP Encapsulation Protocol"},
   341  	{ValueV: IPmicp, Name: "MICP", Full: "(deprecated) Mobile Internetworking Control Pro."},
   342  	{ValueV: IPscc, Name: "SCC-SP", Full: "Semaphore Communications Sec. Pro."},
   343  	{ValueV: IPether, Name: "ETHERIP", Full: "Ethernet-within-IP Encapsulation RFC3378"},
   344  	{ValueV: IPencap, Name: "ENCAP", Full: "Encapsulation Header RFC1241"},
   345  	{ValueV: IPenc, Name: "ENC", Full: "any private encryption scheme"},
   346  	{ValueV: IPgmtp, Name: "GMTP", Full: "GMTP RXB5"},
   347  	{ValueV: IPifmp, Name: "IFMP", Full: "Ipsilon Flow Management Protocol"},
   348  	{ValueV: IPpnni, Name: "PNNI", Full: "PNNI over IP"},
   349  	{ValueV: IPpim, Name: "PIM", Full: "Protocol Independent Multicast RFC7761"},
   350  	{ValueV: IParis, Name: "ARIS", Full: "ARIS"},
   351  	{ValueV: IPscps, Name: "SCPS", Full: "SCPS"},
   352  	{ValueV: IPqnx, Name: "QNX", Full: "QNX"},
   353  	{ValueV: IPan, Name: "A/N", Full: "Active Networks"},
   354  	{ValueV: IPcomp, Name: "IPComp", Full: "IP Payload Compression Protocol RFC2393"},
   355  	{ValueV: IPsnp, Name: "SNP", Full: "Sitara Networks Protocol"},
   356  	{ValueV: IPcq, Name: "Compaq-Peer", Full: "Compaq Peer Protocol"},
   357  	{ValueV: IPipx, Name: "IPX-in-IP", Full: "IPX in IP"},
   358  	{ValueV: IPvrrp, Name: "VRRP", Full: "Virtual Router Redundancy Protocol RFC5798"},
   359  	{ValueV: IPpgm, Name: "PGM", Full: "PGM Reliable Transport Protocol"},
   360  	{ValueV: IPany0, Name: "any 0-hop protocol", Full: "any 0-hop protocol"},
   361  	{ValueV: IPl2tp, Name: "L2TP", Full: "Layer Two Tunneling Protocol RFC3931"},
   362  	{ValueV: IPddx, Name: "DDX", Full: "D-II Data Exchange (DDX)"},
   363  	{ValueV: IPiatp, Name: "IATP", Full: "Interactive Agent Transfer Protocol"},
   364  	{ValueV: IPstp, Name: "STP", Full: "Schedule Transfer Protocol"},
   365  	{ValueV: IPsrp, Name: "SRP", Full: "SpectraLink Radio Protocol"},
   366  	{ValueV: IPuti, Name: "UTI", Full: "UTI"},
   367  	{ValueV: IPsmp, Name: "SMP", Full: "Simple Message Protocol"},
   368  	{ValueV: IPsm, Name: "SM", Full: "(deprecated) Simple Multicast Protocol"},
   369  	{ValueV: IPptp, Name: "PTP", Full: "Performance Transparency Protocol"},
   370  	{ValueV: IPisis, Name: "ISIS", Full: "ISIS over IPv4"},
   371  	{ValueV: IPfire, Name: "FIRE", Full: "FIRE"},
   372  	{ValueV: IPcrtp, Name: "CRTP", Full: "Combat Radio Transport Protocol"},
   373  	{ValueV: IPcrudp, Name: "CRUDP", Full: "Combat Radio User Datagram"},
   374  	{ValueV: IPssc, Name: "SSCOPMCE", Full: "SSCOPMCE"},
   375  	{ValueV: IPlt, Name: "IPLT", Full: "IPLT"},
   376  	{ValueV: IPsps, Name: "SPS", Full: "Secure Packet Shield"},
   377  	{ValueV: IPpipe, Name: "PIPE", Full: "Private IP Encapsulation within IP"},
   378  	{ValueV: IPsctp, Name: "SCTP", Full: "Stream Control Transmission Protocol"},
   379  	{ValueV: IPfc, Name: "FC", Full: "Fibre Channel Murali_Rajagopal RFC6172"},
   380  	{ValueV: IPrsvpi, Name: "RSVP", Full: "RSVP-E2E-IGNORE  RFC3175"},
   381  	{ValueV: IPmobility, Name: "MOBILITY", Full: "Mobility Header IPv6xh RFC6275"},
   382  	{ValueV: IPudplite, Name: "UDPLite", Full: "UDPLite RFC3828"},
   383  	{ValueV: IPmpls, Name: "MPLS-in-IP", Full: "MPLS-in-IP RFC4023"},
   384  	{ValueV: IPmanet, Name: "manet", Full: "MANET Protocols RFC5498"},
   385  	{ValueV: IPhip, Name: "HIP", Full: "Host Identity Protocol IPv6xh RFC7401"},
   386  	{ValueV: IPshim6, Name: "Shim6", Full: "Shim6 Protocol IPv6xh RFC5533"},
   387  	{ValueV: IPwesp, Name: "WESP", Full: "Wrapped Encapsulating Security Payload RFC5840"},
   388  	{ValueV: IProhc, Name: "ROHC", Full: "Robust Header Compression RFC5858"},
   389  	{ValueV: IPeth, Name: "Ethernet", Full: "Ethernet RFC8986"},
   390  	{ValueV: IPagg, Name: "AGGFRAG", Full: "AGGFRAG encapsulation payload for ESP RFC-ietf-ipsecme-iptfs-19"},
   391  	{ValueV: IP253, Name: "253", Full: "Use for experimentation and testing IPv6xh RFC3692"},
   392  	{ValueV: IP254, Name: "254", Full: "Use for experimentation and testing IPv6xh RFC3692"},
   393  	//{ValueV: IP255, Name: "Reserved", Full: "Reserved"},
   394  })