package tcpip
OCaml TCP/IP networking stack, used in MirageOS
Install
Dune Dependency
Authors
Maintainers
Sources
tcpip-v6.4.0.tbz
sha256=6e32bf540d291e9b7325cb3dd00df2f695533e009c46ea534d5518b9492c7348
sha512=2e9f9ca2eeac637599eb48e087b4632598539f1c76f9251758995c7eedeb723f8b951d557a2a53b85a58d50a04e68e15598581f88fca8997733e800fcfca422b
doc/src/tcpip.ipv6/ipv6_wire.ml.html
Source file ipv6_wire.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
[%%cstruct type ipv6 = { version_flow: uint32_t; len: uint16_t; (* payload length (includes extensions) *) nhdr: uint8_t; (* next header *) hlim: uint8_t; (* hop limit *) src: uint8_t [@len 16]; dst: uint8_t [@len 16]; } [@@big_endian] ] let int_to_protocol = function | 58 -> Some `ICMP | 6 -> Some `TCP | 17 -> Some `UDP | _ -> None let protocol_to_int = function | `ICMP -> 58 | `TCP -> 6 | `UDP -> 17 [%%cstruct type icmpv6 = { ty: uint8_t; code: uint8_t; csum: uint16_t; reserved: uint32_t; } [@@big_endian] ] [%%cstruct type pingv6 = { ty: uint8_t; code: uint8_t; csum: uint16_t; id: uint16_t; seq: uint16_t; } [@@big_endian] ] [%%cstruct type ns = { ty: uint8_t; code: uint8_t; csum: uint16_t; reserved: uint32_t; target: uint8_t [@len 16]; } [@@big_endian] ] [%%cstruct type na = { ty: uint8_t; code: uint8_t; csum: uint16_t; reserved: uint32_t; target: uint8_t [@len 16]; } [@@big_endian] ] let get_na_router buf = (Cstruct.get_uint8 buf 4 land 0x80) <> 0 let get_na_solicited buf = (Cstruct.get_uint8 buf 4 land 0x40) <> 0 let get_na_override buf = (Cstruct.get_uint8 buf 4 land 0x20) <> 0 [%%cstruct type rs = { ty: uint8_t; code: uint8_t; csum: uint16_t; reserved: uint32_t; } [@@big_endian] ] [%%cstruct type opt_prefix = { ty: uint8_t; len: uint8_t; prefix_len: uint8_t; reserved1: uint8_t; valid_lifetime: uint32_t; preferred_lifetime: uint32_t; reserved2: uint32_t; prefix: uint8_t [@len 16]; } [@@big_endian] ] let get_opt_prefix_on_link buf = get_opt_prefix_reserved1 buf land 0x80 <> 0 let get_opt_prefix_autonomous buf = get_opt_prefix_reserved1 buf land 0x40 <> 0 [%%cstruct type opt = { ty: uint8_t; len: uint8_t; } [@@big_endian] ] [%%cstruct type llopt = { ty: uint8_t; len: uint8_t; addr: uint8_t [@len 6]; } [@@big_endian] ] [%%cstruct type ra = { ty: uint8_t; code: uint8_t; csum: uint16_t; cur_hop_limit: uint8_t; reserved: uint8_t; router_lifetime: uint16_t; reachable_time: uint32_t; retrans_timer: uint32_t; } [@@big_endian] ] let sizeof_ipv6_pseudo_header = 16 + 16 + 4 + 4
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>