1
+ // Certain casts are required only on Windows. Inform Clippy to ignore them.
2
+ #![ allow( clippy:: unnecessary_cast) ]
3
+
1
4
use std:: convert:: TryFrom ;
2
5
use num_enum:: { TryFromPrimitive , IntoPrimitive } ;
3
6
use libipt_sys:: {
@@ -6,35 +9,36 @@ use libipt_sys::{
6
9
pt_packet_type_ppt_fup,
7
10
pt_packet_type_ppt_tip_pge,
8
11
pt_packet_type_ppt_tip_pgd,
12
+ pt_ip_compression,
9
13
pt_ip_compression_pt_ipc_full,
10
14
pt_ip_compression_pt_ipc_sext_48,
11
15
pt_ip_compression_pt_ipc_suppressed,
12
16
pt_ip_compression_pt_ipc_update_16,
13
17
pt_ip_compression_pt_ipc_update_32,
14
- pt_ip_compression_pt_ipc_update_48
18
+ pt_ip_compression_pt_ipc_update_48,
15
19
} ;
16
20
17
21
/// The IP compression
18
22
#[ derive( Clone , Copy , Debug , TryFromPrimitive , IntoPrimitive ) ]
19
23
#[ repr( u32 ) ]
20
24
pub enum Compression {
21
25
/// No payload. The IP has been suppressed
22
- Suppressed = pt_ip_compression_pt_ipc_suppressed,
26
+ Suppressed = pt_ip_compression_pt_ipc_suppressed as u32 ,
23
27
24
28
/// Payload: 16 bits. Update last IP
25
- Update16 = pt_ip_compression_pt_ipc_update_16,
29
+ Update16 = pt_ip_compression_pt_ipc_update_16 as u32 ,
26
30
27
31
/// Payload: 32 bits. Update last IP
28
- Update32 = pt_ip_compression_pt_ipc_update_32,
32
+ Update32 = pt_ip_compression_pt_ipc_update_32 as u32 ,
29
33
30
34
/// Payload: 48 bits. Sign extend to full address
31
- Sext48 = pt_ip_compression_pt_ipc_sext_48,
35
+ Sext48 = pt_ip_compression_pt_ipc_sext_48 as u32 ,
32
36
33
37
/// Payload: 48 bits. Update last IP
34
- Update48 = pt_ip_compression_pt_ipc_update_48,
38
+ Update48 = pt_ip_compression_pt_ipc_update_48 as u32 ,
35
39
36
40
/// Payload: 64 bits. Full address
37
- Full = pt_ip_compression_pt_ipc_full
41
+ Full = pt_ip_compression_pt_ipc_full as u32 ,
38
42
}
39
43
40
44
/// A packet with IP payload.
@@ -44,7 +48,7 @@ pub struct Tip (pt_packet_ip);
44
48
impl Tip {
45
49
#[ inline]
46
50
pub fn new ( tip : u64 , compression : Compression ) -> Self {
47
- Tip ( pt_packet_ip { ip : tip, ipc : compression . into ( ) } )
51
+ Tip ( pt_packet_ip { ip : tip, ipc : u32 :: from ( compression ) as pt_ip_compression } )
48
52
}
49
53
50
54
/// Zero-extended payload ip
@@ -59,13 +63,13 @@ impl Tip {
59
63
pub fn compression ( self ) -> Compression {
60
64
// if this tryfrom panics, there is a bug
61
65
// in either libipt or this crate.
62
- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
66
+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
63
67
}
64
68
65
69
/// IP compression
66
70
#[ inline]
67
71
pub fn set_compression ( & mut self , compression : Compression ) {
68
- self . 0 . ipc = compression . into ( )
72
+ self . 0 . ipc = u32 :: from ( compression ) as pt_ip_compression
69
73
}
70
74
}
71
75
@@ -76,7 +80,7 @@ pub struct Fup (pt_packet_ip);
76
80
impl Fup {
77
81
#[ inline]
78
82
pub fn new ( fup : u64 , compression : Compression ) -> Self {
79
- Fup ( pt_packet_ip { ip : fup, ipc : compression . into ( ) } )
83
+ Fup ( pt_packet_ip { ip : fup, ipc : u32 :: from ( compression ) as pt_ip_compression } )
80
84
}
81
85
82
86
/// Zero-extended payload ip
@@ -91,13 +95,13 @@ impl Fup {
91
95
pub fn compression ( self ) -> Compression {
92
96
// if this tryfrom panics, there is a bug
93
97
// in either libipt or this crate.
94
- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
98
+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
95
99
}
96
100
97
101
/// IP compression
98
102
#[ inline]
99
103
pub fn set_compression ( & mut self , compression : Compression ) {
100
- self . 0 . ipc = compression . into ( )
104
+ self . 0 . ipc = u32 :: from ( compression ) as pt_ip_compression ;
101
105
}
102
106
}
103
107
@@ -108,7 +112,7 @@ pub struct TipPge (pt_packet_ip);
108
112
impl TipPge {
109
113
#[ inline]
110
114
pub fn new ( tippge : u64 , compression : Compression ) -> Self {
111
- TipPge ( pt_packet_ip { ip : tippge, ipc : compression . into ( ) } )
115
+ TipPge ( pt_packet_ip { ip : tippge, ipc : u32 :: from ( compression ) as pt_ip_compression } )
112
116
}
113
117
114
118
/// Zero-extended payload ip
@@ -123,13 +127,13 @@ impl TipPge {
123
127
pub fn compression ( self ) -> Compression {
124
128
// if this tryfrom panics, there is a bug
125
129
// in either libipt or this crate.
126
- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
130
+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
127
131
}
128
132
129
133
/// IP compression
130
134
#[ inline]
131
135
pub fn set_compression ( & mut self , compression : Compression ) {
132
- self . 0 . ipc = compression . into ( )
136
+ self . 0 . ipc = u32 :: from ( compression ) as pt_ip_compression
133
137
}
134
138
}
135
139
@@ -140,7 +144,7 @@ pub struct TipPgd (pt_packet_ip);
140
144
impl TipPgd {
141
145
#[ inline]
142
146
pub fn new ( tippgd : u64 , compression : Compression ) -> Self {
143
- TipPgd ( pt_packet_ip { ip : tippgd, ipc : compression . into ( ) } )
147
+ TipPgd ( pt_packet_ip { ip : tippgd, ipc : u32 :: from ( compression ) as pt_ip_compression } )
144
148
}
145
149
146
150
/// Zero-extended payload ip
@@ -155,13 +159,13 @@ impl TipPgd {
155
159
pub fn compression ( self ) -> Compression {
156
160
// if this tryfrom panics, there is a bug
157
161
// in either libipt or this crate.
158
- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
162
+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
159
163
}
160
164
161
165
/// IP compression
162
166
#[ inline]
163
167
pub fn set_compression ( & mut self , compression : Compression ) {
164
- self . 0 . ipc = compression . into ( )
168
+ self . 0 . ipc = u32 :: from ( compression ) as pt_ip_compression
165
169
}
166
170
}
167
171
0 commit comments