diff --git a/src/link/link_info/infos.rs b/src/link/link_info/infos.rs index 33daa1ed..8cd9470c 100644 --- a/src/link/link_info/infos.rs +++ b/src/link/link_info/infos.rs @@ -302,6 +302,47 @@ impl Nla for InfoKind { } } +impl TryFrom<&str> for InfoKind { + type Error = DecodeError; + + fn try_from(s: &str) -> Result { + Ok(match s { + DUMMY => Self::Dummy, + IFB => Self::Ifb, + BRIDGE => Self::Bridge, + TUN => Self::Tun, + NLMON => Self::Nlmon, + VLAN => Self::Vlan, + VETH => Self::Veth, + VXLAN => Self::Vxlan, + BOND => Self::Bond, + IPVLAN => Self::IpVlan, + IPVTAP => Self::IpVtap, + MACVLAN => Self::MacVlan, + MACVTAP => Self::MacVtap, + GRETAP => Self::GreTap, + IP6GRETAP => Self::GreTap6, + IPIP => Self::IpIp, + IP6TNL => Self::Ip6Tnl, + SIT => Self::SitTun, + GRE => Self::GreTun, + IP6GRE => Self::GreTun6, + VTI => Self::Vti, + VRF => Self::Vrf, + GTP => Self::Gtp, + IPOIB => Self::Ipoib, + WIREGUARD => Self::Wireguard, + XFRM => Self::Xfrm, + MACSEC => Self::MacSec, + HSR => Self::Hsr, + GENEVE => Self::Geneve, + NETKIT => Self::Netkit, + VXCAN => Self::Vxcan, + _ => Self::Other(s.to_owned()), + }) + } +} + impl<'a, T: AsRef<[u8]> + ?Sized> Parseable> for InfoKind { fn parse(buf: &NlaBuffer<&'a T>) -> Result { if buf.kind() != IFLA_INFO_KIND {