Skip to content

Better API for crate user without netlink knowledge #151

@cathay4t

Description

@cathay4t

Current LinkHandle are assuming crate user knows how to handle netlink message by returning:

impl Stream<Item = Result<LinkMessage, Error>>

Many rust-netlink users are doing the parsing by themselves(include me at nispor project), I consider this as a duplicate efforts.

I propose we introduce new set of API for user who don't want to parse netlink message like:

impl Handle {
    pub async fn parsed_link(self) -> LinkParsedHandle {}
}

impl LinkParsedHandle {
    pub async fn get_by_name(
        &mut self,
        iface_name: &str,
    ) -> Result<LinkParsed, RtnetlinkError> {
        todo!()
    }

    pub async fn get_by_index(
        &mut self,
        iface_index: u32,
    ) -> Result<LinkParsed, RtnetlinkError> {
        todo!()
    }

    pub async fn dump(&mut self) -> Result<Vec<LinkParsed>, RtnetlinkError> {
        todo!()
    }

    pub async fn dump_by_filter(
        &mut self,
        address_family: AddressFamily,
        filter_mask: Vec<LinkExtentMask>,
    ) -> Result<Vec<LinkParsed>, RtnetlinkError> {
        todo!()
    }

    pub async fn change(
        &mut self,
        config: &LinkParsed,
    ) -> Result<(), RtnetlinkError> {
        todo!()
    }
}

#[non_exhaustive]
pub struct LinkParsed {
    pub iface_name: Option<String>,
    pub iface_index: Option<u32>,
    pub mtu: Option<u32>,
}

I have implemented this design in https://github.com/rust-netlink/nl-wireguard/blob/main/examples/set_wireguard.rs

It is much simpler than current LinkMessageBuilder workflow.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions