rscamper 0.2.2

Rust interface to scamper network measurement tool
Documentation
// rscamper - Rust FFI bindings for scamper_addr.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, c_int, c_void, size_t};

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

pub const SCAMPER_ADDR_TYPE_IPV4:     c_int = 1;
pub const SCAMPER_ADDR_TYPE_IPV6:     c_int = 2;
pub const SCAMPER_ADDR_TYPE_ETHERNET: c_int = 3;

unsafe extern "C" {
    pub fn scamper_addr_free(sa: *mut ScamperAddrT);
    pub fn scamper_addr_use(sa: *mut ScamperAddrT) -> *mut ScamperAddrT;
    pub fn scamper_addr_fromstr(kind: c_int, addr: *const c_char) -> *mut ScamperAddrT;
    pub fn scamper_addr_alloc(kind: c_int, addr: *const c_void) -> *mut ScamperAddrT;

    pub fn scamper_addr_tostr(
        sa: *const ScamperAddrT,
        dst: *mut c_char,
        size: size_t,
    ) -> *const c_char;
    pub fn scamper_addr_cmp(a: *const ScamperAddrT, b: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_human_cmp(a: *const ScamperAddrT, b: *const ScamperAddrT) -> c_int;

    pub fn scamper_addr_islinklocal(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isrfc1918(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isunicast(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_is6to4(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isreserved(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isipv4(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isipv6(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isethernet(a: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_isfirewire(a: *const ScamperAddrT) -> c_int;

    pub fn scamper_addr_addr_get(addr: *const ScamperAddrT) -> *const c_void;
    pub fn scamper_addr_type_get(addr: *const ScamperAddrT) -> c_int;
    pub fn scamper_addr_len_get(addr: *const ScamperAddrT) -> size_t;
}