Skip to content

Commit

Permalink
Mpls tests
Browse files Browse the repository at this point in the history
  • Loading branch information
daniel-noland committed May 13, 2024
1 parent 7cb0d28 commit 8f8e93f
Show file tree
Hide file tree
Showing 5 changed files with 184 additions and 32 deletions.
13 changes: 6 additions & 7 deletions src/tc/filters/flower/encap/erspan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_index_zero() {
let example = Options::Index(Index::new(0));
Expand All @@ -397,7 +397,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_index_example() {
let example = Options::Index(Index::new(0x12345678));
Expand All @@ -407,7 +407,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_direction_ingress() {
let example = Options::Direction(Direction::Ingress);
Expand All @@ -417,7 +417,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_direction_egress() {
let example = Options::Direction(Direction::Egress);
Expand All @@ -427,7 +427,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_hwid_zero() {
let example = Options::Hwid(ErspanHwid::new(0));
Expand All @@ -437,7 +437,7 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_hwid_example() {
let example = Options::Hwid(ErspanHwid::new(0x12));
Expand All @@ -447,5 +447,4 @@ mod test {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

}
1 change: 0 additions & 1 deletion src/tc/filters/flower/encap/geneve.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,5 +303,4 @@ mod tests {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

}
4 changes: 2 additions & 2 deletions src/tc/filters/flower/encap/gtp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ mod tests {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_qfi_zero() {
let example = Options::Qfi(0);
Expand All @@ -97,7 +97,7 @@ mod tests {
Options::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_qfi_example() {
let example = Options::Qfi(0xab);
Expand Down
51 changes: 30 additions & 21 deletions src/tc/filters/flower/encap/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::tc::filters::cls_flower::TCA_FLOWER_KEY_ENC_OPTS;
use anyhow::Context;
use netlink_packet_utils::nla::{DefaultNla, Nla, NlaBuffer, NlasIterator};
use netlink_packet_utils::{DecodeError, Emitable, Parseable};
use crate::tc::filters::cls_flower::TCA_FLOWER_KEY_ENC_OPTS;

pub mod erspan;
pub mod geneve;
Expand Down Expand Up @@ -47,8 +47,10 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for Options {
let nla = NlaBuffer::new_checked(buf.value())
.context("failed to parse encap options")?;
Ok(Options(OptionList::parse(&nla)?))
},
_ => Err(DecodeError::from("expected encapsulation options attribute")),
}
_ => Err(DecodeError::from(
"expected encapsulation options attribute",
)),
}
}
}
Expand Down Expand Up @@ -169,7 +171,8 @@ mod tests {
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

Expand All @@ -183,42 +186,46 @@ mod tests {
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_vxlan_empty() {
let example = OptionList::Vxlan(vec![]);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_vxlan_example() {
let example = OptionList::Vxlan(vec![
vxlan::Options::Gpb(vxlan::Gpb::new(0xabcd)),
]);
let example = OptionList::Vxlan(vec![vxlan::Options::Gpb(
vxlan::Gpb::new(0xabcd),
)]);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_erspan_empty() {
let example = OptionList::Erspan(vec![]);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_erspan_example() {
let example = OptionList::Erspan(vec![
Expand All @@ -229,20 +236,22 @@ mod tests {
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_gtp_empty() {
let example = OptionList::Gtp(vec![]);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_options_gtp_example() {
let example = OptionList::Gtp(vec![
Expand All @@ -252,8 +261,8 @@ mod tests {
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap()).unwrap();
OptionList::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

}
147 changes: 146 additions & 1 deletion src/tc/filters/flower/mpls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for LseFilter {
NlasIterator::new(payload)
.map(|nla| LseOptions::parse(&nla?))
.collect::<Result<Vec<_>, _>>()
.map(|opts| LseFilter::try_from(opts))?
.map(LseFilter::try_from)?
}
}

Expand Down Expand Up @@ -287,3 +287,148 @@ impl From<Vec<LseFilter>> for Options {
Self::Lses(value)
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn parse_back_lse_options_depth_zero() {
let example = LseOptions::Depth(0);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_depth_example() {
let example = LseOptions::Depth(0xab);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_label_zero() {
let example = LseOptions::Label(mpls::Label::new(0).unwrap());
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_label_example() {
let example = LseOptions::Label(mpls::Label::new(0x12345).unwrap());
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_tc_zero() {
let example =
LseOptions::TrafficClass(mpls::TrafficClass::new(0).unwrap());
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_tc_example() {
let example =
LseOptions::TrafficClass(mpls::TrafficClass::new(0x3).unwrap());
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_bos_unset() {
let example = LseOptions::BottomOfStack(mpls::BottomOfStack::Unset);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_bos_set() {
let example = LseOptions::BottomOfStack(mpls::BottomOfStack::Set);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_ttl_zero() {
let example = LseOptions::Ttl(0);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_options_ttl_example() {
let example = LseOptions::Ttl(0x34);
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseOptions::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_filter_default() {
let example = LseFilter::default();
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseFilter::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}

#[test]
fn parse_back_lse_filter_example() {
let example = LseFilter {
depth: 1,
label: Some(mpls::Label::new(0x12345).unwrap()),
traffic_class: Some(mpls::TrafficClass::new(0x3).unwrap()),
bottom_of_stack: Some(mpls::BottomOfStack::Set),
ttl: Some(0x34),
};
let mut buffer = vec![0; example.buffer_len()];
example.emit(&mut buffer);
let parsed =
LseFilter::parse(&NlaBuffer::new_checked(&buffer).unwrap())
.unwrap();
assert_eq!(example, parsed);
}
}

0 comments on commit 8f8e93f

Please sign in to comment.