ipset/
lib.rs

1//! A library wrapper for `libipset`.  
2//! Support the following commands:
3//! * add
4//! * del
5//! * test
6//! * create
7//! * list
8//! * destroy
9//! * flush
10//! * save
11//! * restore
12//!
13//! Support the following type:
14//! * BitmapIp
15//! * BitmapIpMac
16//! * BitmapPort
17//! * HashIp
18//! * HashIpMac
19//! * HashIpMark
20//! * HashIpPort
21//! * HashIpPortIp
22//! * HashIpPortNet
23//! * HashMac
24//! * HashNet
25//! * HashNetIface
26//! * HashNetNet
27//! * HashNetPort
28//! * HashNetPortNet
29//! * ListSet
30//!
31//! # Example
32//! ```rust,no_run
33//!use std::net::IpAddr;
34//!
35//!use ipset::types::{AddOption, BitmapIp, EnvOption, Error, HashIp, IpDataType, ListResult};
36//!use ipset::{IPSet, Session};
37//!
38//!fn test() -> Result<(), Error> {
39//!    let mut session: Session<HashIp> = Session::<HashIp>::new("test".to_string());
40//!    let ip: IpAddr = "192.168.3.1".parse()?;
41//!    session.create(|builder| builder.with_ipv6(false)?.build())?;
42//!
43//!    let ret = session.add(ip, &[])?;
44//!    println!("add {}", ret);
45//!
46//!    let exists = session.test(ip)?;
47//!    println!("test {}", exists);
48//!
49//!    let ips = session.list()?;
50//!    match ips {
51//!         ListResult::Normal(ret) => {
52//!             println!("name:{}, type:{}, revision:{}, size_in_memory:{}, references:{}, entry_size:{}, header:{:?}",
53//!                 ret.name, ret.typ, ret.revision, ret.size_in_memory, ret.references, ret.entry_size, ret.header)
54//!         }
55//!         ListResult::Terse(names) => {
56//!             println!("{:?}", names);
57//!         }
58//!   }
59//!    session.set_option(EnvOption::ListSetName);
60//!    let ips = session.list()?;
61//!    session.unset_option(EnvOption::ListSetName);
62//!    match ips {
63//!         ListResult::Normal(ret) => {
64//!             println!("name:{}, type:{}, revision:{}, size_in_memory:{}, references:{}, entry_size:{}, header:{:?}",
65//!                 ret.name, ret.typ, ret.revision, ret.size_in_memory, ret.references, ret.entry_size, ret.header)
66//!         }
67//!         ListResult::Terse(names) => {
68//!             println!("{:?}", names);
69//!         }
70//!    }
71//!
72//!    let ret = session.save("test.ipset".into())?;
73//!    println!("save {}", ret);
74//!
75//!    let ret = session.del(ip)?;
76//!    println!("del {}", ret);
77//!
78//!    let ret = session.flush()?;
79//!    println!("flush {}", ret);
80//!
81//!    let ret = session.destroy()?;
82//!    println!("destroy {}", ret);
83//!
84//!    Ok(())
85//!}
86//!
87//! fn main() {
88//!
89//!     if let Err(err) = test() {
90//!         println!("{:?}", err);
91//!     }
92//!
93//!     let set = IPSet::new();
94//!     set.restore("test.ipset".to_string()).unwrap();
95//! }
96//! ```
97
98pub use session::{CreateBuilder, Session};
99pub use set::IPSet;
100
101#[allow(non_camel_case_types)]
102#[allow(unused)]
103#[allow(non_upper_case_globals)]
104#[allow(non_snake_case)]
105mod binding;
106mod session;
107mod set;
108pub mod types;