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

netgauze-ipfix-code-generator

生成 IPFIX 信息元素的 Rust 代码绑定

5 个版本 (3 个重大更新)

新增 0.4.1 2024年8月8日
0.4.0 2024年8月7日
0.3.0 2024年1月31日
0.2.0 2023年10月9日
0.1.0 2023年3月5日

#626网络编程

Download history 5/week @ 2024-05-16 4/week @ 2024-05-23 5/week @ 2024-05-30 6/week @ 2024-06-06 4/week @ 2024-06-13 5/week @ 2024-06-20 1/week @ 2024-06-27 5/week @ 2024-07-04 16/week @ 2024-07-11 40/week @ 2024-07-18 67/week @ 2024-07-25 93/week @ 2024-08-01

每月222 次下载
2 个包中使用 (通过 netgauze-flow-pkt)

Apache-2.0

140KB
3K SLoC

生成 IPFIX 信息元素的 Rust 代码绑定

示例

要在 build.rs 中包含生成的 IANA 和自定义注册信息元素,请添加以下代码

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");
}

依赖

~6–18MB
~259K SLoC