push-packet 0.1.0

Packet-inspection and routing library for Linux, built on eBPF XDP and AF_XDP with aya.
Documentation
use std::{
    hash::{DefaultHasher, Hash, Hasher},
    net::{IpAddr, Ipv4Addr, Ipv6Addr},
};

pub fn mask_ip(seed: u64, addr: IpAddr) -> IpAddr {
    match addr {
        IpAddr::V4(_) => {
            let mut hasher = DefaultHasher::new();
            (seed, addr).hash(&mut hasher);
            let bytes = hasher.finish().to_le_bytes();
            IpAddr::V4(Ipv4Addr::new(bytes[0], bytes[1], bytes[2], bytes[3]))
        }
        IpAddr::V6(_) => {
            let mut hi = DefaultHasher::new();
            (seed, addr, 0u8).hash(&mut hi);
            let mut lo = DefaultHasher::new();
            (seed, addr, 1u8).hash(&mut lo);
            let mut out = [0u8; 16];
            out[..8].copy_from_slice(&hi.finish().to_le_bytes());
            out[8..].copy_from_slice(&lo.finish().to_le_bytes());
            IpAddr::V6(Ipv6Addr::from(out))
        }
    }
}