diff --git a/Cargo.toml b/Cargo.toml index b436869..8f18632 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,8 +16,13 @@ byteorder = "1.4.2" libc= "0.2.86" netlink-packet-core = { version = "0.7.0" } netlink-packet-utils = { version = "0.5.2" } +serde = { version = "1", features = ["derive"], optional = true } +serde-big-array = { version ="0.5.1", optional = true } [dev-dependencies] lazy_static = "1.4.0" netlink-proto = { version = "0.11.2" } netlink-sys = { version = "0.8.4" } + +[features] +serde = ["dep:serde", "dep:serde-big-array", "netlink-packet-utils/serde"] diff --git a/src/address.rs b/src/address.rs index 6819aa0..9ab85f4 100644 --- a/src/address.rs +++ b/src/address.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; @@ -7,6 +9,7 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; pub const XFRM_ADDRESS_LEN: usize = 16; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Address { // Xfrm netlink API simply uses a 16 byte buffer for both IPv4 & IPv6 // addresses and unfortunately doesn't always pair it with a family type. diff --git a/src/async_event_id.rs b/src/async_event_id.rs index b486cfb..16d950a 100644 --- a/src/async_event_id.rs +++ b/src/async_event_id.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -12,6 +14,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AsyncEventId { pub sa_id: UserSaId, pub saddr: Address, diff --git a/src/id.rs b/src/id.rs index 273c061..1d5414e 100644 --- a/src/id.rs +++ b/src/id.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{Address, AddressBuffer, XFRM_ADDRESS_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Id { pub daddr: Address, pub spi: u32, // big-endian diff --git a/src/lifetime.rs b/src/lifetime.rs index 2761084..59efbe9 100644 --- a/src/lifetime.rs +++ b/src/lifetime.rs @@ -1,5 +1,8 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use crate::XFRM_INF; use netlink_packet_utils::{buffer, traits::*, DecodeError}; @@ -7,6 +10,7 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; // Lifetime config #[derive(Debug, Clone, Copy, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct LifetimeConfig { pub soft_byte_limit: u64, pub hard_byte_limit: u64, @@ -82,6 +86,7 @@ impl Emitable for LifetimeConfig { // Lifetime curent #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Lifetime { pub bytes: u64, pub packets: u64, diff --git a/src/message.rs b/src/message.rs index f898f31..9ef444a 100644 --- a/src/message.rs +++ b/src/message.rs @@ -1,5 +1,8 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use crate::{ constants::*, monitor::{ @@ -26,6 +29,7 @@ use netlink_packet_core::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum XfrmMessage { AddPolicy(PolicyModifyMessage), DeletePolicy(PolicyDelGetMessage), diff --git a/src/monitor/acquire/message.rs b/src/monitor/acquire/message.rs index 284ab0f..95796ac 100644 --- a/src/monitor/acquire/message.rs +++ b/src/monitor/acquire/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{AcquireMessageBuffer, UserAcquire, UserAcquireBuffer, XfrmAttrs}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AcquireMessage { pub acquire: UserAcquire, pub nlas: Vec, diff --git a/src/monitor/expire/message.rs b/src/monitor/expire/message.rs index dd74248..4ce48fa 100644 --- a/src/monitor/expire/message.rs +++ b/src/monitor/expire/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ExpireMessageBuffer, UserExpire, UserExpireBuffer}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ExpireMessage { pub expire: UserExpire, } diff --git a/src/monitor/get_async_event/message.rs b/src/monitor/get_async_event/message.rs index 2a37b77..1898176 100644 --- a/src/monitor/get_async_event/message.rs +++ b/src/monitor/get_async_event/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{AsyncEventId, AsyncEventIdBuffer, GetAsyncEventMessageBuffer}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct GetAsyncEventMessage { pub id: AsyncEventId, } diff --git a/src/monitor/mapping/message.rs b/src/monitor/mapping/message.rs index 339788a..360c707 100644 --- a/src/monitor/mapping/message.rs +++ b/src/monitor/mapping/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{MappingMessageBuffer, UserMapping, UserMappingBuffer}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct MappingMessage { pub map: UserMapping, } diff --git a/src/monitor/migrate/message.rs b/src/monitor/migrate/message.rs index d1821af..6769be6 100644 --- a/src/monitor/migrate/message.rs +++ b/src/monitor/migrate/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ MigrateMessageBuffer, UserPolicyId, UserPolicyIdBuffer, XfrmAttrs, @@ -9,6 +11,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct MigrateMessage { pub user_policy_id: UserPolicyId, pub nlas: Vec, diff --git a/src/monitor/new_async_event/message.rs b/src/monitor/new_async_event/message.rs index e9ca28a..078fa36 100644 --- a/src/monitor/new_async_event/message.rs +++ b/src/monitor/new_async_event/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ AsyncEventId, AsyncEventIdBuffer, NewAsyncEventMessageBuffer, XfrmAttrs, @@ -9,6 +11,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct NewAsyncEventMessage { pub id: AsyncEventId, pub nlas: Vec, diff --git a/src/monitor/polexpire/message.rs b/src/monitor/polexpire/message.rs index 3847e59..24b7e0a 100644 --- a/src/monitor/polexpire/message.rs +++ b/src/monitor/polexpire/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ PolicyExpireMessageBuffer, UserPolicyExpire, UserPolicyExpireBuffer, @@ -10,6 +12,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct PolicyExpireMessage { pub expire: UserPolicyExpire, pub nlas: Vec, diff --git a/src/monitor/report/message.rs b/src/monitor/report/message.rs index 7abffd3..5f44840 100644 --- a/src/monitor/report/message.rs +++ b/src/monitor/report/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ReportMessageBuffer, UserReport, UserReportBuffer, XfrmAttrs}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ReportMessage { pub report: UserReport, pub nlas: Vec, diff --git a/src/nlas/address_filter.rs b/src/nlas/address_filter.rs index d4e6c7a..a59015e 100644 --- a/src/nlas/address_filter.rs +++ b/src/nlas/address_filter.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; use std::net::IpAddr; @@ -14,6 +16,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AddressFilter { pub saddr: Address, pub daddr: Address, diff --git a/src/nlas/alg.rs b/src/nlas/alg.rs index feb44cb..7211414 100644 --- a/src/nlas/alg.rs +++ b/src/nlas/alg.rs @@ -1,5 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use { + serde::{Deserialize, Serialize}, + serde_big_array::BigArray, +}; + use core::ops::Range; use netlink_packet_utils::{buffer, traits::*, DecodeError}; @@ -7,7 +13,9 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; pub const XFRM_ALG_NAME_LEN: usize = 64; #[derive(Debug, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Alg { + #[cfg_attr(feature = "serde", serde(with = "BigArray"))] pub alg_name: [u8; XFRM_ALG_NAME_LEN], pub alg_key_len: u32, pub alg_key: Vec, diff --git a/src/nlas/alg_aead.rs b/src/nlas/alg_aead.rs index 9132fe5..eef7eba 100644 --- a/src/nlas/alg_aead.rs +++ b/src/nlas/alg_aead.rs @@ -1,5 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use { + serde::{Deserialize, Serialize}, + serde_big_array::BigArray, +}; + use core::ops::Range; use netlink_packet_utils::{buffer, traits::*, DecodeError}; @@ -7,7 +13,9 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; pub const XFRM_ALG_AEAD_NAME_LEN: usize = 64; #[derive(Debug, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AlgAead { + #[cfg_attr(feature = "serde", serde(with = "BigArray"))] pub alg_name: [u8; XFRM_ALG_AEAD_NAME_LEN], pub alg_key_len: u32, pub alg_icv_len: u32, diff --git a/src/nlas/alg_auth.rs b/src/nlas/alg_auth.rs index 70e0c2f..4c7facf 100644 --- a/src/nlas/alg_auth.rs +++ b/src/nlas/alg_auth.rs @@ -1,5 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use { + serde::{Deserialize, Serialize}, + serde_big_array::BigArray, +}; + use core::ops::Range; use netlink_packet_utils::{buffer, traits::*, DecodeError}; @@ -7,7 +13,9 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; pub const XFRM_ALG_AUTH_NAME_LEN: usize = 64; #[derive(Debug, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AlgAuth { + #[cfg_attr(feature = "serde", serde(with = "BigArray"))] pub alg_name: [u8; XFRM_ALG_AUTH_NAME_LEN], pub alg_key_len: u32, pub alg_trunc_len: u32, diff --git a/src/nlas/encap_tmpl.rs b/src/nlas/encap_tmpl.rs index 1e168a6..5a5a0e8 100644 --- a/src/nlas/encap_tmpl.rs +++ b/src/nlas/encap_tmpl.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{Address, AddressBuffer, XFRM_ADDRESS_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct EncapTmpl { pub encap_type: u16, pub encap_sport: u16, // big-endian diff --git a/src/nlas/mark.rs b/src/nlas/mark.rs index 98d5b37..8343fbf 100644 --- a/src/nlas/mark.rs +++ b/src/nlas/mark.rs @@ -1,8 +1,12 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Mark { pub value: u32, pub mask: u32, diff --git a/src/nlas/mod.rs b/src/nlas/mod.rs index 5228a5f..95c0edb 100644 --- a/src/nlas/mod.rs +++ b/src/nlas/mod.rs @@ -42,6 +42,8 @@ pub use user_template::*; use anyhow::Context; use byteorder::{ByteOrder, NativeEndian}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use std::mem::size_of; use crate::{ @@ -58,6 +60,7 @@ use netlink_packet_utils::{ }; #[derive(Debug, PartialEq, Eq, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum XfrmAttrs { AddressFilter(address_filter::AddressFilter), AuthenticationAlg(Alg), diff --git a/src/nlas/replay.rs b/src/nlas/replay.rs index 6d7ba33..f0529e5 100644 --- a/src/nlas/replay.rs +++ b/src/nlas/replay.rs @@ -1,8 +1,12 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Replay { pub oseq: u32, pub seq: u32, diff --git a/src/nlas/replay_esn.rs b/src/nlas/replay_esn.rs index af6dc4b..919a67c 100644 --- a/src/nlas/replay_esn.rs +++ b/src/nlas/replay_esn.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use byteorder::{ByteOrder, NativeEndian}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; pub const XFRM_REPLAY_ESN_LEN: usize = 24; #[derive(Debug, Clone, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ReplayEsn { pub bmp_len: u32, pub oseq: u32, diff --git a/src/nlas/security_ctx.rs b/src/nlas/security_ctx.rs index 0cdf107..cb71202 100644 --- a/src/nlas/security_ctx.rs +++ b/src/nlas/security_ctx.rs @@ -1,10 +1,14 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; use crate::constants::*; #[derive(Debug, Clone, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct SecurityCtx { pub len: u16, pub exttype: u16, diff --git a/src/nlas/user_kmaddress.rs b/src/nlas/user_kmaddress.rs index df303f3..d75bc11 100644 --- a/src/nlas/user_kmaddress.rs +++ b/src/nlas/user_kmaddress.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{Address, AddressBuffer, XFRM_ADDRESS_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserKmAddress { pub local: Address, pub remote: Address, diff --git a/src/nlas/user_migrate.rs b/src/nlas/user_migrate.rs index cbdbf59..fef881a 100644 --- a/src/nlas/user_migrate.rs +++ b/src/nlas/user_migrate.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,8 @@ use crate::{Address, AddressBuffer, XFRM_ADDRESS_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] + pub struct UserMigrate { pub old_daddr: Address, pub old_saddr: Address, diff --git a/src/nlas/user_offload.rs b/src/nlas/user_offload.rs index 1bd4be0..49aa026 100644 --- a/src/nlas/user_offload.rs +++ b/src/nlas/user_offload.rs @@ -1,8 +1,12 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserOffloadDev { pub ifindex: i32, /* "int" in iproute2 */ pub flags: u8, diff --git a/src/nlas/user_template.rs b/src/nlas/user_template.rs index d3228c6..f2d86fc 100644 --- a/src/nlas/user_template.rs +++ b/src/nlas/user_template.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ constants::{AF_INET, AF_INET6}, @@ -12,6 +14,7 @@ use std::net::IpAddr; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserTemplate { pub id: Id, pub family: u16, diff --git a/src/policy/default/message.rs b/src/policy/default/message.rs index 18a326b..c4fac9e 100644 --- a/src/policy/default/message.rs +++ b/src/policy/default/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::policy::{DefaultMessageBuffer, POLICY_DEFAULT_HEADER_LEN}; use crate::{UserPolicyDefault, UserPolicyDefaultBuffer}; @@ -8,6 +10,7 @@ use crate::{UserPolicyDefault, UserPolicyDefaultBuffer}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct DefaultMessage { pub user_policy: UserPolicyDefault, } diff --git a/src/policy/delget/message.rs b/src/policy/delget/message.rs index 244fc45..1816033 100644 --- a/src/policy/delget/message.rs +++ b/src/policy/delget/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ policy::DelGetMessageBuffer, UserPolicyId, UserPolicyIdBuffer, XfrmAttrs, @@ -9,6 +11,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct DelGetMessage { pub user_policy_id: UserPolicyId, pub nlas: Vec, diff --git a/src/policy/flush/message.rs b/src/policy/flush/message.rs index df6bff7..9cbc6e4 100644 --- a/src/policy/flush/message.rs +++ b/src/policy/flush/message.rs @@ -1,12 +1,15 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{policy::FlushMessageBuffer, XfrmAttrs}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct FlushMessage { pub nlas: Vec, } diff --git a/src/policy/modify/message.rs b/src/policy/modify/message.rs index 6af3203..2983113 100644 --- a/src/policy/modify/message.rs +++ b/src/policy/modify/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ policy::ModifyMessageBuffer, UserPolicyInfo, UserPolicyInfoBuffer, @@ -10,6 +12,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ModifyMessage { pub user_policy_info: UserPolicyInfo, pub nlas: Vec, diff --git a/src/policy/spdinfo/message.rs b/src/policy/spdinfo/message.rs index c84a654..e448bd0 100644 --- a/src/policy/spdinfo/message.rs +++ b/src/policy/spdinfo/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::policy::{ GetSpdInfoMessageBuffer, NewSpdInfoMessageBuffer, SpdInfoAttrs, @@ -10,6 +12,7 @@ use crate::policy::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct NewSpdInfoMessage { pub flags: u32, pub nlas: Vec, @@ -56,6 +59,7 @@ impl<'a, T: AsRef<[u8]> + 'a> Parseable> } #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct GetSpdInfoMessage { pub flags: u32, } diff --git a/src/policy/spdinfo/nlas/mod.rs b/src/policy/spdinfo/nlas/mod.rs index 3ae57ae..a65d3e2 100644 --- a/src/policy/spdinfo/nlas/mod.rs +++ b/src/policy/spdinfo/nlas/mod.rs @@ -4,6 +4,8 @@ pub mod spd_info; pub use spd_info::*; use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::constants::*; @@ -14,6 +16,7 @@ use netlink_packet_utils::{ }; #[derive(Debug, PartialEq, Eq, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum SpdInfoAttrs { Unspec(Vec), SpdInfo(spd_info::SpdInfo), diff --git a/src/policy/spdinfo/nlas/spd_info.rs b/src/policy/spdinfo/nlas/spd_info.rs index cf30124..6d33f0c 100644 --- a/src/policy/spdinfo/nlas/spd_info.rs +++ b/src/policy/spdinfo/nlas/spd_info.rs @@ -1,8 +1,12 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct SpdInfo { pub incnt: u32, pub outcnt: u32, @@ -53,6 +57,7 @@ impl Emitable for SpdInfo { } #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct SpdHInfo { pub spdhcnt: u32, pub spdhmcnt: u32, @@ -87,6 +92,7 @@ impl Emitable for SpdHInfo { } #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct SpdHThresh { pub lbits: u8, pub rbits: u8, diff --git a/src/selector.rs b/src/selector.rs index 2f557ee..a22c6c4 100644 --- a/src/selector.rs +++ b/src/selector.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; use std::net::IpAddr; @@ -13,6 +15,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Selector { pub daddr: Address, pub saddr: Address, diff --git a/src/state/allocspi/message.rs b/src/state/allocspi/message.rs index aa99d7d..3a400e9 100644 --- a/src/state/allocspi/message.rs +++ b/src/state/allocspi/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::state::AllocSpiMessageBuffer; use crate::{UserSpiInfo, UserSpiInfoBuffer, XfrmAttrs}; @@ -8,6 +10,7 @@ use crate::{UserSpiInfo, UserSpiInfoBuffer, XfrmAttrs}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct AllocSpiMessage { pub spi_info: UserSpiInfo, pub nlas: Vec, diff --git a/src/state/delget/message.rs b/src/state/delget/message.rs index 08af0ff..24f6826 100644 --- a/src/state/delget/message.rs +++ b/src/state/delget/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ state::{DelGetMessageBuffer, GetDumpMessageBuffer}, @@ -10,6 +12,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct DelGetMessage { pub user_sa_id: UserSaId, pub nlas: Vec, @@ -56,6 +59,7 @@ impl<'a, T: AsRef<[u8]> + 'a> Parseable> } #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct GetDumpMessage { pub nlas: Vec, } diff --git a/src/state/flush/message.rs b/src/state/flush/message.rs index e4ed25a..d781ec8 100644 --- a/src/state/flush/message.rs +++ b/src/state/flush/message.rs @@ -1,10 +1,14 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use crate::state::{FlushMessageBuffer, STATE_FLUSH_HEADER_LEN}; use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct FlushMessage { pub protocol: u8, } diff --git a/src/state/modify/message.rs b/src/state/modify/message.rs index c02c57c..681e535 100644 --- a/src/state/modify/message.rs +++ b/src/state/modify/message.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use crate::{ state::ModifyMessageBuffer, UserSaInfo, UserSaInfoBuffer, XfrmAttrs, @@ -9,6 +11,7 @@ use crate::{ use netlink_packet_utils::{traits::*, DecodeError}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct ModifyMessage { pub user_sa_info: UserSaInfo, pub nlas: Vec, diff --git a/src/state/sadinfo/message.rs b/src/state/sadinfo/message.rs index 1fb14a7..cb5070d 100644 --- a/src/state/sadinfo/message.rs +++ b/src/state/sadinfo/message.rs @@ -8,8 +8,11 @@ use crate::state::{ }; use netlink_packet_utils::{traits::*, DecodeError}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct NewSadInfoMessage { pub flags: u32, pub nlas: Vec, @@ -56,6 +59,7 @@ impl<'a, T: AsRef<[u8]> + 'a> Parseable> } #[derive(Debug, PartialEq, Eq, Clone, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct GetSadInfoMessage { pub flags: u32, } diff --git a/src/state/sadinfo/nlas/mod.rs b/src/state/sadinfo/nlas/mod.rs index b77170d..81384f3 100644 --- a/src/state/sadinfo/nlas/mod.rs +++ b/src/state/sadinfo/nlas/mod.rs @@ -5,6 +5,8 @@ pub use sad_info::*; use anyhow::Context; use byteorder::{ByteOrder, NativeEndian}; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use std::mem::size_of; use crate::constants::*; @@ -17,6 +19,7 @@ use netlink_packet_utils::{ }; #[derive(Debug, PartialEq, Eq, Clone)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub enum SadInfoAttrs { Unspec(Vec), SadCount(u32), diff --git a/src/state/sadinfo/nlas/sad_info.rs b/src/state/sadinfo/nlas/sad_info.rs index deadf46..971e964 100644 --- a/src/state/sadinfo/nlas/sad_info.rs +++ b/src/state/sadinfo/nlas/sad_info.rs @@ -1,8 +1,12 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct SadHInfo { pub sadhcnt: u32, pub sadhmcnt: u32, diff --git a/src/stats.rs b/src/stats.rs index 1adc36d..13066a2 100644 --- a/src/stats.rs +++ b/src/stats.rs @@ -1,8 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct Stats { pub replay_window: u32, pub replay: u32, diff --git a/src/user_acquire.rs b/src/user_acquire.rs index 9dff9db..aff4680 100644 --- a/src/user_acquire.rs +++ b/src/user_acquire.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -13,6 +15,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserAcquire { pub id: Id, pub saddr: Address, diff --git a/src/user_expire.rs b/src/user_expire.rs index aa1936d..c282d4c 100644 --- a/src/user_expire.rs +++ b/src/user_expire.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{UserSaInfo, UserSaInfoBuffer, XFRM_USER_SA_INFO_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserExpire { pub state: UserSaInfo, pub hard: u8, diff --git a/src/user_mapping.rs b/src/user_mapping.rs index 49408e6..2385408 100644 --- a/src/user_mapping.rs +++ b/src/user_mapping.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -12,6 +14,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserMapping { pub id: UserSaId, pub reqid: u32, diff --git a/src/user_polexpire.rs b/src/user_polexpire.rs index 304e64c..ee08aa5 100644 --- a/src/user_polexpire.rs +++ b/src/user_polexpire.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{UserPolicyInfo, UserPolicyInfoBuffer, XFRM_USER_POLICY_INFO_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserPolicyExpire { pub pol: UserPolicyInfo, pub hard: u8, diff --git a/src/user_policy_default.rs b/src/user_policy_default.rs index 1d0cbcf..03322c5 100644 --- a/src/user_policy_default.rs +++ b/src/user_policy_default.rs @@ -1,8 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserPolicyDefault { pub input: u8, pub forward: u8, diff --git a/src/user_policy_id.rs b/src/user_policy_id.rs index a3f0242..b6e20f3 100644 --- a/src/user_policy_id.rs +++ b/src/user_policy_id.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{Selector, SelectorBuffer, XFRM_SELECTOR_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserPolicyId { pub selector: Selector, pub index: u32, diff --git a/src/user_policy_info.rs b/src/user_policy_info.rs index 3956b4b..55413b7 100644 --- a/src/user_policy_info.rs +++ b/src/user_policy_info.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -13,6 +15,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserPolicyInfo { pub selector: Selector, pub lifetime_cfg: LifetimeConfig, diff --git a/src/user_policy_type.rs b/src/user_policy_type.rs index 7f3cc35..5d4d881 100644 --- a/src/user_policy_type.rs +++ b/src/user_policy_type.rs @@ -1,8 +1,11 @@ // SPDX-License-Identifier: MIT +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserPolicyType { pub ptype: u8, pub reserved1: u16, diff --git a/src/user_report.rs b/src/user_report.rs index ca4ef75..ce96d94 100644 --- a/src/user_report.rs +++ b/src/user_report.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -9,6 +11,7 @@ use crate::{Selector, SelectorBuffer, XFRM_SELECTOR_LEN}; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserReport { pub proto: u8, pub selector: Selector, diff --git a/src/user_sa_id.rs b/src/user_sa_id.rs index b8c220f..8f23e79 100644 --- a/src/user_sa_id.rs +++ b/src/user_sa_id.rs @@ -7,11 +7,14 @@ use crate::{ Address, AddressBuffer, XFRM_ADDRESS_LEN, }; use core::ops::Range; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use std::net::IpAddr; use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserSaId { pub daddr: Address, pub spi: u32, // big-endian diff --git a/src/user_sa_info.rs b/src/user_sa_info.rs index 0deb967..96122ea 100644 --- a/src/user_sa_info.rs +++ b/src/user_sa_info.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -15,6 +17,7 @@ use netlink_packet_utils::{buffer, traits::*, DecodeError}; use std::net::IpAddr; #[derive(Debug, Clone, Copy, Eq, PartialEq, Default)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserSaInfo { pub selector: Selector, pub id: Id, diff --git a/src/user_spi_info.rs b/src/user_spi_info.rs index a4d8556..cc65699 100644 --- a/src/user_spi_info.rs +++ b/src/user_spi_info.rs @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT use anyhow::Context; +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; use core::ops::Range; @@ -12,6 +14,7 @@ use crate::{ use netlink_packet_utils::{buffer, traits::*, DecodeError}; #[derive(Debug, Clone, Copy, Eq, PartialEq)] +#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] pub struct UserSpiInfo { pub info: UserSaInfo, pub min: u32,