blob: db7f35ec0b4ec9ed279606ba4ecf0f3f1772087a [file] [log] [blame]
// SPDX-License-Identifier: MIT
use std::{net::Ipv6Addr, str::FromStr};
use netlink_packet_utils::{Emitable, Parseable};
use crate::prefix::{
attribute::PrefixAttribute, cache_info::CacheInfo, header::PrefixHeader,
PrefixMessage, PrefixMessageBuffer,
};
#[test]
fn test_new_prefix() {
#[rustfmt::skip]
let data = vec![
// prefixmsg
// AF_INET6 + padding
0x0a, 0x00, 0x00, 0x00,
// ifindex
0x02, 0x00, 0x00, 0x00,
// type, prefix length, flags, padding
0x03, 0x40, 0x01, 0x00,
// PREFIX_ADDRESS attribute
0x14, 0x00, 0x01, 0x00,
0xfc, 0x00, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
// PREFIX_CACHEINFO attribute
0x0c, 0x00, 0x02, 0x00,
0xff, 0xff, 0xff, 0xfa,
0xff, 0xff, 0xff, 0xff,
];
let actual = PrefixMessage::parse(&PrefixMessageBuffer::new(&data))
.expect("Generated PrefixMessage");
let expected = PrefixMessage {
header: PrefixHeader {
prefix_family: libc::AF_INET6 as u8,
ifindex: 2,
prefix_type: 3,
prefix_len: 64,
flags: 1,
},
attributes: vec![
PrefixAttribute::Address(
Ipv6Addr::from_str("fc00:a0a::1").expect("Ipv6Addr"),
),
PrefixAttribute::CacheInfo(CacheInfo {
preferred_time: 0xfaffffff,
valid_time: 0xffffffff,
}),
],
};
assert_eq!(expected, actual);
let mut buf = vec![0; 44];
expected.emit(&mut buf);
assert_eq!(data, buf);
}