pypcapkit 1.3.3.post1__cp313-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (466) hide show
  1. pcapkit/__init__.py +126 -0
  2. pcapkit/__main__.py +138 -0
  3. pcapkit/all.py +136 -0
  4. pcapkit/const/__init__.py +81 -0
  5. pcapkit/const/arp/__init__.py +25 -0
  6. pcapkit/const/arp/hardware.py +181 -0
  7. pcapkit/const/arp/operation.py +131 -0
  8. pcapkit/const/ftp/__init__.py +25 -0
  9. pcapkit/const/ftp/command.py +309 -0
  10. pcapkit/const/ftp/return_code.py +304 -0
  11. pcapkit/const/hip/__init__.py +94 -0
  12. pcapkit/const/hip/certificate.py +77 -0
  13. pcapkit/const/hip/cipher.py +65 -0
  14. pcapkit/const/hip/di.py +59 -0
  15. pcapkit/const/hip/ecdsa_curve.py +59 -0
  16. pcapkit/const/hip/ecdsa_low_curve.py +56 -0
  17. pcapkit/const/hip/eddsa_curve.py +65 -0
  18. pcapkit/const/hip/esp_transform_suite.py +98 -0
  19. pcapkit/const/hip/group.py +86 -0
  20. pcapkit/const/hip/hi_algorithm.py +86 -0
  21. pcapkit/const/hip/hit_suite.py +68 -0
  22. pcapkit/const/hip/nat_traversal.py +62 -0
  23. pcapkit/const/hip/notify_message.py +200 -0
  24. pcapkit/const/hip/packet.py +89 -0
  25. pcapkit/const/hip/parameter.py +377 -0
  26. pcapkit/const/hip/registration.py +68 -0
  27. pcapkit/const/hip/registration_failure.py +84 -0
  28. pcapkit/const/hip/suite.py +71 -0
  29. pcapkit/const/hip/transport.py +59 -0
  30. pcapkit/const/http/__init__.py +39 -0
  31. pcapkit/const/http/error_code.py +95 -0
  32. pcapkit/const/http/frame.py +95 -0
  33. pcapkit/const/http/method.py +184 -0
  34. pcapkit/const/http/setting.py +96 -0
  35. pcapkit/const/http/status_code.py +294 -0
  36. pcapkit/const/ipv4/__init__.py +57 -0
  37. pcapkit/const/ipv4/classification_level.py +64 -0
  38. pcapkit/const/ipv4/option_class.py +55 -0
  39. pcapkit/const/ipv4/option_number.py +137 -0
  40. pcapkit/const/ipv4/protection_authority.py +63 -0
  41. pcapkit/const/ipv4/qs_function.py +51 -0
  42. pcapkit/const/ipv4/router_alert.py +251 -0
  43. pcapkit/const/ipv4/tos_del.py +51 -0
  44. pcapkit/const/ipv4/tos_ecn.py +55 -0
  45. pcapkit/const/ipv4/tos_pre.py +63 -0
  46. pcapkit/const/ipv4/tos_rel.py +51 -0
  47. pcapkit/const/ipv4/tos_thr.py +51 -0
  48. pcapkit/const/ipv4/ts_flag.py +53 -0
  49. pcapkit/const/ipv6/__init__.py +53 -0
  50. pcapkit/const/ipv6/extension_header.py +66 -0
  51. pcapkit/const/ipv6/option.py +137 -0
  52. pcapkit/const/ipv6/option_action.py +55 -0
  53. pcapkit/const/ipv6/qs_function.py +51 -0
  54. pcapkit/const/ipv6/router_alert.py +266 -0
  55. pcapkit/const/ipv6/routing.py +80 -0
  56. pcapkit/const/ipv6/seed_id.py +55 -0
  57. pcapkit/const/ipv6/smf_dpd_mode.py +51 -0
  58. pcapkit/const/ipv6/tagger_id.py +62 -0
  59. pcapkit/const/ipx/__init__.py +27 -0
  60. pcapkit/const/ipx/packet.py +72 -0
  61. pcapkit/const/ipx/socket.py +104 -0
  62. pcapkit/const/l2tp/__init__.py +21 -0
  63. pcapkit/const/l2tp/type.py +51 -0
  64. pcapkit/const/mh/__init__.py +204 -0
  65. pcapkit/const/mh/access_type.py +92 -0
  66. pcapkit/const/mh/ack_status_code.py +71 -0
  67. pcapkit/const/mh/ani_suboption.py +74 -0
  68. pcapkit/const/mh/auth_subtype.py +53 -0
  69. pcapkit/const/mh/binding_ack_flag.py +66 -0
  70. pcapkit/const/mh/binding_error.py +51 -0
  71. pcapkit/const/mh/binding_revocation.py +59 -0
  72. pcapkit/const/mh/binding_update_flag.py +81 -0
  73. pcapkit/const/mh/cga_extension.py +66 -0
  74. pcapkit/const/mh/cga_sec.py +57 -0
  75. pcapkit/const/mh/cga_type.py +68 -0
  76. pcapkit/const/mh/dhcp_support_mode.py +53 -0
  77. pcapkit/const/mh/dns_status_code.py +65 -0
  78. pcapkit/const/mh/dsmip6_tls_packet.py +62 -0
  79. pcapkit/const/mh/dsmipv6_home_address.py +74 -0
  80. pcapkit/const/mh/enumerating_algorithm.py +56 -0
  81. pcapkit/const/mh/fb_ack_status.py +62 -0
  82. pcapkit/const/mh/fb_action.py +71 -0
  83. pcapkit/const/mh/fb_indication_trigger.py +65 -0
  84. pcapkit/const/mh/fb_type.py +59 -0
  85. pcapkit/const/mh/flow_id_status.py +77 -0
  86. pcapkit/const/mh/flow_id_suboption.py +71 -0
  87. pcapkit/const/mh/handoff_type.py +71 -0
  88. pcapkit/const/mh/handover_ack_flag.py +54 -0
  89. pcapkit/const/mh/handover_ack_status.py +92 -0
  90. pcapkit/const/mh/handover_initiate_flag.py +57 -0
  91. pcapkit/const/mh/handover_initiate_status.py +62 -0
  92. pcapkit/const/mh/home_address_reply.py +71 -0
  93. pcapkit/const/mh/lla_code.py +63 -0
  94. pcapkit/const/mh/lma_mag_suboption.py +59 -0
  95. pcapkit/const/mh/mn_group_id.py +59 -0
  96. pcapkit/const/mh/mn_id_subtype.py +77 -0
  97. pcapkit/const/mh/operator_id.py +63 -0
  98. pcapkit/const/mh/option.py +260 -0
  99. pcapkit/const/mh/packet.py +119 -0
  100. pcapkit/const/mh/qos_attribute.py +89 -0
  101. pcapkit/const/mh/revocation_status_code.py +83 -0
  102. pcapkit/const/mh/revocation_trigger.py +86 -0
  103. pcapkit/const/mh/status_code.py +232 -0
  104. pcapkit/const/mh/traffic_selector.py +62 -0
  105. pcapkit/const/mh/upa_status.py +71 -0
  106. pcapkit/const/mh/upn_reason.py +80 -0
  107. pcapkit/const/ospf/__init__.py +27 -0
  108. pcapkit/const/ospf/authentication.py +65 -0
  109. pcapkit/const/ospf/packet.py +71 -0
  110. pcapkit/const/pcapng/__init__.py +51 -0
  111. pcapkit/const/pcapng/block_type.py +152 -0
  112. pcapkit/const/pcapng/filter_type.py +48 -0
  113. pcapkit/const/pcapng/hash_algorithm.py +59 -0
  114. pcapkit/const/pcapng/option_type.py +233 -0
  115. pcapkit/const/pcapng/record_type.py +57 -0
  116. pcapkit/const/pcapng/secrets_type.py +56 -0
  117. pcapkit/const/pcapng/verdict_type.py +53 -0
  118. pcapkit/const/reg/__init__.py +34 -0
  119. pcapkit/const/reg/apptype.py +32702 -0
  120. pcapkit/const/reg/ethertype.py +714 -0
  121. pcapkit/const/reg/linktype.py +902 -0
  122. pcapkit/const/reg/transtype.py +523 -0
  123. pcapkit/const/tcp/__init__.py +35 -0
  124. pcapkit/const/tcp/checksum.py +55 -0
  125. pcapkit/const/tcp/flags.py +73 -0
  126. pcapkit/const/tcp/mp_tcp_option.py +80 -0
  127. pcapkit/const/tcp/option.py +198 -0
  128. pcapkit/const/vlan/__init__.py +23 -0
  129. pcapkit/const/vlan/priority_level.py +71 -0
  130. pcapkit/corekit/__init__.py +59 -0
  131. pcapkit/corekit/fields/__init__.py +45 -0
  132. pcapkit/corekit/fields/collections.py +282 -0
  133. pcapkit/corekit/fields/field.py +269 -0
  134. pcapkit/corekit/fields/ipaddress.py +274 -0
  135. pcapkit/corekit/fields/misc.py +722 -0
  136. pcapkit/corekit/fields/numbers.py +375 -0
  137. pcapkit/corekit/fields/strings.py +245 -0
  138. pcapkit/corekit/infoclass.py +394 -0
  139. pcapkit/corekit/io.py +506 -0
  140. pcapkit/corekit/module.py +39 -0
  141. pcapkit/corekit/multidict.py +626 -0
  142. pcapkit/corekit/protochain.py +263 -0
  143. pcapkit/corekit/version.py +33 -0
  144. pcapkit/dumpkit/__init__.py +15 -0
  145. pcapkit/dumpkit/common.py +199 -0
  146. pcapkit/dumpkit/null.py +77 -0
  147. pcapkit/dumpkit/pcap.py +144 -0
  148. pcapkit/foundation/__init__.py +45 -0
  149. pcapkit/foundation/engines/__init__.py +36 -0
  150. pcapkit/foundation/engines/dpkt.py +230 -0
  151. pcapkit/foundation/engines/engine.py +194 -0
  152. pcapkit/foundation/engines/pcap.py +188 -0
  153. pcapkit/foundation/engines/pcapng.py +310 -0
  154. pcapkit/foundation/engines/pyshark.py +166 -0
  155. pcapkit/foundation/engines/scapy.py +161 -0
  156. pcapkit/foundation/extraction.py +915 -0
  157. pcapkit/foundation/reassembly/__init__.py +49 -0
  158. pcapkit/foundation/reassembly/data/__init__.py +48 -0
  159. pcapkit/foundation/reassembly/data/ip.py +117 -0
  160. pcapkit/foundation/reassembly/data/tcp.py +145 -0
  161. pcapkit/foundation/reassembly/ip.py +192 -0
  162. pcapkit/foundation/reassembly/ipv4.py +50 -0
  163. pcapkit/foundation/reassembly/ipv6.py +50 -0
  164. pcapkit/foundation/reassembly/reassembly.py +389 -0
  165. pcapkit/foundation/reassembly/tcp.py +249 -0
  166. pcapkit/foundation/registry/__init__.py +41 -0
  167. pcapkit/foundation/registry/foundation.py +327 -0
  168. pcapkit/foundation/registry/protocols.py +885 -0
  169. pcapkit/foundation/traceflow/__init__.py +44 -0
  170. pcapkit/foundation/traceflow/data/__init__.py +30 -0
  171. pcapkit/foundation/traceflow/data/tcp.py +105 -0
  172. pcapkit/foundation/traceflow/tcp.py +159 -0
  173. pcapkit/foundation/traceflow/traceflow.py +390 -0
  174. pcapkit/interface/__init__.py +22 -0
  175. pcapkit/interface/core.py +185 -0
  176. pcapkit/interface/misc.py +120 -0
  177. pcapkit/protocols/__init__.py +85 -0
  178. pcapkit/protocols/application/NotImplemented/bgp.py +0 -0
  179. pcapkit/protocols/application/NotImplemented/dhcp.py +0 -0
  180. pcapkit/protocols/application/NotImplemented/dhcpv6.py +0 -0
  181. pcapkit/protocols/application/NotImplemented/dns.py +0 -0
  182. pcapkit/protocols/application/NotImplemented/imap.py +0 -0
  183. pcapkit/protocols/application/NotImplemented/ldap.py +0 -0
  184. pcapkit/protocols/application/NotImplemented/mqtt.py +0 -0
  185. pcapkit/protocols/application/NotImplemented/nntp.py +0 -0
  186. pcapkit/protocols/application/NotImplemented/ntp.py +0 -0
  187. pcapkit/protocols/application/NotImplemented/onc_rpc.py +0 -0
  188. pcapkit/protocols/application/NotImplemented/pop.py +0 -0
  189. pcapkit/protocols/application/NotImplemented/rip.py +0 -0
  190. pcapkit/protocols/application/NotImplemented/rtp.py +0 -0
  191. pcapkit/protocols/application/NotImplemented/sip.py +0 -0
  192. pcapkit/protocols/application/NotImplemented/smtp.py +0 -0
  193. pcapkit/protocols/application/NotImplemented/snmp.py +0 -0
  194. pcapkit/protocols/application/NotImplemented/ssh.py +0 -0
  195. pcapkit/protocols/application/NotImplemented/telnet.py +0 -0
  196. pcapkit/protocols/application/NotImplemented/tls.py +0 -0
  197. pcapkit/protocols/application/NotImplemented/xmpp.py +0 -0
  198. pcapkit/protocols/application/__init__.py +34 -0
  199. pcapkit/protocols/application/application.py +114 -0
  200. pcapkit/protocols/application/ftp.py +206 -0
  201. pcapkit/protocols/application/http.py +176 -0
  202. pcapkit/protocols/application/httpv1.py +320 -0
  203. pcapkit/protocols/application/httpv2.py +1255 -0
  204. pcapkit/protocols/data/__init__.py +192 -0
  205. pcapkit/protocols/data/application/__init__.py +57 -0
  206. pcapkit/protocols/data/application/ftp.py +59 -0
  207. pcapkit/protocols/data/application/httpv1.py +79 -0
  208. pcapkit/protocols/data/application/httpv2.py +293 -0
  209. pcapkit/protocols/data/data.py +25 -0
  210. pcapkit/protocols/data/internet/__init__.py +298 -0
  211. pcapkit/protocols/data/internet/ah.py +31 -0
  212. pcapkit/protocols/data/internet/hip.py +804 -0
  213. pcapkit/protocols/data/internet/hopopt.py +351 -0
  214. pcapkit/protocols/data/internet/ipv4.py +369 -0
  215. pcapkit/protocols/data/internet/ipv6.py +67 -0
  216. pcapkit/protocols/data/internet/ipv6_frag.py +29 -0
  217. pcapkit/protocols/data/internet/ipv6_opts.py +368 -0
  218. pcapkit/protocols/data/internet/ipv6_route.py +86 -0
  219. pcapkit/protocols/data/internet/ipx.py +56 -0
  220. pcapkit/protocols/data/internet/mh.py +509 -0
  221. pcapkit/protocols/data/link/__init__.py +33 -0
  222. pcapkit/protocols/data/link/arp.py +74 -0
  223. pcapkit/protocols/data/link/ethernet.py +28 -0
  224. pcapkit/protocols/data/link/l2tp.py +63 -0
  225. pcapkit/protocols/data/link/ospf.py +58 -0
  226. pcapkit/protocols/data/link/vlan.py +42 -0
  227. pcapkit/protocols/data/misc/__init__.py +109 -0
  228. pcapkit/protocols/data/misc/null.py +18 -0
  229. pcapkit/protocols/data/misc/pcap/__init__.py +18 -0
  230. pcapkit/protocols/data/misc/pcap/frame.py +56 -0
  231. pcapkit/protocols/data/misc/pcap/header.py +53 -0
  232. pcapkit/protocols/data/misc/pcapng.py +925 -0
  233. pcapkit/protocols/data/misc/raw.py +25 -0
  234. pcapkit/protocols/data/protocol.py +32 -0
  235. pcapkit/protocols/data/transport/__init__.py +71 -0
  236. pcapkit/protocols/data/transport/tcp.py +555 -0
  237. pcapkit/protocols/data/transport/udp.py +29 -0
  238. pcapkit/protocols/internet/NotImplemented/ecn.py +0 -0
  239. pcapkit/protocols/internet/NotImplemented/esp.py +97 -0
  240. pcapkit/protocols/internet/NotImplemented/icmp.py +0 -0
  241. pcapkit/protocols/internet/NotImplemented/icmpv6.py +0 -0
  242. pcapkit/protocols/internet/NotImplemented/igmp.py +0 -0
  243. pcapkit/protocols/internet/NotImplemented/shim6.py +0 -0
  244. pcapkit/protocols/internet/__init__.py +43 -0
  245. pcapkit/protocols/internet/ah.py +275 -0
  246. pcapkit/protocols/internet/hip.py +4727 -0
  247. pcapkit/protocols/internet/hopopt.py +1879 -0
  248. pcapkit/protocols/internet/internet.py +240 -0
  249. pcapkit/protocols/internet/ip.py +51 -0
  250. pcapkit/protocols/internet/ipsec.py +50 -0
  251. pcapkit/protocols/internet/ipv4.py +1782 -0
  252. pcapkit/protocols/internet/ipv6.py +361 -0
  253. pcapkit/protocols/internet/ipv6_frag.py +258 -0
  254. pcapkit/protocols/internet/ipv6_opts.py +1890 -0
  255. pcapkit/protocols/internet/ipv6_route.py +710 -0
  256. pcapkit/protocols/internet/ipx.py +230 -0
  257. pcapkit/protocols/internet/mh.py +2764 -0
  258. pcapkit/protocols/link/NotImplemented/dsl.py +0 -0
  259. pcapkit/protocols/link/NotImplemented/eapol.py +1 -0
  260. pcapkit/protocols/link/NotImplemented/fddi.py +0 -0
  261. pcapkit/protocols/link/NotImplemented/isdn.py +0 -0
  262. pcapkit/protocols/link/NotImplemented/ndp.py +0 -0
  263. pcapkit/protocols/link/NotImplemented/ppp.py +0 -0
  264. pcapkit/protocols/link/__init__.py +35 -0
  265. pcapkit/protocols/link/arp.py +421 -0
  266. pcapkit/protocols/link/ethernet.py +248 -0
  267. pcapkit/protocols/link/l2tp.py +267 -0
  268. pcapkit/protocols/link/link.py +140 -0
  269. pcapkit/protocols/link/ospf.py +342 -0
  270. pcapkit/protocols/link/rarp.py +82 -0
  271. pcapkit/protocols/link/vlan.py +225 -0
  272. pcapkit/protocols/misc/__init__.py +37 -0
  273. pcapkit/protocols/misc/null.py +129 -0
  274. pcapkit/protocols/misc/pcap/__init__.py +17 -0
  275. pcapkit/protocols/misc/pcap/frame.py +478 -0
  276. pcapkit/protocols/misc/pcap/header.py +358 -0
  277. pcapkit/protocols/misc/pcapng.py +5520 -0
  278. pcapkit/protocols/misc/raw.py +180 -0
  279. pcapkit/protocols/protocol.py +1216 -0
  280. pcapkit/protocols/schema/__init__.py +140 -0
  281. pcapkit/protocols/schema/application/__init__.py +40 -0
  282. pcapkit/protocols/schema/application/ftp.py +21 -0
  283. pcapkit/protocols/schema/application/httpv1.py +21 -0
  284. pcapkit/protocols/schema/application/httpv2.py +384 -0
  285. pcapkit/protocols/schema/internet/__init__.py +294 -0
  286. pcapkit/protocols/schema/internet/ah.py +40 -0
  287. pcapkit/protocols/schema/internet/hip.py +1184 -0
  288. pcapkit/protocols/schema/internet/hopopt.py +679 -0
  289. pcapkit/protocols/schema/internet/ipv4.py +576 -0
  290. pcapkit/protocols/schema/internet/ipv6.py +63 -0
  291. pcapkit/protocols/schema/internet/ipv6_frag.py +48 -0
  292. pcapkit/protocols/schema/internet/ipv6_opts.py +680 -0
  293. pcapkit/protocols/schema/internet/ipv6_route.py +198 -0
  294. pcapkit/protocols/schema/internet/ipx.py +40 -0
  295. pcapkit/protocols/schema/internet/mh.py +718 -0
  296. pcapkit/protocols/schema/link/__init__.py +19 -0
  297. pcapkit/protocols/schema/link/arp.py +39 -0
  298. pcapkit/protocols/schema/link/ethernet.py +51 -0
  299. pcapkit/protocols/schema/link/l2tp.py +88 -0
  300. pcapkit/protocols/schema/link/ospf.py +90 -0
  301. pcapkit/protocols/schema/link/vlan.py +69 -0
  302. pcapkit/protocols/schema/misc/__init__.py +108 -0
  303. pcapkit/protocols/schema/misc/null.py +18 -0
  304. pcapkit/protocols/schema/misc/pcap/__init__.py +10 -0
  305. pcapkit/protocols/schema/misc/pcap/frame.py +51 -0
  306. pcapkit/protocols/schema/misc/pcap/header.py +63 -0
  307. pcapkit/protocols/schema/misc/pcapng.py +1689 -0
  308. pcapkit/protocols/schema/misc/raw.py +24 -0
  309. pcapkit/protocols/schema/schema.py +809 -0
  310. pcapkit/protocols/schema/transport/__init__.py +69 -0
  311. pcapkit/protocols/schema/transport/tcp.py +928 -0
  312. pcapkit/protocols/schema/transport/udp.py +90 -0
  313. pcapkit/protocols/transport/NotImplemented/dccp.py +0 -0
  314. pcapkit/protocols/transport/NotImplemented/rsvp.py +0 -0
  315. pcapkit/protocols/transport/NotImplemented/sctp.py +0 -0
  316. pcapkit/protocols/transport/__init__.py +27 -0
  317. pcapkit/protocols/transport/tcp.py +3025 -0
  318. pcapkit/protocols/transport/transport.py +158 -0
  319. pcapkit/protocols/transport/udp.py +214 -0
  320. pcapkit/py.typed +0 -0
  321. pcapkit/toolkit/__init__.py +57 -0
  322. pcapkit/toolkit/dpkt.py +306 -0
  323. pcapkit/toolkit/pcap.py +212 -0
  324. pcapkit/toolkit/pcapng.py +251 -0
  325. pcapkit/toolkit/pyshark.py +99 -0
  326. pcapkit/toolkit/scapy.py +297 -0
  327. pcapkit/utilities/__init__.py +20 -0
  328. pcapkit/utilities/compat.py +196 -0
  329. pcapkit/utilities/decorators.py +192 -0
  330. pcapkit/utilities/exceptions.py +365 -0
  331. pcapkit/utilities/logging.py +55 -0
  332. pcapkit/utilities/warnings.py +185 -0
  333. pcapkit/vendor/__init__.py +105 -0
  334. pcapkit/vendor/__main__.py +92 -0
  335. pcapkit/vendor/arp/__init__.py +27 -0
  336. pcapkit/vendor/arp/hardware.py +29 -0
  337. pcapkit/vendor/arp/operation.py +29 -0
  338. pcapkit/vendor/default.py +474 -0
  339. pcapkit/vendor/ftp/__init__.py +27 -0
  340. pcapkit/vendor/ftp/command.py +244 -0
  341. pcapkit/vendor/ftp/return_code.py +256 -0
  342. pcapkit/vendor/hip/__init__.py +94 -0
  343. pcapkit/vendor/hip/certificate.py +29 -0
  344. pcapkit/vendor/hip/cipher.py +29 -0
  345. pcapkit/vendor/hip/di.py +29 -0
  346. pcapkit/vendor/hip/ecdsa_curve.py +29 -0
  347. pcapkit/vendor/hip/ecdsa_low_curve.py +29 -0
  348. pcapkit/vendor/hip/eddsa_curve.py +85 -0
  349. pcapkit/vendor/hip/esp_transform_suite.py +29 -0
  350. pcapkit/vendor/hip/group.py +87 -0
  351. pcapkit/vendor/hip/hi_algorithm.py +29 -0
  352. pcapkit/vendor/hip/hit_suite.py +29 -0
  353. pcapkit/vendor/hip/nat_traversal.py +29 -0
  354. pcapkit/vendor/hip/notify_message.py +29 -0
  355. pcapkit/vendor/hip/packet.py +88 -0
  356. pcapkit/vendor/hip/parameter.py +88 -0
  357. pcapkit/vendor/hip/registration.py +29 -0
  358. pcapkit/vendor/hip/registration_failure.py +29 -0
  359. pcapkit/vendor/hip/suite.py +29 -0
  360. pcapkit/vendor/hip/transport.py +29 -0
  361. pcapkit/vendor/http/__init__.py +39 -0
  362. pcapkit/vendor/http/error_code.py +95 -0
  363. pcapkit/vendor/http/frame.py +91 -0
  364. pcapkit/vendor/http/method.py +167 -0
  365. pcapkit/vendor/http/setting.py +93 -0
  366. pcapkit/vendor/http/status_code.py +185 -0
  367. pcapkit/vendor/ipv4/__init__.py +57 -0
  368. pcapkit/vendor/ipv4/classification_level.py +91 -0
  369. pcapkit/vendor/ipv4/option_class.py +80 -0
  370. pcapkit/vendor/ipv4/option_number.py +105 -0
  371. pcapkit/vendor/ipv4/protection_authority.py +84 -0
  372. pcapkit/vendor/ipv4/qs_function.py +78 -0
  373. pcapkit/vendor/ipv4/router_alert.py +93 -0
  374. pcapkit/vendor/ipv4/tos_del.py +78 -0
  375. pcapkit/vendor/ipv4/tos_ecn.py +95 -0
  376. pcapkit/vendor/ipv4/tos_pre.py +84 -0
  377. pcapkit/vendor/ipv4/tos_rel.py +78 -0
  378. pcapkit/vendor/ipv4/tos_thr.py +77 -0
  379. pcapkit/vendor/ipv4/ts_flag.py +79 -0
  380. pcapkit/vendor/ipv6/__init__.py +53 -0
  381. pcapkit/vendor/ipv6/extension_header.py +171 -0
  382. pcapkit/vendor/ipv6/option.py +104 -0
  383. pcapkit/vendor/ipv6/option_action.py +90 -0
  384. pcapkit/vendor/ipv6/qs_function.py +78 -0
  385. pcapkit/vendor/ipv6/router_alert.py +93 -0
  386. pcapkit/vendor/ipv6/routing.py +87 -0
  387. pcapkit/vendor/ipv6/seed_id.py +81 -0
  388. pcapkit/vendor/ipv6/smf_dpd_mode.py +78 -0
  389. pcapkit/vendor/ipv6/tagger_id.py +81 -0
  390. pcapkit/vendor/ipx/__init__.py +37 -0
  391. pcapkit/vendor/ipx/packet.py +123 -0
  392. pcapkit/vendor/ipx/socket.py +125 -0
  393. pcapkit/vendor/l2tp/__init__.py +21 -0
  394. pcapkit/vendor/l2tp/type.py +78 -0
  395. pcapkit/vendor/mh/__init__.py +204 -0
  396. pcapkit/vendor/mh/access_type.py +87 -0
  397. pcapkit/vendor/mh/ack_status_code.py +88 -0
  398. pcapkit/vendor/mh/ani_suboption.py +88 -0
  399. pcapkit/vendor/mh/auth_subtype.py +83 -0
  400. pcapkit/vendor/mh/binding_ack_flag.py +148 -0
  401. pcapkit/vendor/mh/binding_error.py +78 -0
  402. pcapkit/vendor/mh/binding_revocation.py +87 -0
  403. pcapkit/vendor/mh/binding_update_flag.py +147 -0
  404. pcapkit/vendor/mh/cga_extension.py +91 -0
  405. pcapkit/vendor/mh/cga_sec.py +91 -0
  406. pcapkit/vendor/mh/cga_type.py +74 -0
  407. pcapkit/vendor/mh/dhcp_support_mode.py +77 -0
  408. pcapkit/vendor/mh/dns_status_code.py +87 -0
  409. pcapkit/vendor/mh/dsmip6_tls_packet.py +87 -0
  410. pcapkit/vendor/mh/dsmipv6_home_address.py +87 -0
  411. pcapkit/vendor/mh/enumerating_algorithm.py +82 -0
  412. pcapkit/vendor/mh/fb_ack_status.py +87 -0
  413. pcapkit/vendor/mh/fb_action.py +88 -0
  414. pcapkit/vendor/mh/fb_indication_trigger.py +87 -0
  415. pcapkit/vendor/mh/fb_type.py +88 -0
  416. pcapkit/vendor/mh/flow_id_status.py +87 -0
  417. pcapkit/vendor/mh/flow_id_suboption.py +87 -0
  418. pcapkit/vendor/mh/handoff_type.py +87 -0
  419. pcapkit/vendor/mh/handover_ack_flag.py +143 -0
  420. pcapkit/vendor/mh/handover_ack_status.py +87 -0
  421. pcapkit/vendor/mh/handover_initiate_flag.py +143 -0
  422. pcapkit/vendor/mh/handover_initiate_status.py +87 -0
  423. pcapkit/vendor/mh/home_address_reply.py +87 -0
  424. pcapkit/vendor/mh/lla_code.py +97 -0
  425. pcapkit/vendor/mh/lma_mag_suboption.py +88 -0
  426. pcapkit/vendor/mh/mn_group_id.py +87 -0
  427. pcapkit/vendor/mh/mn_id_subtype.py +87 -0
  428. pcapkit/vendor/mh/operator_id.py +87 -0
  429. pcapkit/vendor/mh/option.py +83 -0
  430. pcapkit/vendor/mh/packet.py +82 -0
  431. pcapkit/vendor/mh/qos_attribute.py +87 -0
  432. pcapkit/vendor/mh/revocation_status_code.py +87 -0
  433. pcapkit/vendor/mh/revocation_trigger.py +87 -0
  434. pcapkit/vendor/mh/status_code.py +91 -0
  435. pcapkit/vendor/mh/traffic_selector.py +87 -0
  436. pcapkit/vendor/mh/upa_status.py +87 -0
  437. pcapkit/vendor/mh/upn_reason.py +87 -0
  438. pcapkit/vendor/ospf/__init__.py +27 -0
  439. pcapkit/vendor/ospf/authentication.py +29 -0
  440. pcapkit/vendor/ospf/packet.py +29 -0
  441. pcapkit/vendor/pcapng/__init__.py +51 -0
  442. pcapkit/vendor/pcapng/block_type.py +94 -0
  443. pcapkit/vendor/pcapng/filter_type.py +77 -0
  444. pcapkit/vendor/pcapng/hash_algorithm.py +82 -0
  445. pcapkit/vendor/pcapng/option_type.py +287 -0
  446. pcapkit/vendor/pcapng/record_type.py +81 -0
  447. pcapkit/vendor/pcapng/secrets_type.py +81 -0
  448. pcapkit/vendor/pcapng/verdict_type.py +79 -0
  449. pcapkit/vendor/reg/__init__.py +34 -0
  450. pcapkit/vendor/reg/apptype.py +338 -0
  451. pcapkit/vendor/reg/ethertype.py +121 -0
  452. pcapkit/vendor/reg/linktype.py +110 -0
  453. pcapkit/vendor/reg/transtype.py +111 -0
  454. pcapkit/vendor/tcp/__init__.py +35 -0
  455. pcapkit/vendor/tcp/checksum.py +80 -0
  456. pcapkit/vendor/tcp/flags.py +149 -0
  457. pcapkit/vendor/tcp/mp_tcp_option.py +90 -0
  458. pcapkit/vendor/tcp/option.py +103 -0
  459. pcapkit/vendor/vlan/__init__.py +23 -0
  460. pcapkit/vendor/vlan/priority_level.py +97 -0
  461. pypcapkit-1.3.3.post1.dist-info/LICENSE +29 -0
  462. pypcapkit-1.3.3.post1.dist-info/METADATA +236 -0
  463. pypcapkit-1.3.3.post1.dist-info/RECORD +466 -0
  464. pypcapkit-1.3.3.post1.dist-info/WHEEL +5 -0
  465. pypcapkit-1.3.3.post1.dist-info/entry_points.txt +3 -0
  466. pypcapkit-1.3.3.post1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,680 @@
