@@ -16,7 +16,7 @@ const IFLA_IPVLAN_FLAGS: u16 = 2;
1616#[ non_exhaustive]  
1717pub  enum  InfoIpVlan  { 
1818    Mode ( IpVlanMode ) , 
19-     Flags ( u16 ) , 
19+     Flags ( IpVlanFlag ) , 
2020    Other ( DefaultNla ) , 
2121} 
2222
@@ -33,7 +33,7 @@ impl Nla for InfoIpVlan {
3333        use  self :: InfoIpVlan :: * ; 
3434        match  self  { 
3535            Mode ( value)  => NativeEndian :: write_u16 ( buffer,  ( * value) . into ( ) ) , 
36-             Flags ( value )  => NativeEndian :: write_u16 ( buffer,  * value ) , 
36+             Flags ( f )  => NativeEndian :: write_u16 ( buffer,  f . bits ( ) ) , 
3737            Other ( nla)  => nla. emit_value ( buffer) , 
3838        } 
3939    } 
@@ -58,10 +58,9 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoIpVlan {
5858                    . context ( "invalid IFLA_IPVLAN_MODE value" ) ?
5959                    . into ( ) , 
6060            ) , 
61-             IFLA_IPVLAN_FLAGS  => Flags ( 
62-                 parse_u16 ( payload) 
63-                     . context ( "invalid IFLA_IPVLAN_FLAGS value" ) ?, 
64-             ) , 
61+             IFLA_IPVLAN_FLAGS  => Self :: Flags ( IpVlanFlag :: from_bits_retain ( 
62+                 parse_u16 ( payload) . context ( "failed to parse IPVLAN_FLAG" ) ?, 
63+             ) ) , 
6564            kind => Other ( DefaultNla :: parse ( buf) . context ( format ! ( 
6665                "unknown NLA type {kind} for IFLA_INFO_DATA(ipvlan)" 
6766            ) ) ?) , 
@@ -73,7 +72,7 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoIpVlan {
7372#[ non_exhaustive]  
7473pub  enum  InfoIpVtap  { 
7574    Mode ( IpVtapMode ) , 
76-     Flags ( u16 ) , 
75+     Flags ( IpVtapFlag ) , 
7776    Other ( DefaultNla ) , 
7877} 
7978
@@ -90,7 +89,7 @@ impl Nla for InfoIpVtap {
9089        use  self :: InfoIpVtap :: * ; 
9190        match  self  { 
9291            Mode ( value)  => NativeEndian :: write_u16 ( buffer,  ( * value) . into ( ) ) , 
93-             Flags ( value )  => NativeEndian :: write_u16 ( buffer,  * value ) , 
92+             Flags ( f )  => NativeEndian :: write_u16 ( buffer,  f . bits ( ) ) , 
9493            Other ( nla)  => nla. emit_value ( buffer) , 
9594        } 
9695    } 
@@ -115,10 +114,9 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for InfoIpVtap {
115114                    . context ( "invalid IFLA_IPVLAN_MODE value" ) ?
116115                    . into ( ) , 
117116            ) , 
118-             IFLA_IPVLAN_FLAGS  => Flags ( 
119-                 parse_u16 ( payload) 
120-                     . context ( "invalid IFLA_IPVLAN_FLAGS value" ) ?, 
121-             ) , 
117+             IFLA_IPVLAN_FLAGS  => Self :: Flags ( IpVtapFlag :: from_bits_retain ( 
118+                 parse_u16 ( payload) . context ( "failed to parse IPVTAP_FLAG" ) ?, 
119+             ) ) , 
122120            kind => Other ( DefaultNla :: parse ( buf) . context ( format ! ( 
123121                "unknown NLA type {kind} for IFLA_INFO_DATA(ipvlan)" 
124122            ) ) ?) , 
@@ -165,3 +163,24 @@ impl From<IpVlanMode> for u16 {
165163        } 
166164    } 
167165} 
166+ 
167+ const  IPVLAN_F_PRIVATE :  u16  = 0x01 ; 
168+ const  IPVLAN_F_VEPA :  u16  = 0x02 ; 
169+ 
170+ bitflags !  { 
171+     #[ non_exhaustive] 
172+     #[ derive( Debug ,  Clone ,  Copy ,  Eq ,  PartialEq ) ] 
173+     pub  struct  IpVlanFlag :  u16  { 
174+         const  PRIVATE  = IPVLAN_F_PRIVATE  as  u16 ; 
175+         const  VEPA  = IPVLAN_F_VEPA  as  u16 ; 
176+         const  _ = !0 ; 
177+     } 
178+ } 
179+ 
180+ impl  Default  for  IpVlanFlag  { 
181+     fn  default ( )  -> Self  { 
182+         Self :: empty ( ) 
183+     } 
184+ } 
185+ 
186+ pub  type  IpVtapFlag  = IpVlanFlag ; 
0 commit comments