1 (* Create an IPv4 header.
2 * $Id: make_ipv4_header.ml,v 1.1 2008-03-31 22:52:17 rjones Exp $
8 let hdrlen = 5 (* no options *)
10 let length = 64 (* total packet length *)
11 let identification = 0
15 let protocol = 17 (* UDP *)
17 let source = 0xc0a80202 (* 192.168.2.2 *)
18 let dest = 0xc0a80201 (* 192.168.2.1 *)
19 let options = Bitmatch.empty_bitstring
20 let payload_length = (length - hdrlen*4) * 8
21 let payload = Bitmatch.create_bitstring payload_length
24 <| version : 4; hdrlen : 4; tos : 8; length : 16;
25 identification : 16; flags : 3; fragoffset : 13;
26 ttl : 8; protocol : 8; checksum : 16;
29 options : -1, bitstring;
30 payload : payload_length, bitstring |>
35 let header = Bitmatch.join_bitstrings [
36 Bitmatch.create_unsigned_be version 4;
37 Bitmatch.create_unsigned_be hdrlen 4; (* etc. *)
39 Bitmatch.check_bitstring_length payload payload_length
42 which can throw an exception if values are out of range.
45 let () = Bitmatch.file_of_bitstring header "ipv4_header_out.dat"