stackforge_core/layer/ipv4/
ttl.rs1const INITIAL_TTLS: [u8; 4] = [32, 64, 128, 255];
12
13pub fn estimate_original(current_ttl: u8) -> u8 {
18 for &initial in &INITIAL_TTLS {
19 if current_ttl <= initial {
20 return initial;
21 }
22 }
23 255
25}
26
27pub fn estimate_hops(current_ttl: u8) -> u8 {
31 let original = estimate_original(current_ttl);
32 original.saturating_sub(current_ttl)
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn test_estimate_original() {
41 assert_eq!(estimate_original(1), 32);
42 assert_eq!(estimate_original(30), 32);
43 assert_eq!(estimate_original(32), 32);
44
45 assert_eq!(estimate_original(33), 64);
46 assert_eq!(estimate_original(60), 64);
47 assert_eq!(estimate_original(64), 64);
48
49 assert_eq!(estimate_original(65), 128);
50 assert_eq!(estimate_original(100), 128);
51 assert_eq!(estimate_original(128), 128);
52
53 assert_eq!(estimate_original(129), 255);
54 assert_eq!(estimate_original(200), 255);
55 assert_eq!(estimate_original(255), 255);
56 }
57
58 #[test]
59 fn test_estimate_hops() {
60 assert_eq!(estimate_hops(30), 2); assert_eq!(estimate_hops(63), 1); assert_eq!(estimate_hops(54), 10); assert_eq!(estimate_hops(128), 0); }
65}