@@ -17,14 +17,14 @@ module RoundTrip = struct
17
17
let unparsable_eq (l1 , b1 ) (l2 , b2 ) =
18
18
l1 = l2 && compare (Cstruct. to_string b1) (Cstruct. to_string b2) = 0
19
19
20
- let udp_eq e1 e2 =
20
+ let udp_eq ?( chksum = false ) e1 e2 =
21
21
let open Udp in
22
22
e1.src = e2.src &&
23
23
e1.dst = e2.dst &&
24
- e1.chksum = e2.chksum &&
24
+ (( not chksum) || e1.chksum = e2.chksum) &&
25
25
compare (Cstruct. to_string e1.payload) (Cstruct. to_string e2.payload) = 0
26
26
27
- let tcp_eq e1 e2 =
27
+ let tcp_eq ?( chksum = false ) e1 e2 =
28
28
let open Tcp in
29
29
e1.src = e2.src &&
30
30
e1.dst = e2.dst &&
@@ -33,11 +33,11 @@ module RoundTrip = struct
33
33
e1.offset = e2.offset &&
34
34
e1.flags = e2.flags &&
35
35
e1.window = e2.window &&
36
- e1.chksum = e2.chksum &&
37
36
e1.urgent = e2.urgent &&
37
+ ((not chksum) || e1.chksum = e2.chksum) &&
38
38
compare (Cstruct. to_string e1.payload) (Cstruct. to_string e2.payload) = 0
39
39
40
- let ip_eq e1 e2 =
40
+ let ip_eq ?( chksum = false ) e1 e2 =
41
41
let open Ip in
42
42
e1.tos = e2.tos &&
43
43
e1.ident = e2.ident &&
@@ -50,13 +50,13 @@ module RoundTrip = struct
50
50
| Unparsable u1 , Unparsable u2 ->
51
51
unparsable_eq u1 u2
52
52
| Udp p1 , Udp p2 ->
53
- udp_eq p1 p2
53
+ udp_eq ~chksum p1 p2
54
54
| Tcp p1 , Tcp p2 ->
55
- tcp_eq p1 p2
55
+ tcp_eq ~chksum p1 p2
56
56
| _ , _ ->
57
57
e1 = e2
58
58
59
- let dl_eq e1 e2 =
59
+ let dl_eq ?( chksum = false ) e1 e2 =
60
60
e1.dlSrc = e2.dlSrc &&
61
61
e1.dlDst = e2.dlDst &&
62
62
e1.dlVlan = e2.dlVlan &&
@@ -65,12 +65,16 @@ module RoundTrip = struct
65
65
| Unparsable u1 , Unparsable u2 ->
66
66
unparsable_eq u1 u2
67
67
| Ip nw1 , Ip nw2 ->
68
- ip_eq nw1 nw2
68
+ ip_eq ~chksum nw1 nw2
69
69
| _ , _ ->
70
70
e1 = e2
71
71
72
- let prop_roundtrip parse marshal e =
73
- dl_eq (parse (marshal e)) e
72
+ let prop_roundtrip ?(chksum =false ) parse marshal e =
73
+ dl_eq ~chksum (parse (marshal e)) e
74
+
75
+ let prop_roundtrip2 parse marshal e =
76
+ let e' = parse (marshal e) in
77
+ prop_roundtrip ~chksum: true parse marshal e'
74
78
75
79
TEST " Roundtrip property for unparsable Ethernet frames" =
76
80
(packet_quickCheck (Arb. arbitrary_packet Arb. arbitrary_dl_unparsable)
@@ -92,13 +96,13 @@ module RoundTrip = struct
92
96
let udp = Gen. map_gen (fun x -> Ip. Udp (x))
93
97
(Arb. arbitrary_udp (Arb. arbitrary_payload 65507 )) in
94
98
(packet_quickCheck (mk_ip udp)
95
- (prop_roundtrip parse marshal))
99
+ (prop_roundtrip2 parse marshal))
96
100
97
101
TEST " Roundtrip property for TCP packets" =
98
102
let tcp = Gen. map_gen (fun x -> Ip. Tcp (x))
99
103
(Arb. arbitrary_tcp (Arb. arbitrary_payload (65507 - 128 ))) in
100
104
(packet_quickCheck (mk_ip tcp)
101
- (prop_roundtrip parse marshal))
105
+ (prop_roundtrip2 parse marshal))
102
106
103
107
end
104
108
0 commit comments