rscamper 0.2.2

Rust interface to scamper network measurement tool
Documentation
// rscamper - Rust FFI bindings for scamper_sniff.h
//
// Copyright (C) 2026 Dimitrios Giakatos
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3.

use libc::{c_char, size_t, timeval};
use super::scamper_addr::ScamperAddrT;
use super::scamper_list::{ScamperListT, ScamperCycleT};

#[repr(C)]
pub struct ScamperSniffT {
    _opaque: [u8; 0],
}

#[repr(C)]
pub struct ScamperSniffPktT {
    _opaque: [u8; 0],
}

pub const SCAMPER_SNIFF_STOP_NONE:        u8 = 0;
pub const SCAMPER_SNIFF_STOP_ERROR:       u8 = 1;
pub const SCAMPER_SNIFF_STOP_LIMIT_TIME:  u8 = 2;
pub const SCAMPER_SNIFF_STOP_LIMIT_PKTC:  u8 = 3;
pub const SCAMPER_SNIFF_STOP_HALTED:      u8 = 4;

unsafe extern "C" {
    pub fn scamper_sniff_free(sniff: *mut ScamperSniffT);

    pub fn scamper_sniff_list_get(sniff: *const ScamperSniffT) -> *mut ScamperListT;
    pub fn scamper_sniff_cycle_get(sniff: *const ScamperSniffT) -> *mut ScamperCycleT;
    pub fn scamper_sniff_userid_get(sniff: *const ScamperSniffT) -> u32;
    pub fn scamper_sniff_start_get(sniff: *const ScamperSniffT) -> *const timeval;
    pub fn scamper_sniff_finish_get(sniff: *const ScamperSniffT) -> *const timeval;
    pub fn scamper_sniff_stop_reason_get(sniff: *const ScamperSniffT) -> u8;
    pub fn scamper_sniff_stop_tostr(
        sniff: *const ScamperSniffT,
        buf: *mut c_char,
        len: size_t,
    ) -> *mut c_char;
    pub fn scamper_sniff_limit_pktc_get(sniff: *const ScamperSniffT) -> u32;
    pub fn scamper_sniff_limit_time_get(sniff: *const ScamperSniffT) -> *const timeval;
    pub fn scamper_sniff_src_get(sniff: *const ScamperSniffT) -> *mut ScamperAddrT;
    pub fn scamper_sniff_icmpid_get(sniff: *const ScamperSniffT) -> u16;
    pub fn scamper_sniff_errmsg_get(sniff: *const ScamperSniffT) -> *const c_char;

    pub fn scamper_sniff_pkt_get(sniff: *const ScamperSniffT, i: u32) -> *mut ScamperSniffPktT;
    pub fn scamper_sniff_pktc_get(sniff: *const ScamperSniffT) -> u32;

    pub fn scamper_sniff_pkt_use(pkt: *mut ScamperSniffPktT) -> *mut ScamperSniffPktT;
    pub fn scamper_sniff_pkt_free(pkt: *mut ScamperSniffPktT);
    pub fn scamper_sniff_pkt_tv_get(pkt: *const ScamperSniffPktT) -> *const timeval;
    pub fn scamper_sniff_pkt_data_get(pkt: *const ScamperSniffPktT) -> *const u8;
    pub fn scamper_sniff_pkt_len_get(pkt: *const ScamperSniffPktT) -> u16;
}