1use crate::IpReconstructionPattern;
4
5#[expect(
11 clippy::cast_sign_loss,
12 clippy::cast_possible_wrap,
13 clippy::enum_glob_use
14)]
15pub fn reconstruct_ip_and_update_last(
16 last_ip: &mut u64,
17 ip_reconstruction_pattern: IpReconstructionPattern,
18) -> bool {
19 use IpReconstructionPattern::*;
20 let ip = match ip_reconstruction_pattern {
21 OutOfContext => {
22 return false;
24 }
25 TwoBytesWithLastIp(payload) => (*last_ip & 0xFFFF_FFFF_FFFF_0000) | (payload as u64),
26 FourBytesWithLastIp(payload) => (*last_ip & 0xFFFF_FFFF_0000_0000) | (payload as u64),
27 SixBytesExtended(payload) => (((payload << 16) as i64) >> 16) as u64,
28 SixBytesWithLastIp(payload) => (*last_ip & 0xFFFF_0000_0000_0000) | (payload as u64),
29 EightBytes(payload) => payload,
30 };
31 *last_ip = ip;
32
33 true
34}