etherparse/link/
double_vlan_header.rs

1use crate::*;
2
3/// IEEE 802.1Q double VLAN Tagging Header (helper struct to
4/// check vlan tagging values in a [crate::`PacketHeaders`]).
5///
6/// Note that it is NOT guranteed that the two VLAN headers
7/// will directly follow each other. In the original packet
8/// there could be another LinkExt header present in between
9/// them (e.g. MacSec Security Tag).
10#[derive(Clone, Debug, Eq, PartialEq)]
11pub struct DoubleVlanHeader {
12    /// The outer vlan tagging header
13    pub outer: SingleVlanHeader,
14    /// The inner vlan tagging header
15    pub inner: SingleVlanHeader,
16}
17
18impl Default for DoubleVlanHeader {
19    fn default() -> Self {
20        DoubleVlanHeader {
21            outer: SingleVlanHeader {
22                pcp: VlanPcp::ZERO,
23                drop_eligible_indicator: false,
24                vlan_id: Default::default(),
25                ether_type: ether_type::VLAN_TAGGED_FRAME,
26            },
27            inner: Default::default(),
28        }
29    }
30}
31
32#[cfg(test)]
33mod test {
34    use crate::{test_gens::*, *};
35    use alloc::format;
36    use proptest::prelude::*;
37
38    #[test]
39    fn default() {
40        let actual: DoubleVlanHeader = Default::default();
41        assert_eq!(actual.outer, {
42            let mut outer: SingleVlanHeader = Default::default();
43            outer.ether_type = ether_type::VLAN_TAGGED_FRAME;
44            outer
45        });
46        assert_eq!(actual.inner, Default::default());
47    }
48
49    proptest! {
50        #[test]
51        fn clone_eq(input in vlan_double_any()) {
52            assert_eq!(input, input.clone());
53        }
54    }
55
56    proptest! {
57        #[test]
58        fn dbg(input in vlan_double_any()) {
59            assert_eq!(
60                &format!(
61                    "DoubleVlanHeader {{ outer: {:?}, inner: {:?} }}",
62                    input.outer,
63                    input.inner,
64                ),
65                &format!("{:?}", input)
66            );
67        }
68    }
69}