#parser-generator #ipfix #netflow #code #parser #generator

netgauze-ipfix-code-generator

Generate Rust code bindings for IPFIX Information Elements

10 releases (5 breaking)

0.6.2 Apr 9, 2025
0.6.1 Mar 26, 2025
0.5.0 Nov 5, 2024
0.4.1 Aug 8, 2024
0.1.0 Mar 5, 2023

#854 in Network programming

Download history 5/week @ 2025-01-07 3/week @ 2025-01-14 18/week @ 2025-01-21 13/week @ 2025-01-28 21/week @ 2025-02-18 5/week @ 2025-02-25 11/week @ 2025-03-04 9/week @ 2025-03-11 120/week @ 2025-03-18 142/week @ 2025-03-25 26/week @ 2025-04-01 202/week @ 2025-04-08 64/week @ 2025-04-15 25/week @ 2025-04-22

319 downloads per month
Used in 3 crates (via netgauze-flow-pkt)

Apache-2.0

205KB
4.5K SLoC

Generate Rust code bindings for IPFIX Information Elements

Example:

To include the generated IANA and custom registry Information elements, in build.rs add the following code

use std::env;

use netgauze_ipfix_code_generator::{Config, generate, RegistrySource, RegistryType, SourceConfig};

const IPFIX_URL: &str = "https://www.iana.org/assignments/ipfix/ipfix.xml";

fn main() {
    let out_dir = env::var_os("OUT_DIR").expect("Couldn't find OUT_DIR in OS env variables");
    let manifest_dir = env!("CARGO_MANIFEST_DIR");
    let registry_path = std::path::Path::new(&manifest_dir).join("registry");
    // Add custom registry, the xml file must follow the IANA schema
    let nokia_path = registry_path
        .join("nokia.xml")
        .into_os_string()
        .into_string()
        .expect("Couldn't load nokia registry file");
    let nokia_source = SourceConfig::new(
        RegistrySource::File(nokia_path),
        RegistryType::IanaXML,
        637,
        "nokia".to_string(),
        "Nokia".to_string(),
    );
    let iana_source = SourceConfig::new(
        RegistrySource::Http(IPFIX_URL.to_string()),
        RegistryType::IanaXML,
        0,
        "iana".to_string(),
        "IANA".to_string(),
    );
    let configs = Config::new(iana_source, vec![nokia_source]);
    generate(&out_dir, &configs).unwrap();

    println!("cargo:rerun-if-changed=build.rs");
}

Dependencies

~7–19MB
~257K SLoC