vmm/utils/net/
ipv4addr.rs1use std::net::Ipv4Addr;
5
6pub fn is_link_local_valid(ipv4_addr: Ipv4Addr) -> bool {
8 match ipv4_addr.octets() {
9 [169, 254, 0, _] => false,
10 [169, 254, 255, _] => false,
11 [169, 254, _, _] => true,
12 _ => false,
13 }
14}
15
16#[cfg(test)]
17mod tests {
18 use std::net::Ipv4Addr;
19
20 use super::*;
21
22 #[test]
23 fn test_is_link_local_valid() {
24 let mut ipv4_addr = Ipv4Addr::new(1, 1, 1, 1);
26 assert!(!is_link_local_valid(ipv4_addr));
27
28 ipv4_addr = Ipv4Addr::new(169, 254, 0, 0);
30 assert!(!is_link_local_valid(ipv4_addr));
31 ipv4_addr = Ipv4Addr::new(169, 254, 0, 10);
32 assert!(!is_link_local_valid(ipv4_addr));
33 ipv4_addr = Ipv4Addr::new(169, 254, 0, 255);
34 assert!(!is_link_local_valid(ipv4_addr));
35
36 ipv4_addr = Ipv4Addr::new(169, 254, 255, 0);
38 assert!(!is_link_local_valid(ipv4_addr));
39 ipv4_addr = Ipv4Addr::new(169, 254, 255, 194);
40 assert!(!is_link_local_valid(ipv4_addr));
41 ipv4_addr = Ipv4Addr::new(169, 254, 255, 255);
42 assert!(!is_link_local_valid(ipv4_addr));
43
44 ipv4_addr = Ipv4Addr::new(169, 254, 1, 0);
46 assert!(is_link_local_valid(ipv4_addr));
47
48 ipv4_addr = Ipv4Addr::new(169, 254, 254, 255);
50 assert!(is_link_local_valid(ipv4_addr));
51
52 ipv4_addr = Ipv4Addr::new(169, 254, 170, 2);
54 assert!(is_link_local_valid(ipv4_addr));
55 }
56}