pn-dcp 0.3.0

Aim to quickly parsing and splicing pn-dcp packet
Documentation
use anyhow::{bail, Result};
use pnet::datalink;
use pnet::datalink::Channel::Ethernet;
use pnet::datalink::Config;

pub mod comm;
use comm::*;

#[test]
#[ignore]
pub fn simulate_host() -> Result<()> {
    let index: u32 = 10;
    let interface = get_interface(index)?;
    if let Some(_src) = interface.mac {
        let cf = Config::default();
        let (mut tx, _rx) = match datalink::channel(&interface, cf) {
            Ok(Ethernet(tx, rx)) => (tx, rx),
            Ok(_) => bail!("Unhandled channel type"),
            Err(e) => bail!(
                "An error occurred when creating the datalink channel: {}",
                e
            ),
        };
        let data = get_ident_req();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
        let data = get_ident_resp();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
        let data = get_set_req();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
        let data = get_set_resp();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
        let data = get_get_req();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
        let data = get_get_resp();
        if let Some(Err(e)) = tx.send_to(data.as_slice(), Some(interface.clone())) {
            bail!("error: {:?}", e);
        }
    }
    Ok(())
}