1
+ # -*- coding: utf-8 -*-
2
+ # mypy: disable-error-code=assignment
3
+ """header schema for IPv6 destination options"""
4
+
5
+ import collections
6
+ from typing import TYPE_CHECKING
7
+
8
+ from pcapkit.const.ipv6.option import Option as Enum_Option
9
+ from pcapkit.const.ipv6.qs_function import QSFunction as Enum_QSFunction
10
+ from pcapkit.const.ipv6.router_alert import RouterAlert as Enum_RouterAlert
11
+ from pcapkit.const.ipv6.seed_id import SeedID as Enum_SeedID
12
+ from pcapkit.const.ipv6.smf_dpd_mode import SMFDPDMode as Enum_SMFDPDMode
13
+ from pcapkit.const.ipv6.tagger_id import TaggerID as Enum_TaggerID
14
+ from pcapkit.const.reg.transtype import TransType as Enum_TransType
15
+ from pcapkit.corekit.fields.collections import OptionField
16
+ from pcapkit.corekit.fields.field import NoValue
17
+ from pcapkit.corekit.fields.ipaddress import IPv4AddressField, IPv6AddressField
18
+ from pcapkit.corekit.fields.misc import (ConditionalField, ForwardMatchField, NoValueField,
19
+ PayloadField, SchemaField, SwitchField)
20
+ from pcapkit.corekit.fields.numbers import (EnumField, NumberField, UInt8Field, UInt16Field,
21
+ UInt32Field)
22
+ from pcapkit.corekit.fields.strings import BitField, BytesField, PaddingField
23
+ from pcapkit.protocols.schema.schema import EnumSchema, Schema, schema_final
24
+ from pcapkit.utilities.exceptions import FieldValueError
25
+ from pcapkit.utilities.logging import SPHINX_TYPE_CHECKING
26
+
27
+ __all__ = [
28
+ 'IPv6_Opts',
29
+
30
+ 'SMFDPDOption', 'QuickStartOption',
31
+ 'UnassignedOption', 'PadOption', 'TunnelEncapsulationLimitOption',
32
+ 'RouterAlertOption', 'CALIPSOOption', 'SMFIdentificationBasedDPDOption',
33
+ 'SMFHashBasedDPDOption', 'PDMOption', 'QuickStartRequestOption',
34
+ 'QuickStartReportOption', 'RPLOption', 'MPLOption', 'ILNPOption',
35
+ 'LineIdentificationOption', 'JumboPayloadOption', 'HomeAddressOption',
36
+ 'IPDFFOption',
37
+ ]
38
+
39
+ if TYPE_CHECKING:
40
+ from ipaddress import IPv4Address, IPv6Address
41
+ from typing import Any, DefaultDict, Optional, Type
42
+
43
+ from pcapkit.corekit.fields.field import FieldBase as Field
44
+ from pcapkit.protocols.protocol import ProtocolBase as Protocol
45
+
46
+ if SPHINX_TYPE_CHECKING:
47
+ from typing_extensions import TypedDict
48
+
49
+ class TaggerIDInfo(TypedDict):
50
+ """TaggerID information."""
51
+
52
+ #: SMF mode.
53
+ mode: int
54
+ #: TaggerID type.
55
+ type: int
56
+ #: TaggerID length.
57
+ len: int
58
+
59
+ class QuickStartFlags(TypedDict):
60
+ """Quick-Start flags."""
61
+
62
+ #: QS function.
63
+ func: int
64
+ #: Rate request/report.
65
+ rate: int
66
+
67
+ class RPLFlags(TypedDict):
68
+ """RPL flags."""
69
+
70
+ #: Down flag.
71
+ down: int
72
+ #: Rank error flag.
73
+ rank_err: int
74
+ #: Forwarding error flag.
75
+ fwd_err: int
76
+
77
+ class MPLFlags(TypedDict):
78
+ """MPL flags."""
79
+
80
+ #: Seed-ID type. Identifies the length of the
81
+ #: Seed-ID.
82
+ type: int
83
+ #: Max flag. ``1`` indicates that the value in the
84
+ #: sequence field is known to be the largest sequence
85
+ #: number that was received from the MPL Seed.
86
+ max: int
87
+ #: Verification flag. ``0`` indicates that the MPL Option
88
+ #: conforms to this specification.
89
+ drop: int
90
+
91
+ class DFFFlags(TypedDict):
92
+ """``IP_DFF`` flags."""
93
+
94
+ #: Version.
95
+ ver: int
96
+ #: Duplicate flag.
97
+ dup: int
98
+ #: Retune flag.
99
+ ret: int
100
+
101
+ class SMFDPDTestFlag(TypedDict):
102
+ """``SMF_DPD`` test flag."""
103
+
104
+ #: Length.
105
+ len: int
106
+ #: DPD mode.
107
+ mode: int
108
+
109
+ class QSTestFlags(TypedDict):
110
+ """Quick start test flag."""
111
+
112
+ #: QS function.
113
+ func: int
114
+
115
+ class QSNonce(TypedDict):
116
+ """Quick start nonce."""
117
+
118
+ #: Nonce.
119
+ nonce: int
120
+
121
+
122
+ def mpl_opt_seed_id_len(pkt: 'dict[str, Any]') -> 'int':
123
+ """Return MPL Seed-ID length.
124
+
125
+ Args:
126
+ pkt: MPL option unpacked schema.
127
+
128
+ Returns:
129
+ MPL Seed-ID length.
130
+
131
+ """
132
+ s_type = pkt['flags']['type']
133
+ if s_type == 0:
134
+ return 0
135
+ if s_type == 1:
136
+ return 2
137
+ if s_type == 2:
138
+ return 8
139
+ if s_type == 3:
140
+ return 16
141
+ raise FieldValueError(f'IPv6-Opts: invalid MPL Seed-ID type: {s_type}')
142
+
143
+
144
+ def smf_dpd_data_selector(pkt: 'dict[str, Any]') -> 'Field':
145
+ """Selector function for :attr:`_SMFDPDOption.data` field.
146
+
147
+ Args:
148
+ pkt: Packet data.
149
+
150
+ Returns:
151
+ * If ``mode`` is ``0``, returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
152
+ wrapped :class:`~pcapkit.protocols.schema.internet.ipv6_opts.SMFIdentificationBasedDPDOption`
153
+ instance.
154
+ * If ``mode`` is ``1``, returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
155
+ wrapped :class:`~pcapkit.protocols.schema.internet.ipv6_opts.SMFHashBasedDPDOption`
156
+ instance.
157
+
158
+ """
159
+ mode = Enum_SMFDPDMode.get(pkt['test']['mode'])
160
+ schema = SMFDPDOption.registry[mode]
161
+ if schema is None:
162
+ raise FieldValueError(f'IPv6-Opts: invalid SMF DPD mode: {mode}')
163
+ return SchemaField(length=pkt['test']['len'], schema=schema)
164
+
165
+
166
+ def smf_i_dpd_tid_selector(pkt: 'dict[str, Any]') -> 'Field':
167
+ """Selector function for :attr:`SMFIdentificationBasedDPDOption.tid` field.
168
+
169
+ Args:
170
+ pkt: Packet data.
171
+
172
+ Returns:
173
+ * If ``tid_type`` is ``0``, returns a :class:`~pcapkit.corekit.fields.misc.NoValueField`
174
+ instance.
175
+ * If ``tid_type`` is ``1``, returns a :class:`~pcapkit.corekit.fields.ipaddress.IPv4AddressField`
176
+ instance.
177
+ * If ``tid_type`` is ``2``, returns a :class:`~pcapkit.corekit.fields.ipaddress.IPv6AddressField`
178
+ instance.
179
+ * Otherwise, returns a :class:`~pcapkit.corekit.fields.strings.BytesField` instance.
180
+
181
+ """
182
+ tid_type = Enum_TaggerID.get(pkt['info']['type'])
183
+ tid_len = pkt['info']['len']
184
+
185
+ # update type
186
+ pkt['info']['type'] = tid_type
187
+
188
+ if tid_type == Enum_TaggerID.NULL:
189
+ if tid_len != 0:
190
+ raise FieldValueError(f'IPv6-Opts: invalid TaggerID length: {tid_len}')
191
+ return NoValueField()
192
+ if tid_type == Enum_TaggerID.IPv4:
193
+ if tid_len != 3:
194
+ raise FieldValueError(f'IPv6-Opts: invalid TaggerID length: {tid_len}')
195
+ return IPv4AddressField()
196
+ if tid_type == Enum_TaggerID.IPv6:
197
+ if tid_len != 15:
198
+ raise FieldValueError(f'IPv6-Opts: invalid TaggerID length: {tid_len}')
199
+ return IPv6AddressField()
200
+ return BytesField(length=tid_len + 1)
201
+
202
+
203
+ def quick_start_data_selector(pkt: 'dict[str, Any]') -> 'Field':
204
+ """Selector function for :attr:`_QuickStartOption.data` field.
205
+
206
+ Args:
207
+ pkt: Packet data.
208
+
209
+ Returns:
210
+ * If ``func`` is ``0``, returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
211
+ wrapped :class:`~pcapkit.protocols.schema.internet.ipv6_opts.QuickStartRequestOption`
212
+ instance.
213
+ * If ``func`` is ``8``, returns a :class:`~pcapkit.corekit.fields.misc.SchemaField`
214
+ wrapped :class:`~pcapkit.protocols.schema.internet.ipv6_opts.QuickStartReportOption`
215
+ instance.
216
+
217
+ """
218
+ func = Enum_QSFunction.get(pkt['flags']['func'])
219
+ pkt['flags']['func'] = func
220
+
221
+ schema = QuickStartOption.registry[func]
222
+ if schema is None:
223
+ raise FieldValueError(f'IPv6-Opts: invalid QS function: {func}')
224
+ return SchemaField(length=5, schema=schema)
225
+
226
+
227
+ class Option(EnumSchema[Enum_Option]):
228
+ """Header schema for IPv6-Opts options."""
229
+
230
+ __default__ = lambda: UnassignedOption
231
+
232
+ #: Option type.
233
+ type: 'Enum_Option' = EnumField(length=1, namespace=Enum_Option)
234
+ #: Option length (conditional in case of ``Pad1`` option).
235
+ len: 'int' = ConditionalField(
236
+ UInt8Field(default=0),
237
+ lambda pkt: pkt['type'] != Enum_Option.Pad1,
238
+ )
239
+
240
+ def post_process(self, packet: 'dict[str, Any]') -> 'Schema':
241
+ """Revise ``schema`` data after unpacking process.
242
+
243
+ Args:
244
+ packet: Unpacked data.
245
+
246
+ Returns:
247
+ Revised schema.
248
+
249
+ """
250
+ # for Pad1 option, length is always 0
251
+ if self.type == Enum_Option.Pad1:
252
+ self.len = 0
253
+ return self
254
+
255
+
256
+ @schema_final
257
+ class UnassignedOption(Option):
258
+ """Header schema for IPv6-Opts unassigned options."""
259
+
260
+ #: Option data.
261
+ data: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
262
+
263
+ if TYPE_CHECKING:
264
+ def __init__(self, type: 'Enum_Option', len: 'int', data: 'bytes') -> 'None': ...
265
+
266
+
267
+ @schema_final
268
+ class PadOption(Option, code=[Enum_Option.Pad1,
269
+ Enum_Option.PadN]):
270
+ """Header schema for IPv6-Opts padding options."""
271
+
272
+ #: Padding.
273
+ pad: 'bytes' = PaddingField(length=lambda pkt: pkt.get('len', 0))
274
+
275
+ if TYPE_CHECKING:
276
+ def __init__(self, type: 'Enum_Option', len: 'int') -> 'None': ...
277
+
278
+
279
+ @schema_final
280
+ class TunnelEncapsulationLimitOption(Option, code=Enum_Option.Tunnel_Encapsulation_Limit):
281
+ """Header schema for IPv6-Opts tunnel encapsulation limit options."""
282
+
283
+ #: Tunnel encapsulation limit.
284
+ limit: 'int' = UInt8Field()
285
+
286
+ if TYPE_CHECKING:
287
+ def __init__(self, type: 'Enum_Option', len: 'int', limit: 'int') -> 'None': ...
288
+
289
+
290
+ @schema_final
291
+ class RouterAlertOption(Option, code=Enum_Option.Router_Alert):
292
+ """Header schema for IPv6-Opts router alert options."""
293
+
294
+ #: Router alert.
295
+ alert: 'Enum_RouterAlert' = EnumField(length=2, namespace=Enum_RouterAlert)
296
+
297
+ if TYPE_CHECKING:
298
+ def __init__(self, type: 'Enum_Option', len: 'int', alert: 'Enum_RouterAlert') -> 'None': ...
299
+
300
+
301
+ @schema_final
302
+ class CALIPSOOption(Option, code=Enum_Option.CALIPSO):
303
+ """Header schema for IPv6-Opts common architecture label IPv6 security options."""
304
+
305
+ #: CALIPSO domain of interpretation.
306
+ domain: 'int' = UInt32Field()
307
+ #: Compartment length.
308
+ cmpt_len: 'int' = UInt8Field()
309
+ #: Sens level.
310
+ level: 'int' = UInt8Field()
311
+ #: Checksum (CRC-16).
312
+ checksum: 'bytes' = BytesField(length=2)
313
+ #: Compartment bitmap.
314
+ bitmap: 'bytes' = ConditionalField(
315
+ BytesField(length=lambda pkt: pkt['cmpt_len'] * 4),
316
+ lambda pkt: pkt['cmpt_len'] > 0,
317
+ )
318
+ #: Padding.
319
+ pad: 'bytes' = PaddingField(length=lambda pkt: pkt['len'] - 8 - pkt['cmpt_len'] * 4)
320
+
321
+ if TYPE_CHECKING:
322
+ def __init__(self, type: 'Enum_Option', len: 'int', domain: 'int', cmpt_len: 'int',
323
+ level: 'int', checksum: 'bytes', bitmap: 'Optional[bytes]') -> 'None': ...
324
+
325
+
326
+ @schema_final
327
+ class _SMFDPDOption(Schema):
328
+ """Header schema for IPv6-Opts SMF DPD options with generic representation."""
329
+
330
+ #: SMF DPD mode.
331
+ test: 'SMFDPDTestFlag' = ForwardMatchField(BitField(length=3, namespace={
332
+ 'len': (1, 8),
333
+ 'mode': (16, 1),
334
+ }))
335
+ #: SMF DPD data.
336
+ data: 'SMFIdentificationBasedDPDOption | SMFHashBasedDPDOption' = SwitchField(
337
+ selector=smf_dpd_data_selector,
338
+ )
339
+
340
+ def post_process(self, packet: 'dict[str, Any]') -> 'SMFDPDOption':
341
+ """Revise ``schema`` data after unpacking process.
342
+
343
+ Args:
344
+ packet: Unpacked data.
345
+
346
+ Returns:
347
+ Revised schema.
348
+
349
+ """
350
+ ret = self.data
351
+ return ret
352
+
353
+
354
+ # register ``_SMFDPDOption`` as ``SMF_DPD`` option
355
+ Option.register(Enum_Option.SMF_DPD, _SMFDPDOption)
356
+
357
+
358
+ class SMFDPDOption(Option, EnumSchema[Enum_SMFDPDMode]):
359
+ """Header schema for IPv6-Opts simplified multicast forwarding duplicate packet
360
+ detection (``SMF_DPD``) options."""
361
+
362
+ __enum__: 'DefaultDict[Enum_SMFDPDMode, Type[SMFDPDOption]]' = collections.defaultdict(lambda: None) # type: ignore[arg-type,return-value]
363
+
364
+ if TYPE_CHECKING:
365
+ mode: 'Enum_SMFDPDMode'
366
+
367
+
368
+ @schema_final
369
+ class SMFIdentificationBasedDPDOption(SMFDPDOption, code=Enum_SMFDPDMode.I_DPD):
370
+ """Header schema for IPv6-Opts SMF identification-based DPD options."""
371
+
372
+ test: 'SMFDPDTestFlag' = ForwardMatchField(BitField(length=1, namespace={
373
+ 'mode': (0, 1),
374
+ }))
375
+ #: TaggerID information.
376
+ info: 'TaggerIDInfo' = BitField(length=1, namespace={
377
+ 'mode': (0, 1),
378
+ 'type': (1, 3),
379
+ 'len': (4, 4),
380
+ })
381
+ #: TaggerID.
382
+ tid: 'bytes | IPv4Address | IPv6Address' = ConditionalField(
383
+ SwitchField(selector=smf_i_dpd_tid_selector),
384
+ lambda pkt: pkt['info']['type'] != 0,
385
+ )
386
+ #: Identifier.
387
+ id: 'bytes' = BytesField(length=lambda pkt: pkt['len'] - (
388
+ 1 if pkt['info']['type'] == 0 else (pkt['info']['len'] + 2)
389
+ ))
390
+
391
+ def post_process(self, packet: 'dict[str, Any]') -> 'SMFIdentificationBasedDPDOption':
392
+ """Revise ``schema`` data after unpacking process.
393
+
394
+ Args:
395
+ packet: Unpacked data.
396
+
397
+ Returns:
398
+ Revised schema.
399
+
400
+ """
401
+ ret = super().post_process(packet) # type: SMFIdentificationBasedDPDOption
402
+ ret.mode = Enum_SMFDPDMode.I_DPD
403
+ return ret
404
+
405
+ if TYPE_CHECKING:
406
+ def __init__(self, type: 'Enum_Option', len: 'int', info: 'TaggerIDInfo',
407
+ tid: 'Optional[bytes]', id: 'bytes') -> 'None': ...
408
+
409
+
410
+ @schema_final
411
+ class SMFHashBasedDPDOption(SMFDPDOption, code=Enum_SMFDPDMode.H_DPD):
412
+ """Header schema for IPv6-Opts SMF hash-based DPD options."""
413
+
414
+ #: Hash assist value (HAV).
415
+ hav: 'bytes' = BytesField(length=lambda pkt: pkt['len'])
416
+
417
+ def post_process(self, packet: 'dict[str, Any]') -> 'SMFIdentificationBasedDPDOption':
418
+ """Revise ``schema`` data after unpacking process.
419
+
420
+ Args:
421
+ packet: Unpacked data.
422
+
423
+ Returns:
424
+ Revised schema.
425
+
426
+ """
427
+ ret = super().post_process(packet) # type: SMFIdentificationBasedDPDOption
428
+ ret.mode = Enum_SMFDPDMode.H_DPD
429
+ return ret
430
+
431
+ if TYPE_CHECKING:
432
+ def __init__(self, type: 'Enum_Option', len: 'int', hav: 'bytes') -> 'None': ...
433
+
434
+
435
+ @schema_final
436
+ class PDMOption(Option, code=Enum_Option.PDM):
437
+ """Header schema for IPv6-Opts performance and diagnostic metrics (PDM) options."""
438
+
439
+ #: Scale delta time last received (DTLR).
440
+ scaledtlr: 'int' = UInt8Field()
441
+ #: Scale delta time last sent (DTLS).
442
+ scaledtls: 'int' = UInt8Field()
443
+ #: Packet sequence number (PSN) this packet.
444
+ psntp: 'int' = UInt16Field()
445
+ #: Packet sequence number (PSN) last received.
446
+ psnlr: 'int' = UInt16Field()
447
+ #: Delta time last received (DTLR).
448
+ deltatlr: 'int' = UInt16Field()
449
+ #: Delta time last sent (DTLS).
450
+ deltatls: 'int' = UInt16Field()
451
+
452
+ if TYPE_CHECKING:
453
+ def __init__(self, type: 'Enum_Option', len: 'int', scaledtlr: 'int', scaledtls: 'int',
454
+ psntp: 'int', psnlr: 'int', deltatlr: 'int', deltatls: 'int') -> 'None': ...
455
+
456
+
457
+ @schema_final
458
+ class _QuickStartOption(Schema):
459
+ """Header schema for IPv6-Opts quick start options in generic representation."""
460
+
461
+ #: Flags.
462
+ flags: 'QSTestFlags' = ForwardMatchField(BitField(length=3, namespace={
463
+ 'func': (16, 4),
464
+ }))
465
+ #: QS data.
466
+ data: 'QuickStartRequestOption | QuickStartReportOption' = SwitchField(
467
+ selector=quick_start_data_selector,
468
+ )
469
+
470
+ def post_process(self, packet: 'dict[str, Any]') -> 'QuickStartOption':
471
+ """Revise ``schema`` data after unpacking process.
472
+
473
+ Args:
474
+ packet: Unpacked data.
475
+
476
+ Returns:
477
+ Revised schema.
478
+
479
+ """
480
+ ret = self.data
481
+ ret.func = Enum_QSFunction.get(self.flags['func'])
482
+ return ret
483
+
484
+
485
+ # register ``_QuickStartOption`` as ``Quick_Start`` option
486
+ Option.register(Enum_Option.Quick_Start, _QuickStartOption)
487
+
488
+
489
+ class QuickStartOption(Option, EnumSchema[Enum_QSFunction]):
490
+ """Header schema for IPv6-Opts quick start options."""
491
+
492
+ #: Flags.
493
+ flags: 'QuickStartFlags' = BitField(length=1, namespace={
494
+ 'func': (0, 4),
495
+ 'rate': (4, 4),
496
+ })
497
+
498
+ if TYPE_CHECKING:
499
+ func: 'Enum_QSFunction'
500
+
501
+
502
+ @schema_final
503
+ class QuickStartRequestOption(QuickStartOption, code=Enum_QSFunction.Quick_Start_Request):
504
+ """Header schema for IPv6-Opts quick start request options."""
505
+
506
+ #: QS time-to-live (TTL).
507
+ ttl: 'int' = UInt8Field()
508
+ #: QS nonce.
509
+ nonce: 'QSNonce' = BitField(length=4, namespace={
510
+ 'nonce': (0, 30),
511
+ })
512
+
513
+ if TYPE_CHECKING:
514
+ def __init__(self, type: 'Enum_Option', len: 'int', flags: 'QuickStartFlags',
515
+ ttl: 'int', nonce: 'QSNonce') -> 'None': ...
516
+
517
+
518
+ @schema_final
519
+ class QuickStartReportOption(QuickStartOption, code=Enum_QSFunction.Report_of_Approved_Rate):
520
+ """Header schema for IPv6-Opts quick start report of approved rate options."""
521
+
522
+ #: Reserved.
523
+ reserved: 'bytes' = PaddingField(length=1)
524
+ #: QS nonce.
525
+ nonce: 'QSNonce' = BitField(length=4, namespace={
526
+ 'nonce': (0, 30),
527
+ })
528
+
529
+ if TYPE_CHECKING:
530
+ def __init__(self, type: 'Enum_Option', len: 'int', flags: 'QuickStartFlags',
531
+ nonce: 'QSNonce') -> 'None': ...
532
+
533
+
534
+ @schema_final
535
+ class RPLOption(Option, code=[Enum_Option.RPL_Option_0x23,
536
+ Enum_Option.RPL_Option_0x63]):
537
+ """Header schema for IPv6-Opts routing protocol for low-power and lossy networks (RPL) options."""
538
+
539
+ #: Flags.
540
+ flags: 'RPLFlags' = BitField(length=1, namespace={
541
+ 'down': (0, 1),
542
+ 'rank_err': (1, 1),
543
+ 'fwd_err': (2, 1),
544
+ })
545
+ #: RPL instance ID.
546
+ id: 'int' = UInt8Field()
547
+ #: Sender rank.
548
+ rank: 'int' = UInt16Field()
549
+
550
+ if TYPE_CHECKING:
551
+ def __init__(self, type: 'Enum_Option', len: 'int', flags: 'RPLFlags', id: 'int',
552
+ rank: 'int') -> 'None': ...
553
+
554
+
555
+ @schema_final
556
+ class MPLOption(Option, code=Enum_Option.MPL_Option):
557
+ """Header schema for IPv6-Opts multicast protocol for low-power and lossy networks (MPL) options."""
558
+
559
+ #: Flags.
560
+ flags: 'MPLFlags' = BitField(length=1, namespace={
561
+ 'type': (0, 2),
562
+ 'max': (2, 1),
563
+ 'drop': (3, 1),
564
+ })
565
+ #: MPL sequence number.
566
+ seq: 'int' = UInt8Field()
567
+ #: MPL Seed-ID.
568
+ seed: 'int' = ConditionalField(
569
+ NumberField(length=mpl_opt_seed_id_len, signed=False),
570
+ lambda pkt: pkt['flags']['type'] != Enum_SeedID.IPV6_SOURCE_ADDRESS,
571
+ )
572
+ #: Reserved data (padding).
573
+ pad: 'bytes' = PaddingField(length=lambda pkt: pkt['len'] - 2 - (
574
+ 0 if pkt['flags']['type'] == 0 else mpl_opt_seed_id_len(pkt)
575
+ ))
576
+
577
+ def post_process(self, packet: 'dict[str, Any]') -> 'Schema':
578
+ """Revise ``schema`` data after unpacking process.
579
+
580
+ Args:
581
+ packet: Unpacked data.
582
+
583
+ Returns:
584
+ Revised schema.
585
+
586
+ """
587
+ if self.flags['type'] == Enum_SeedID.IPV6_SOURCE_ADDRESS:
588
+ self.seed = packet.get('src', NoValue)
589
+ return self
590
+
591
+ if TYPE_CHECKING:
592
+ def __init__(self, type: 'Enum_Option', len: 'int', flags: 'MPLFlags', seq: 'int',
593
+ seed: 'Optional[int]') -> 'None': ...
594
+
595
+
596
+ @schema_final
597
+ class ILNPOption(Option, code=Enum_Option.ILNP_Nonce):
598
+ """Header schema for IPv6-Opts identifier-locator network protocol (ILNP) options."""
599
+
600
+ #: Nonce value.
601
+ nonce: 'int' = NumberField(length=lambda pkt: pkt['len'], signed=False)
602
+
603
+ if TYPE_CHECKING:
604
+ def __init__(self, type: 'Enum_Option', len: 'int', nonce: 'int') -> 'None': ...
605
+
606
+
607
+ @schema_final
608
+ class LineIdentificationOption(Option, code=Enum_Option.Line_Identification_Option):
609
+ """Header schema for IPv6-Opts line-identification options."""
610
+
611
+ #: Line ID length.
612
+ id_len: 'int' = UInt8Field()
613
+ #: Line ID.
614
+ id: 'bytes' = BytesField(length=lambda pkt: pkt['id_len'])
615
+
616
+ if TYPE_CHECKING:
617
+ def __init__(self, type: 'Enum_Option', len: 'int', id_len: 'int', id: 'bytes') -> 'None': ...
618
+
619
+
620
+ @schema_final
621
+ class JumboPayloadOption(Option, code=Enum_Option.Jumbo_Payload):
622
+ """Header schema for IPv6-Opts jumbo payload options."""
623
+
624
+ #: Jumbo payload length.
625
+ jumbo_len: 'int' = UInt32Field()
626
+
627
+ if TYPE_CHECKING:
628
+ def __init__(self, type: 'Enum_Option', len: 'int', jumbo_len: 'int') -> 'None': ...
629
+
630
+
631
+ @schema_final
632
+ class HomeAddressOption(Option, code=Enum_Option.Home_Address):
633
+ """Header schema for IPv6-Opts home address options."""
634
+
635
+ #: Home address.
636
+ addr: 'IPv6Address' = IPv6AddressField()
637
+
638
+ if TYPE_CHECKING:
639
+ def __init__(self, type: 'Enum_Option', len: 'int', addr: 'IPv6Address | int | str | bytes') -> 'None': ...
640
+
641
+
642
+ @schema_final
643
+ class IPDFFOption(Option, code=Enum_Option.IP_DFF):
644
+ """Header schema for IPv6-Opts depth-first forwarding (``IP_DFF``) options."""
645
+
646
+ #: Flags.
647
+ flags: 'DFFFlags' = BitField(length=1, namespace={
648
+ 'ver': (0, 2),
649
+ 'dup': (2, 1),
650
+ 'ret': (3, 1),
651
+ })
652
+ #: Sequence number.
653
+ seq: 'int' = UInt16Field()
654
+
655
+ if TYPE_CHECKING:
656
+ def __init__(self, type: 'Enum_Option', len: 'int', flags: 'DFFFlags', seq: 'int') -> 'None': ...
657
+
658
+
659
+ @schema_final
660
+ class IPv6_Opts(Schema):
661
+ """Header schema for IPv6-Opts packet."""
662
+
663
+ #: Next header.
664
+ next: 'Enum_TransType' = EnumField(length=1, namespace=Enum_TransType)
665
+ #: Header length.
666
+ len: 'int' = UInt8Field()
667
+ #: Options.
668
+ options: 'list[Option]' = OptionField(
669
+ length=lambda pkt: pkt['len'] * 8 + 6,
670
+ base_schema=Option,
671
+ type_name='type',
672
+ registry=Option.registry,
673
+ )
674
+ #: Payload.
675
+ payload: 'bytes' = PayloadField()
676
+
677
+ if TYPE_CHECKING:
678
+ def __init__(self, next: 'Enum_TransType', len: 'int',
679
+ options: 'bytes | list[bytes | Option]',
680
+ payload: 'bytes | Protocol | Schema') -> 'None': ...