lwip 0.3.15

Rust bindings for the lwIP TCP/IP stack
Documentation
use super::lwip::*;
use super::stack_impl::NetStackImpl;

pub static mut OUTPUT_CB_PTR: usize = 0x0;

fn output(_netif: *mut netif, p: *mut pbuf) -> err_t {
    unsafe {
        let pbuflen = std::ptr::read_unaligned(p).tot_len;
        let mut buf = Vec::with_capacity(pbuflen as usize);
        pbuf_copy_partial(p, buf.as_mut_ptr() as *mut _, pbuflen, 0);
        buf.set_len(pbuflen as usize);
        if OUTPUT_CB_PTR == 0x0 {
            return err_enum_t_ERR_ABRT as err_t;
        }
        let stack = &mut *(OUTPUT_CB_PTR as *mut NetStackImpl);
        stack.output(buf);
        err_enum_t_ERR_OK as err_t
    }
}

#[allow(unused_variables)]
pub extern "C" fn output_ip4(netif: *mut netif, p: *mut pbuf, ipaddr: *const ip4_addr_t) -> err_t {
    output(netif, p)
}

#[allow(unused_variables)]
#[allow(unused)]
pub extern "C" fn output_ip6(netif: *mut netif, p: *mut pbuf, ipaddr: *const ip6_addr_t) -> err_t {
    output(netif, p)
}