package cstruct

  1. Overview
  2. No Docs

Description

Cstruct is a library and syntax extension to make it easier to access C-like structures directly from OCaml. It supports both reading and writing to these structures, and they are accessed via the Bigarray module.

An example pcap description using PPX extension points is:

[%%cstruct
type pcap_header = {
  magic_number: uint32_t;   (* magic number *)
  version_major: uint16_t;  (* major version number *)
  version_minor: uint16_t;  (* minor version number *)
  thiszone: uint32_t;       (* GMT to local correction *)
  sigfigs: uint32_t;        (* accuracy of timestamps *)
  snaplen: uint32_t;        (* max length of captured packets, in octets *)
  network: uint32_t;        (* data link type *)
} [@@little_endian]]

An example pcap description using Camlp4 is:

cstruct pcap_header {
  uint32_t magic_number;   (* magic number *)
  uint16_t version_major;  (* major version number *)
  uint16_t version_minor;  (* minor version number *)
  uint32_t thiszone;       (* GMT to local correction *)
  uint32_t sigfigs;        (* accuracy of timestamps *)
  uint32_t snaplen;        (* max length of captured packets, in octets *)
  uint32_t network         (* data link type *)
} as little_endian

Tags

org:mirage org:xapi-project

Published: 19 Feb 2016

Dev Dependencies (1)

  1. ounit with-test

  1. albatross < "1.3.0"
  2. angstrom < "0.7.0"
  3. arakoon >= "1.8.6" & < "1.8.12"
  4. asn1-combinators >= "0.1.2" & != "0.2.0-1" & < "0.2.6"
  5. awa-mirage < "0.0.2"
  6. balancer
  7. buffer-pool
  8. capnp-rpc-net >= "1.1" & < "1.2.1"
  9. channel
  10. charrua-client < "0.9"
  11. charrua-core < "0.8"
  12. charrua-unix < "0.3" | = "0.6"
  13. cohttp >= "0.9.7" & < "0.10.0"
  14. conduit >= "0.6.0" & < "0.15.2"
  15. conduit-async = "3.0.0"
  16. conduit-lwt = "3.0.0"
  17. conex < "0.10.0"
  18. conex-mirage-crypto
  19. conex-nocrypto
  20. cowabloga >= "0.0.5"
  21. crc
  22. crunch >= "2.0.0" & < "3.0.0"
  23. cstruct-lwt < "3.0.0"
  24. cstruct-unix < "3.0.0"
  25. datakit-ci >= "0.10.0" & < "0.12.4"
  26. datakit-client < "0.9.0"
  27. datakit-server < "0.9.0"
  28. depyt
  29. dns >= "0.15.0" & < "0.19.0"
  30. dream < "1.0.0~alpha2"
  31. duff < "0.3"
  32. eqaf >= "0.8"
  33. fat-filesystem >= "0.10.0" & < "0.11.0"
  34. frenetic < "2.0.0" | >= "3.2.0" & < "5.0.5"
  35. git >= "1.4.3" & < "1.6.0" | >= "2.0.0" & < "3.0.0"
  36. git-http < "1.11.0"
  37. git-mirage = "1.11.0"
  38. github-hooks >= "0.2.0"
  39. gluten-mirage < "0.3.0"
  40. h2-mirage
  41. hacl-star >= "0.7.0"
  42. hex >= "0.2.0"
  43. hkdf < "1.0.3"
  44. hvsock < "1.0.0"
  45. io-page < "2.0.0"
  46. io-page-unix < "2.0.0"
  47. io-page-xen < "2.0.0"
  48. ipaddr-cstruct < "5.2.0"
  49. irmin >= "0.9.0" & < "2.0.0"
  50. irmin-git >= "2.3.0"
  51. irmin-indexeddb >= "0.3"
  52. iso-filesystem
  53. key-parsers >= "0.5.0" & < "1.2.1"
  54. launchd
  55. letsencrypt = "0.2.5"
  56. letsencrypt-app < "0.4.0"
  57. macaddr-cstruct < "5.2.0"
  58. mbr-format < "1.0.0"
  59. metrics-mirage
  60. mirage >= "0.7.2" & < "0.9.1" | >= "0.10.0" & < "2.4.0"
  61. mirage-block < "1.0.0"
  62. mirage-block-ccm < "1.1.0"
  63. mirage-block-ramdisk
  64. mirage-block-solo5 < "0.6.2"
  65. mirage-block-unix < "2.8.3"
  66. mirage-block-xen < "2.1.1"
  67. mirage-btrees
  68. mirage-channel-lwt
  69. mirage-clock-unix < "1.0.0"
  70. mirage-clock-xen < "1.0.0"
  71. mirage-conduit = "2.3.1"
  72. mirage-console-lwt
  73. mirage-console-solo5 >= "0.2.0"
  74. mirage-console-unix < "2.3.2"
  75. mirage-console-xen = "4.0.0"
  76. mirage-console-xen-backend >= "2.3.2" & < "2.3.4" | = "4.0.0"
  77. mirage-console-xen-cli
  78. mirage-dns < "2.6.0"
  79. mirage-entropy < "0.5.0"
  80. mirage-entropy-unix
  81. mirage-entropy-xen
  82. mirage-flow < "1.2.0"
  83. mirage-flow-rawlink >= "1.1.0"
  84. mirage-fs >= "0.4.0" & < "1.0.0"
  85. mirage-fs-lwt
  86. mirage-fs-mem
  87. mirage-fs-unix < "1.4.1"
  88. mirage-kv-lwt
  89. mirage-nat < "2.2.4"
  90. mirage-net = "0.5.2"
  91. mirage-net-fd < "0.2.1"
  92. mirage-net-lwt
  93. mirage-net-macosx
  94. mirage-net-solo5
  95. mirage-net-unix != "2.4.1"
  96. mirage-net-xen < "1.7.0"
  97. mirage-profile < "0.8.0"
  98. mirage-protocols-lwt
  99. mirage-qubes < "0.8.0"
  100. mirage-qubes-ipv4 < "0.9.3"
  101. mirage-random < "2.0.0"
  102. mirage-random-stdlib
  103. mirage-random-test
  104. mirage-solo5
  105. mirage-stack-lwt < "1.1.0"
  106. mirage-tc
  107. mirage-tcpip-unix
  108. mirage-tcpip-xen
  109. mirage-types-lwt < "3.4.0"
  110. mirage-unix < "3.0.8"
  111. mirage-vnetif < "0.4.0"
  112. mirage-www < "0.4.0" | >= "1.1.0"
  113. mirage-xen < "2.0.0" | >= "2.3.2"
  114. monorobot
  115. mrt-format
  116. mstruct < "1.3.4"
  117. nbd >= "0.9.2" & < "4.0.3"
  118. nocrypto < "0.5.4"
  119. noise
  120. openflow
  121. otr < "0.3.9"
  122. ox < "1.1.1"
  123. packet
  124. pbkdf < "0.3.0" | = "1.1.0"
  125. pcap-format >= "0.3.3"
  126. pcf-format
  127. ppx_cstruct < "3.0.1"
  128. protocol-9p < "0.11.2"
  129. protocol-9p-tool = "0.12.0" | >= "2.0.0" & < "2.0.2"
  130. protocol-9p-unix < "0.11.2"
  131. qcow < "0.11.0"
  132. qcow-format
  133. qcow-tool
  134. randomconv
  135. rawlink < "0.6"
  136. resp-mirage = "0.10.0"
  137. rfc6287 >= "1.0.2" & < "1.0.4"
  138. salsa20 < "1.1.0"
  139. salsa20-core < "1.0.0"
  140. scrypt-kdf < "1.1.0"
  141. sendmail >= "0.4.1" & < "0.5.0"
  142. shared-block-ring < "2.3.0"
  143. shared-memory-ring < "2.0.0"
  144. ssh-agent
  145. tar < "2.0.0"
  146. tar-format >= "0.2.0"
  147. tar-mirage
  148. tar-unix < "2.0.0"
  149. tcpip < "3.0.0"
  150. tftp
  151. tls < "0.9.0"
  152. u2f = "0.1.1"
  153. vchan != "3.0.0" & < "6.0.1"
  154. vchan-unix >= "4.0.0"
  155. vchan-xen >= "4.0.0"
  156. vhd-format
  157. vhd-format-lwt
  158. vhd-tool
  159. vmnet
  160. websocket = "2.2"
  161. x509 < "0.6.3"
  162. xapi-rrd-transport
  163. xe
  164. xe-unikernel-upload
  165. xen-api-client >= "0.9.6"
  166. xen-block-driver >= "0.2.5"
  167. xen-gnt
  168. xenstore >= "1.2.0" & < "1.3.0"
  169. xentropyd

Conflicts

None