etherparse/link/
vlan_header.rs1use crate::*;
2
3#[derive(Clone, Debug, Eq, PartialEq)]
5pub enum VlanHeader {
6 Single(SingleVlanHeader),
8 Double(DoubleVlanHeader),
10}
11
12impl VlanHeader {
13 pub const VLAN_ETHER_TYPES: [EtherType; 3] = [
15 ether_type::VLAN_TAGGED_FRAME,
16 ether_type::PROVIDER_BRIDGING,
17 ether_type::VLAN_DOUBLE_TAGGED_FRAME,
18 ];
19
20 #[inline]
22 pub fn next_header(&self) -> EtherType {
23 match self {
24 VlanHeader::Single(s) => s.ether_type,
25 VlanHeader::Double(d) => d.inner.ether_type,
26 }
27 }
28}
29
30#[cfg(test)]
31mod test {
32 use super::*;
33 use crate::test_gens::*;
34 use alloc::format;
35 use proptest::prelude::*;
36
37 #[test]
38 fn constants() {
39 use ether_type::*;
40 use VlanHeader as V;
41
42 assert_eq!(3, V::VLAN_ETHER_TYPES.len());
43 assert_eq!(VLAN_TAGGED_FRAME, V::VLAN_ETHER_TYPES[0]);
44 assert_eq!(PROVIDER_BRIDGING, V::VLAN_ETHER_TYPES[1]);
45 assert_eq!(VLAN_DOUBLE_TAGGED_FRAME, V::VLAN_ETHER_TYPES[2]);
46 }
47
48 proptest! {
49 #[test]
50 fn clone_eq(
51 single in vlan_single_any(),
52 double in vlan_double_any(),
53 ) {
54 {
56 let value = VlanHeader::Single(single.clone());
57 assert_eq!(value, value.clone());
58 }
59 {
61 let value = VlanHeader::Double(double);
62 assert_eq!(value, value.clone());
63 }
64 }
65 }
66
67 proptest! {
68 #[test]
69 fn dbg(
70 single in vlan_single_any(),
71 double in vlan_double_any(),
72 ) {
73 {
75 let value = VlanHeader::Single(single.clone());
76 assert_eq!(
77 &format!(
78 "Single({:?})",
79 single
80 ),
81 &format!("{:?}", value)
82 );
83 }
84 {
86 let value = VlanHeader::Double(double.clone());
87 assert_eq!(
88 &format!(
89 "Double({:?})",
90 double
91 ),
92 &format!("{:?}", value)
93 );
94 }
95 }
96 }
97
98 proptest! {
99 #[test]
100 fn next_header(
101 single in vlan_single_any(),
102 double in vlan_double_any(),
103 ) {
104 {
106 let value = VlanHeader::Single(single.clone());
107 assert_eq!(value.next_header(), single.ether_type);
108 }
109 {
111 let value = VlanHeader::Double(double.clone());
112 assert_eq!(value.next_header(), double.inner.ether_type);
113 }
114 }
115 }
116}