@@ -15,7 +15,7 @@ const IFLA_IPVLAN_FLAGS: u16 = 2;
1515#[ derive( Debug , PartialEq , Eq , Clone ) ]
1616#[ non_exhaustive]
1717pub enum InfoIpVlan {
18- Mode ( u16 ) ,
18+ Mode ( IpVlanMode ) ,
1919 Flags ( u16 ) ,
2020 Other ( DefaultNla ) ,
2121}
@@ -32,7 +32,7 @@ impl Nla for InfoIpVlan {
3232 fn emit_value ( & self , buffer : & mut [ u8 ] ) {
3333 use self :: InfoIpVlan :: * ;
3434 match self {
35- Mode ( value) => NativeEndian :: write_u16 ( buffer, * value) ,
35+ Mode ( value) => NativeEndian :: write_u16 ( buffer, ( * value) . into ( ) ) ,
3636 Flags ( value) => NativeEndian :: write_u16 ( buffer, * value) ,
3737 Other ( nla) => nla. emit_value ( buffer) ,
3838 }
@@ -54,7 +54,9 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoIpVlan {
5454 let payload = buf. value ( ) ;
5555 Ok ( match buf. kind ( ) {
5656 IFLA_IPVLAN_MODE => Mode (
57- parse_u16 ( payload) . context ( "invalid IFLA_IPVLAN_MODE value" ) ?,
57+ parse_u16 ( payload)
58+ . context ( "invalid IFLA_IPVLAN_MODE value" ) ?
59+ . into ( ) ,
5860 ) ,
5961 IFLA_IPVLAN_FLAGS => Flags (
6062 parse_u16 ( payload)
@@ -66,3 +68,41 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoIpVlan {
6668 } )
6769 }
6870}
71+
72+ const IPVLAN_MODE_L2 : u16 = 0 ;
73+ const IPVLAN_MODE_L3 : u16 = 1 ;
74+ const IPVLAN_MODE_L3S : u16 = 2 ;
75+
76+ #[ derive( Debug , PartialEq , Eq , Clone , Copy ) ]
77+ #[ non_exhaustive]
78+ pub enum IpVlanMode {
79+ L2 ,
80+ L3 ,
81+ L3S ,
82+ Other ( u16 ) ,
83+ }
84+
85+ impl From < u16 > for IpVlanMode {
86+ fn from ( d : u16 ) -> Self {
87+ match d {
88+ IPVLAN_MODE_L2 => Self :: L2 ,
89+ IPVLAN_MODE_L3 => Self :: L3 ,
90+ IPVLAN_MODE_L3S => Self :: L3S ,
91+ _ => {
92+ log:: warn!( "Unknown IP VLAN mode {}" , d) ;
93+ Self :: Other ( d)
94+ }
95+ }
96+ }
97+ }
98+
99+ impl From < IpVlanMode > for u16 {
100+ fn from ( v : IpVlanMode ) -> u16 {
101+ match v {
102+ IpVlanMode :: L2 => IPVLAN_MODE_L2 ,
103+ IpVlanMode :: L3 => IPVLAN_MODE_L3 ,
104+ IpVlanMode :: L3S => IPVLAN_MODE_L3S ,
105+ IpVlanMode :: Other ( d) => d,
106+ }
107+ }
108+ }
0 commit comments