1+ // Certain casts are required only on Windows. Inform Clippy to ignore them.
2+ #![ allow( clippy:: unnecessary_cast) ]
3+
14use std:: convert:: TryFrom ;
25use num_enum:: { TryFromPrimitive , IntoPrimitive } ;
36use libipt_sys:: {
@@ -6,35 +9,36 @@ use libipt_sys::{
69 pt_packet_type_ppt_fup,
710 pt_packet_type_ppt_tip_pge,
811 pt_packet_type_ppt_tip_pgd,
12+ pt_ip_compression,
913 pt_ip_compression_pt_ipc_full,
1014 pt_ip_compression_pt_ipc_sext_48,
1115 pt_ip_compression_pt_ipc_suppressed,
1216 pt_ip_compression_pt_ipc_update_16,
1317 pt_ip_compression_pt_ipc_update_32,
14- pt_ip_compression_pt_ipc_update_48
18+ pt_ip_compression_pt_ipc_update_48,
1519} ;
1620
1721/// The IP compression
1822#[ derive( Clone , Copy , Debug , TryFromPrimitive , IntoPrimitive ) ]
1923#[ repr( u32 ) ]
2024pub enum Compression {
2125 /// 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 ,
2327
2428 /// 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 ,
2630
2731 /// 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 ,
2933
3034 /// 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 ,
3236
3337 /// 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 ,
3539
3640 /// Payload: 64 bits. Full address
37- Full = pt_ip_compression_pt_ipc_full
41+ Full = pt_ip_compression_pt_ipc_full as u32 ,
3842}
3943
4044/// A packet with IP payload.
@@ -44,7 +48,7 @@ pub struct Tip (pt_packet_ip);
4448impl Tip {
4549 #[ inline]
4650 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 } )
4852 }
4953
5054 /// Zero-extended payload ip
@@ -59,13 +63,13 @@ impl Tip {
5963 pub fn compression ( self ) -> Compression {
6064 // if this tryfrom panics, there is a bug
6165 // in either libipt or this crate.
62- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
66+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
6367 }
6468
6569 /// IP compression
6670 #[ inline]
6771 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
6973 }
7074}
7175
@@ -76,7 +80,7 @@ pub struct Fup (pt_packet_ip);
7680impl Fup {
7781 #[ inline]
7882 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 } )
8084 }
8185
8286 /// Zero-extended payload ip
@@ -91,13 +95,13 @@ impl Fup {
9195 pub fn compression ( self ) -> Compression {
9296 // if this tryfrom panics, there is a bug
9397 // in either libipt or this crate.
94- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
98+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
9599 }
96100
97101 /// IP compression
98102 #[ inline]
99103 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 ;
101105 }
102106}
103107
@@ -108,7 +112,7 @@ pub struct TipPge (pt_packet_ip);
108112impl TipPge {
109113 #[ inline]
110114 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 } )
112116 }
113117
114118 /// Zero-extended payload ip
@@ -123,13 +127,13 @@ impl TipPge {
123127 pub fn compression ( self ) -> Compression {
124128 // if this tryfrom panics, there is a bug
125129 // in either libipt or this crate.
126- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
130+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
127131 }
128132
129133 /// IP compression
130134 #[ inline]
131135 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
133137 }
134138}
135139
@@ -140,7 +144,7 @@ pub struct TipPgd (pt_packet_ip);
140144impl TipPgd {
141145 #[ inline]
142146 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 } )
144148 }
145149
146150 /// Zero-extended payload ip
@@ -155,13 +159,13 @@ impl TipPgd {
155159 pub fn compression ( self ) -> Compression {
156160 // if this tryfrom panics, there is a bug
157161 // in either libipt or this crate.
158- Compression :: try_from ( self . 0 . ipc ) . unwrap ( )
162+ Compression :: try_from ( self . 0 . ipc as u32 ) . unwrap ( )
159163 }
160164
161165 /// IP compression
162166 #[ inline]
163167 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
165169 }
166170}
167171
0 commit comments