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;