mutnet 0.7.0

Unsafe-free and allocation-free, no-std network protocol parsing and in-place manipulation library.
Documentation
use super::*;
use crate::data_buffer::traits::BufferIntoInner;

const SLICE_LENGTH: usize = 20 + 40;
const HEADROOM: usize = SLICE_LENGTH + 10;

#[kani::proof]
fn get_ethernet_proof() {
    let mut any_array: [u8; SLICE_LENGTH] = kani::any();
    let any_slice_length = kani::any_where(|i| *i <= SLICE_LENGTH);
    let any_slice = &mut any_array[..any_slice_length];

    let any_headroom = kani::any_where(|i| *i <= HEADROOM);

    if let Ok(mut to_test) = DataBuffer::<_, Eth>::parse_ethernet_layer(any_slice, any_headroom) {
        let _ = to_test.ethernet_destination();
        let _ = to_test.ethernet_source();
        let _ = to_test.ethernet_ether_type();
        let _ = to_test.ethernet_typed_ether_type();
        let _ = to_test.payload();
        let _ = to_test.payload_mut();
        let _ = to_test.payload_length();
    }
}

#[kani::proof]
fn set_ethernet_destination_proof() {
    let mut any_array: [u8; SLICE_LENGTH] = kani::any();
    let any_slice_length = kani::any_where(|i| *i <= SLICE_LENGTH);
    let any_slice = &mut any_array[..any_slice_length];

    let any_headroom = kani::any_where(|i| *i <= HEADROOM);

    if let Ok(mut to_test) = DataBuffer::<_, Eth>::parse_ethernet_layer(any_slice, any_headroom) {
        let _ = to_test.set_ethernet_destination(&kani::any());
        DataBuffer::<_, Eth>::parse_ethernet_layer(to_test.buffer_into_inner(), any_headroom)
            .unwrap();
    }
}

#[kani::proof]
fn set_ethernet_source_proof() {
    let mut any_array: [u8; SLICE_LENGTH] = kani::any();
    let any_slice_length = kani::any_where(|i| *i <= SLICE_LENGTH);
    let any_slice = &mut any_array[..any_slice_length];

    let any_headroom = kani::any_where(|i| *i <= HEADROOM);

    if let Ok(mut to_test) = DataBuffer::<_, Eth>::parse_ethernet_layer(any_slice, any_headroom) {
        let _ = to_test.set_ethernet_source(&kani::any());
        DataBuffer::<_, Eth>::parse_ethernet_layer(to_test.buffer_into_inner(), any_headroom)
            .unwrap();
    }
}

#[kani::proof]
fn set_ethernet_ether_type_proof() {
    let mut any_array: [u8; SLICE_LENGTH] = kani::any();
    let any_slice_length = kani::any_where(|i| *i <= SLICE_LENGTH);
    let any_slice = &mut any_array[..any_slice_length];

    let any_headroom = kani::any_where(|i| *i <= HEADROOM);

    if let Ok(mut to_test) = DataBuffer::<_, Eth>::parse_ethernet_layer(any_slice, any_headroom) {
        let _ = to_test.set_ethernet_ether_type(kani::any());
        DataBuffer::<_, Eth>::parse_ethernet_layer(to_test.buffer_into_inner(), any_headroom)
            .unwrap();
    }
}