Skip to content

Commit 01298cc

Browse files
committed
Fixup
1 parent 23f7bb3 commit 01298cc

File tree

2 files changed

+69
-10
lines changed

2 files changed

+69
-10
lines changed

src/tc/filters/cls_flower.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,8 @@ impl Nla for TcFilterFlowerOption {
381381
Self::KeyEncIpTosMask(_) => 1,
382382
Self::KeyEncIpTtl(_) => 1,
383383
Self::KeyEncIpTtlMask(_) => 1,
384-
Self::KeyEncOpts(opts) => opts.buffer_len(),
385-
Self::KeyEncOptsMask(opts) => opts.buffer_len(),
384+
Self::KeyEncOpts(opts) => opts.value_len(),
385+
Self::KeyEncOptsMask(opts) => opts.value_len(),
386386
Self::InHwCount(_) => 4,
387387
Self::KeyPortSrcMin(_) => 2,
388388
Self::KeyPortSrcMax(_) => 2,
@@ -740,8 +740,8 @@ impl Nla for TcFilterFlowerOption {
740740
Self::KeyEncIpTtlMask(ttl) => {
741741
buffer.copy_from_slice(ttl.to_be_bytes().as_slice());
742742
}
743-
Self::KeyEncOpts(opts) => opts.emit(buffer),
744-
Self::KeyEncOptsMask(opts) => opts.emit(buffer),
743+
Self::KeyEncOpts(opts) => opts.emit_value(buffer),
744+
Self::KeyEncOptsMask(opts) => opts.emit_value(buffer),
745745
Self::InHwCount(count) => {
746746
NativeEndian::write_u32(buffer, *count);
747747
}

src/tc/filters/flower/encap/geneve.rs

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,10 +211,24 @@ impl Nla for Options {
211211

212212
#[cfg(test)]
213213
mod tests {
214-
use super::*;
215-
use crate::tc::{TcMessage, TcMessageBuffer};
216214
use netlink_packet_utils::Emitable;
217215

216+
use crate::net::ethernet::Ethertype;
217+
use crate::tc::flower::encap::Options::Geneve;
218+
use crate::tc::flower::encap::OptionsList;
219+
use crate::tc::TcAttribute;
220+
use crate::tc::TcFilterFlowerOption::{
221+
KeyEncOpts, KeyEncOptsMask, KeyEthType,
222+
};
223+
use crate::tc::TcOption::Flower;
224+
use crate::tc::{
225+
TcFilterFlowerOption, TcFlowerOptionFlags, TcHandle, TcHeader,
226+
TcMessage, TcMessageBuffer,
227+
};
228+
use crate::AddressFamily;
229+
230+
use super::*;
231+
218232
#[test]
219233
fn class_parse_back_zero() {
220234
let example = Class::new(0);
@@ -305,13 +319,58 @@ mod tests {
305319
assert_eq!(example, parsed);
306320
}
307321

322+
const RAW_CAP: &str = "000000003900000000000000f2ffffff080000000b000100666c6f776572000054000200200054001c0001000600010000010000050002000100000008000300abcdef01200055001c00010006000100ffff000005000200ff00000008000300ffffffff08001600000000000600080008000000";
323+
324+
fn expected_message() -> TcMessage {
325+
TcMessage {
326+
header: TcHeader {
327+
family: AddressFamily::Unspec,
328+
index: 57,
329+
handle: TcHandle { major: 0, minor: 0 },
330+
parent: TcHandle {
331+
major: 65535,
332+
minor: 65522,
333+
},
334+
info: 8,
335+
},
336+
attributes: vec![
337+
TcAttribute::Kind("flower".to_string()),
338+
TcAttribute::Options(vec![
339+
Flower(KeyEncOpts(OptionsList(Geneve(vec![
340+
Options::Class(Class::new(1)),
341+
Options::Type(Type::new(1)),
342+
Options::Data(Data::new(vec![0xabcdef01])),
343+
])))),
344+
Flower(KeyEncOptsMask(OptionsList(Geneve(vec![
345+
Options::Class(Class::new(65535)),
346+
Options::Type(Type::new(255)),
347+
Options::Data(Data::new(vec![4294967295])),
348+
])))),
349+
Flower(TcFilterFlowerOption::Flags(
350+
TcFlowerOptionFlags::empty(),
351+
)),
352+
Flower(KeyEthType(Ethertype::IPv4)),
353+
]),
354+
],
355+
}
356+
}
357+
308358
#[test]
309-
fn parse_captured() {
310-
let raw_cap = "000000003900000000000000f2ffffff080000000b000100666c6f776572000054000200200054001c0001000600010000010000050002000100000008000300abcdef01200055001c00010006000100ffff000005000200ff00000008000300ffffffff08001600000000000600080008000000";
311-
let raw_cap = hex::decode(raw_cap).unwrap();
359+
fn captured_parses_as_expected() {
360+
let raw_cap = hex::decode(RAW_CAP).unwrap();
361+
let expected = expected_message();
312362
let parsed =
313363
TcMessage::parse(&TcMessageBuffer::new_checked(&raw_cap).unwrap())
314364
.unwrap();
315-
println!("{:?}", parsed);
365+
assert_eq!(expected, parsed);
366+
}
367+
368+
#[test]
369+
fn expected_emits_as_captured() {
370+
let raw_cap = hex::decode(RAW_CAP).unwrap();
371+
let expected = expected_message();
372+
let mut buffer = vec![0; expected.buffer_len()];
373+
expected.emit(&mut buffer);
374+
assert_eq!(raw_cap, buffer);
316375
}
317376
}

0 commit comments

Comments
 (0)