push-packet 0.1.0

Packet-inspection and routing library for Linux, built on eBPF XDP and AF_XDP with aya.
Documentation
#[non_exhaustive]
#[allow(missing_docs)]
#[derive(Debug, thiserror::Error)]
pub enum RuleError {
    #[error("each rule must have at least one constraint, such as cidr or port")]
    MissingConstraint,
    #[error("each rule must have an Action")]
    MissingAction,
    #[error("invalid IP address: {addr}")]
    InvalidAddress {
        addr: String,
        #[source]
        source: std::net::AddrParseError,
    },
    #[error("invalid CIDR range: {addr}")]
    InvalidCidr {
        addr: String,
        #[source]
        source: ipnet::AddrParseError,
    },
    #[error("a rule may not contain both ipv4 and ipv6 addresses")]
    IncompatibleAddresses,
}

impl RuleError {
    pub(crate) fn invalid_address(
        addr: impl Into<String>,
        source: std::net::AddrParseError,
    ) -> Self {
        let addr = addr.into();
        Self::InvalidAddress { addr, source }
    }

    pub(crate) fn invalid_cidr(addr: impl Into<String>, source: ipnet::AddrParseError) -> Self {
        let addr = addr.into();
        Self::InvalidCidr { addr, source }
    }
}