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. gpt
  41. h2-mirage
  42. hacl-star >= "0.7.0"
  43. hex >= "0.2.0"
  44. hkdf < "1.0.3"
  45. hvsock < "1.0.0"
  46. io-page < "2.0.0"
  47. io-page-unix < "2.0.0"
  48. io-page-xen < "2.0.0"
  49. ipaddr-cstruct < "5.2.0"
  50. irmin >= "0.9.0" & < "2.0.0"
  51. irmin-git >= "2.3.0"
  52. irmin-indexeddb >= "0.3"
  53. iso-filesystem
  54. key-parsers >= "0.5.0" & < "1.2.1"
  55. launchd
  56. letsencrypt = "0.2.5"
  57. letsencrypt-app < "0.4.0"
  58. macaddr-cstruct < "5.2.0"
  59. mbr-format < "1.0.0"
  60. metrics-mirage
  61. mirage >= "0.7.2" & < "0.9.1" | >= "0.10.0" & < "2.4.0"
  62. mirage-block < "1.0.0"
  63. mirage-block-ccm < "1.1.0"
  64. mirage-block-ramdisk
  65. mirage-block-solo5 < "0.6.2"
  66. mirage-block-unix < "2.8.3"
  67. mirage-block-xen < "2.1.1"
  68. mirage-btrees
  69. mirage-channel-lwt
  70. mirage-clock-unix < "1.0.0"
  71. mirage-clock-xen < "1.0.0"
  72. mirage-conduit = "2.3.1"
  73. mirage-console-lwt
  74. mirage-console-solo5 >= "0.2.0"
  75. mirage-console-unix < "2.3.2"
  76. mirage-console-xen = "4.0.0"
  77. mirage-console-xen-backend >= "2.3.2" & < "2.3.4" | = "4.0.0"
  78. mirage-console-xen-cli
  79. mirage-dns < "2.6.0"
  80. mirage-entropy < "0.5.0"
  81. mirage-entropy-unix
  82. mirage-entropy-xen
  83. mirage-flow < "1.2.0"
  84. mirage-flow-rawlink >= "1.1.0"
  85. mirage-fs >= "0.4.0" & < "1.0.0"
  86. mirage-fs-lwt
  87. mirage-fs-mem
  88. mirage-fs-unix < "1.4.1"
  89. mirage-kv-lwt
  90. mirage-nat < "2.2.4"
  91. mirage-net = "0.5.2"
  92. mirage-net-fd < "0.2.1"
  93. mirage-net-lwt
  94. mirage-net-macosx
  95. mirage-net-solo5
  96. mirage-net-unix != "2.4.1"
  97. mirage-net-xen < "1.7.0"
  98. mirage-profile < "0.8.0"
  99. mirage-protocols-lwt
  100. mirage-qubes < "0.8.0"
  101. mirage-qubes-ipv4 < "0.9.3"
  102. mirage-random < "2.0.0"
  103. mirage-random-stdlib
  104. mirage-random-test
  105. mirage-solo5
  106. mirage-stack-lwt < "1.1.0"
  107. mirage-tc
  108. mirage-tcpip-unix
  109. mirage-tcpip-xen
  110. mirage-types-lwt < "3.4.0"
  111. mirage-unix < "3.0.8"
  112. mirage-vnetif < "0.4.0"
  113. mirage-www < "0.4.0" | >= "1.1.0"
  114. mirage-xen < "2.0.0" | >= "2.3.2"
  115. monorobot
  116. mrt-format
  117. mstruct < "1.3.4"
  118. nbd >= "0.9.2" & < "4.0.3"
  119. nocrypto < "0.5.4"
  120. noise
  121. openflow
  122. otr < "0.3.9"
  123. ox < "1.1.1"
  124. packet
  125. pbkdf < "0.3.0" | = "1.1.0"
  126. pcap-format >= "0.3.3"
  127. pcf-format
  128. ppx_cstruct < "3.0.1"
  129. protocol-9p < "0.11.2"
  130. protocol-9p-tool = "0.12.0" | >= "2.0.0" & < "2.0.2"
  131. protocol-9p-unix < "0.11.2"
  132. qcow < "0.11.0"
  133. qcow-format
  134. qcow-tool
  135. randomconv < "0.2.0"
  136. rawlink < "0.6"
  137. resp-mirage = "0.10.0"
  138. rfc6287 >= "1.0.2" & < "1.0.4"
  139. salsa20 < "1.1.0"
  140. salsa20-core < "1.0.0"
  141. scrypt-kdf < "1.1.0"
  142. sendmail >= "0.4.1" & < "0.5.0"
  143. shared-block-ring < "2.3.0"
  144. shared-memory-ring < "2.0.0"
  145. slack
  146. ssh-agent
  147. tar < "2.0.0"
  148. tar-format >= "0.2.0"
  149. tar-mirage
  150. tar-unix < "2.0.0"
  151. tcpip < "3.0.0"
  152. tftp
  153. tls < "0.9.0"
  154. u2f = "0.1.1"
  155. vchan != "3.0.0" & < "6.0.1"
  156. vchan-unix >= "4.0.0"
  157. vchan-xen >= "4.0.0"
  158. vhd-format
  159. vhd-format-lwt
  160. vhd-tool
  161. vmnet
  162. websocket = "2.2"
  163. x509 < "0.6.3"
  164. xapi-rrd-transport
  165. xe
  166. xe-unikernel-upload
  167. xen-api-client >= "0.9.6"
  168. xen-block-driver >= "0.2.5"
  169. xen-gnt
  170. xenstore >= "1.2.0" & < "1.3.0"
  171. xentropyd

Conflicts

None