|
| 1 | +// Copyright(c) 2016. Atomic Rules LLC. All rights reserved. |
| 2 | + |
| 3 | +//////////////////////////////////////////////////////////////////////////////// |
| 4 | +/// IPv4 Header and support types |
| 5 | +/// Ed Czeck |
| 6 | +/// May 2015 |
| 7 | +/// for Atomic Rules LLC |
| 8 | +//////////////////////////////////////////////////////////////////////////////// |
| 9 | + |
| 10 | + |
| 11 | +//////////////////////////////////////////////////////////////////////////////// |
| 12 | +/// IP Protocol values |
| 13 | +//////////////////////////////////////////////////////////////////////////////// |
| 14 | +typedef enum { |
| 15 | + HOPOPT = 0 |
| 16 | + ,ICMP = 1 |
| 17 | + ,IGMP = 2 |
| 18 | + ,GGP = 3 |
| 19 | + ,IPv4 = 4 |
| 20 | + ,ST = 5 |
| 21 | + ,TCP = 6 |
| 22 | + ,CBT = 7 |
| 23 | + ,EGP = 8 |
| 24 | + ,IGP = 9 |
| 25 | + ,BBN_RCC_MON = 10 |
| 26 | + ,NVP_II = 11 |
| 27 | + ,PUP = 12 |
| 28 | + ,ARGUS = 13 |
| 29 | + ,EMCON = 14 |
| 30 | + ,XNET = 15 |
| 31 | + ,CHAOS = 16 |
| 32 | + ,UDP = 17 |
| 33 | + ,MUX = 18 |
| 34 | + ,DCN_MEAS = 19 |
| 35 | + ,HMP = 20 |
| 36 | + ,PRM = 21 |
| 37 | + ,XNS_IDP = 22 |
| 38 | + ,TRUNK_1 = 23 |
| 39 | + ,TRUNK_2 = 24 |
| 40 | + ,LEAF_1 = 25 |
| 41 | + ,LEAF_2 = 26 |
| 42 | + ,RDP = 27 |
| 43 | + ,IRTP = 28 |
| 44 | + ,ISO_TP4 = 29 |
| 45 | + ,NETBLT = 30 |
| 46 | + ,MFE_NSP = 31 |
| 47 | + ,MERIT_INP = 32 |
| 48 | + ,DCCP = 33 |
| 49 | + ,PC_3 = 34 |
| 50 | + ,IDPR = 35 |
| 51 | + ,XTP = 36 |
| 52 | + ,DDP = 37 |
| 53 | + ,IDPR_CMTP = 38 |
| 54 | + ,TPplusplus = 39 |
| 55 | + ,IL = 40 |
| 56 | + ,IPv6 = 41 |
| 57 | + ,SDRP = 42 |
| 58 | + ,IPv6_Route = 43 |
| 59 | + ,IPv6_Frag = 44 |
| 60 | + ,IDRP = 45 |
| 61 | + ,RSVP = 46 |
| 62 | + ,GRE = 47 |
| 63 | + ,DSR = 48 |
| 64 | + ,BNA = 49 |
| 65 | + ,ESP = 50 |
| 66 | + ,AH = 51 |
| 67 | + ,I_NLSP = 52 |
| 68 | + ,SWIPE = 53 |
| 69 | + ,NARP = 54 |
| 70 | + ,MOBILE = 55 |
| 71 | + ,TLSP = 56 |
| 72 | + ,SKIP = 57 |
| 73 | + ,IPv6_ICMP = 58 |
| 74 | + ,IPv6_NoNxt = 59 |
| 75 | + ,IPv6_Opts = 60 |
| 76 | + ,UA61 = 61 |
| 77 | + ,CFTP = 62 |
| 78 | + ,UA63 = 63 |
| 79 | + ,SAT_EXPAK = 64 |
| 80 | + ,KRYPTOLAN = 65 |
| 81 | + ,RVD = 66 |
| 82 | + ,IPPC = 67 |
| 83 | + ,UA68 = 68 |
| 84 | + ,SAT_MON = 69 |
| 85 | + ,VISA = 70 |
| 86 | + ,IPCV = 71 |
| 87 | + ,CPNX = 72 |
| 88 | + ,CPHB = 73 |
| 89 | + ,WSN = 74 |
| 90 | + ,PVP = 75 |
| 91 | + ,BR_SAT_MON = 76 |
| 92 | + ,SUN_ND = 77 |
| 93 | + ,WB_MON = 78 |
| 94 | + ,WB_EXPAK = 79 |
| 95 | + ,ISO_IP = 80 |
| 96 | + ,VMTP = 81 |
| 97 | + ,SECURE_VMTP = 82 |
| 98 | + ,VINES = 83 |
| 99 | + ,TTP_IPTM = 84 |
| 100 | + ,NSFNET_IGP = 85 |
| 101 | + ,DGP = 86 |
| 102 | + ,TCF = 87 |
| 103 | + ,EIGRP = 88 |
| 104 | + ,OSPFIGP = 89 |
| 105 | + ,Sprite_RPC = 90 |
| 106 | + ,LARP = 91 |
| 107 | + ,MTP = 92 |
| 108 | + ,AX_25 = 93 |
| 109 | + ,IPIP = 94 |
| 110 | + ,MICP = 95 |
| 111 | + ,SCC_SP = 96 |
| 112 | + ,ETHERIP = 97 |
| 113 | + ,ENCAP = 98 |
| 114 | + ,UA99 = 99 |
| 115 | + ,GMTP = 100 |
| 116 | + ,IFMP = 101 |
| 117 | + ,PNNI = 102 |
| 118 | + ,PIM = 103 |
| 119 | + ,ARIS = 104 |
| 120 | + ,SCPS = 105 |
| 121 | + ,QNX = 106 |
| 122 | + ,A_N = 107 |
| 123 | + ,IPComp = 108 |
| 124 | + ,SNP = 109 |
| 125 | + ,Compaq_Peer = 110 |
| 126 | + ,IPX_in_IP = 111 |
| 127 | + ,VRRP = 112 |
| 128 | + ,PGM = 113 |
| 129 | + ,XX114 = 114 |
| 130 | + ,L2TP = 115 |
| 131 | + ,DDX = 116 |
| 132 | + ,IATP = 117 |
| 133 | + ,STP = 118 |
| 134 | + ,SRP = 119 |
| 135 | + ,UTI = 120 |
| 136 | + ,SMP = 121 |
| 137 | + ,SM = 122 |
| 138 | + ,PTP = 123 |
| 139 | + ,ISIS = 124 |
| 140 | + ,FIRE = 125 |
| 141 | + ,CRTP = 126 |
| 142 | + ,CRUDP = 127 |
| 143 | + ,SSCOPMCE = 128 |
| 144 | + ,IPLT = 129 |
| 145 | + ,SPS = 130 |
| 146 | + ,PIPE = 131 |
| 147 | + ,SCTP = 132 |
| 148 | + ,FC = 133 |
| 149 | + ,RSVP_E2E_IGNORE = 134 |
| 150 | + ,Mobility_Header = 135 |
| 151 | + ,UDPLite = 136 |
| 152 | + ,MPLS_in_IP = 137 |
| 153 | + ,Manet = 138 |
| 154 | + ,HIP = 139 |
| 155 | + ,Shi = 140 |
| 156 | + ,WESP = 141 |
| 157 | + ,ROHC = 142 |
| 158 | + // Unassigned |
| 159 | + ,UA143 = 143 ,UA144 = 144 ,UA145 = 145 ,UA146 = 146 |
| 160 | + ,UA147 = 147 ,UA148 = 148 ,UA149 = 149 ,UA150 = 150 |
| 161 | + ,UA151 = 151 ,UA152 = 152 ,UA153 = 153 ,UA154 = 154 |
| 162 | + ,UA155 = 155 ,UA156 = 156 ,UA157 = 157 ,UA158 = 158 |
| 163 | + ,UA159 = 159 ,UA160 = 160 ,UA161 = 161 ,UA162 = 162 |
| 164 | + ,UA163 = 163 ,UA164 = 164 ,UA165 = 165 ,UA166 = 166 |
| 165 | + ,UA167 = 167 ,UA168 = 168 ,UA169 = 169 ,UA170 = 170 |
| 166 | + ,UA171 = 171 ,UA172 = 172 ,UA173 = 173 ,UA174 = 174 |
| 167 | + ,UA175 = 175 ,UA176 = 176 ,UA177 = 177 ,UA178 = 178 |
| 168 | + ,UA179 = 179 ,UA180 = 180 ,UA181 = 181 ,UA182 = 182 |
| 169 | + ,UA183 = 183 ,UA184 = 184 ,UA185 = 185 ,UA186 = 186 |
| 170 | + ,UA187 = 187 ,UA188 = 188 ,UA189 = 189 ,UA190 = 190 |
| 171 | + ,UA191 = 191 ,UA192 = 192 ,UA193 = 193 ,UA194 = 194 |
| 172 | + ,UA195 = 195 ,UA196 = 196 ,UA197 = 197 ,UA198 = 198 |
| 173 | + ,UA199 = 199 ,UA200 = 200 ,UA201 = 201 ,UA202 = 202 |
| 174 | + ,UA203 = 203 ,UA204 = 204 ,UA205 = 205 ,UA206 = 206 |
| 175 | + ,UA207 = 207 ,UA208 = 208 ,UA209 = 209 ,UA210 = 210 |
| 176 | + ,UA211 = 211 ,UA212 = 212 ,UA213 = 213 ,UA214 = 214 |
| 177 | + ,UA215 = 215 ,UA216 = 216 ,UA217 = 217 ,UA218 = 218 |
| 178 | + ,UA219 = 219 ,UA220 = 220 ,UA221 = 221 ,UA222 = 222 |
| 179 | + ,UA223 = 223 ,UA224 = 224 ,UA225 = 225 ,UA226 = 226 |
| 180 | + ,UA227 = 227 ,UA228 = 228 ,UA229 = 229 ,UA230 = 230 |
| 181 | + ,UA231 = 231 ,UA232 = 232 ,UA233 = 233 ,UA234 = 234 |
| 182 | + ,UA235 = 235 ,UA236 = 236 ,UA237 = 237 ,UA238 = 238 |
| 183 | + ,UA239 = 239 ,UA240 = 240 ,UA241 = 241 ,UA242 = 242 |
| 184 | + ,UA243 = 243 ,UA244 = 244 ,UA245 = 245 ,UA246 = 246 |
| 185 | + ,UA247 = 247 ,UA248 = 248 ,UA249 = 249 ,UA250 = 250 |
| 186 | + ,UA251 = 251 ,UA252 = 252 ,UA253 = 253 ,UA254 = 254 |
| 187 | + ,Reserved = 255 |
| 188 | + } IPProtocol deriving (Bits, Eq); |
| 189 | + |
| 190 | +// We derive our own version of FShow here to speed compiles. |
| 191 | +// bsc does not like decoding big enums |
| 192 | +instance FShow#(IPProtocol); |
| 193 | + function Fmt fshow (IPProtocol p); |
| 194 | + UInt#(8) px = unpack(pack(p)); |
| 195 | + return |
| 196 | + case (p) |
| 197 | + ICMP : return $format("ICMP"); |
| 198 | + IGMP : return $format("IGMP"); |
| 199 | + UDP : return $format("UDP"); |
| 200 | + TCP : return $format("TCP"); |
| 201 | + default : return $format ("P%0d", px); |
| 202 | + endcase; |
| 203 | + endfunction |
| 204 | +endinstance |
| 205 | + |
| 206 | + |
0 commit comments