1use crate::{BaseInterface, IpVlanConfig, IpVlanInterface, IpVlanMode};
4
5pub(crate) fn np_ipvlan_to_nmstate(
6 np_iface: &nispor::Iface,
7 base_iface: BaseInterface,
8) -> IpVlanInterface {
9 let ipvlan_conf =
10 np_iface
11 .ip_vlan
12 .as_ref()
13 .map(|np_ipvlan_info| IpVlanConfig {
14 mode: match &np_ipvlan_info.mode {
15 nispor::IpVlanMode::L2 => Some(IpVlanMode::L2),
16 nispor::IpVlanMode::L3 => Some(IpVlanMode::L3),
17 nispor::IpVlanMode::L3S => Some(IpVlanMode::L3S),
18 _ => {
19 log::warn!(
20 "Unknown supported IPVLAN mode {:?}",
21 np_ipvlan_info.mode
22 );
23 Some(IpVlanMode::L3)
24 }
25 },
26 private: Some(
27 np_ipvlan_info.flags.contains(&nispor::IpVlanFlag::Private),
28 ),
29 vepa: Some(
30 np_ipvlan_info.flags.contains(&nispor::IpVlanFlag::Vepa),
31 ),
32 base_iface: Some(np_ipvlan_info.base_iface.clone()),
33 });
34
35 IpVlanInterface {
36 base: base_iface,
37 ipvlan: ipvlan_conf,
38 }
39}