SubnetFilter

Struct SubnetFilter 

Source
pub struct SubnetFilter {
    pub ipv4_subnets: Vec<Ipv4Network>,
    pub ipv6_subnets: Vec<Ipv6Network>,
    pub check_source: bool,
    pub check_destination: bool,
}
Expand description

Subnet filter configuration (CIDR notation)

Filters packets based on subnet membership using CIDR notation. Supports both IPv4 and IPv6 subnets.

§Examples

use huginn_net_http::SubnetFilter;

// Allow only private networks
let filter = SubnetFilter::new()
    .allow("192.168.0.0/16").unwrap()
    .allow("10.0.0.0/8").unwrap();

// IPv6 subnet
let filter = SubnetFilter::new()
    .allow("2001:db8::/32").unwrap();

Fields§

§ipv4_subnets: Vec<Ipv4Network>

IPv4 subnets to match

§ipv6_subnets: Vec<Ipv6Network>

IPv6 subnets to match

§check_source: bool

Check source, destination, or both?

§check_destination: bool

Implementations§

Source§

impl SubnetFilter

Source

pub fn new() -> Self

Create a new subnet filter that checks both source and destination by default

Source

pub fn allow(self, cidr: &str) -> Result<Self, String>

Add a subnet in CIDR notation

§Errors

Returns an error if the CIDR notation is invalid

§Examples
use huginn_net_http::SubnetFilter;

let filter = SubnetFilter::new()
    .allow("192.168.1.0/24").unwrap();
Source

pub fn allow_list(self, cidrs: Vec<&str>) -> Result<Self, String>

Add multiple subnets

§Errors

Returns an error if any CIDR notation is invalid

§Examples
use huginn_net_http::SubnetFilter;

let filter = SubnetFilter::new()
    .allow_list(vec!["192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12"])
    .unwrap();
Source

pub fn source_only(self) -> Self

Only check source addresses

By default, both source and destination are checked.

Source

pub fn destination_only(self) -> Self

Only check destination addresses

By default, both source and destination are checked.

Source

pub fn matches(&self, src_ip: &IpAddr, dst_ip: &IpAddr) -> bool

Check if packet matches subnet filter

§Returns

true if either source or destination IP is in any of the subnets (if enabled)

Trait Implementations§

Source§

impl Clone for SubnetFilter

Source§

fn clone(&self) -> SubnetFilter

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SubnetFilter

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for SubnetFilter

Source§

fn default() -> SubnetFilter

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more