Skip to content
This repository was archived by the owner on Oct 26, 2022. It is now read-only.

Commit 8cbf334

Browse files
authored
Merge pull request #210 from mcginty/wireguard-flags
2 parents 8a47322 + b62e60a commit 8cbf334

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

netlink-packet-wireguard/src/nlas/device.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ pub enum WgDeviceAttrs {
2020
ListenPort(u16),
2121
Fwmark(u32),
2222
Peers(Vec<Vec<WgPeerAttrs>>),
23+
Flags(u32),
2324
}
2425

2526
impl Nla for WgDeviceAttrs {
@@ -33,6 +34,7 @@ impl Nla for WgDeviceAttrs {
3334
WgDeviceAttrs::ListenPort(v) => size_of_val(v),
3435
WgDeviceAttrs::Fwmark(v) => size_of_val(v),
3536
WgDeviceAttrs::Peers(nlas) => nlas.iter().map(|op| op.as_slice().buffer_len()).sum(),
37+
WgDeviceAttrs::Flags(v) => size_of_val(v),
3638
}
3739
}
3840

@@ -46,6 +48,7 @@ impl Nla for WgDeviceAttrs {
4648
WgDeviceAttrs::ListenPort(_) => WGDEVICE_A_LISTEN_PORT,
4749
WgDeviceAttrs::Fwmark(_) => WGDEVICE_A_FWMARK,
4850
WgDeviceAttrs::Peers(_) => WGDEVICE_A_PEERS,
51+
WgDeviceAttrs::Flags(_) => WGDEVICE_A_FLAGS,
4952
}
5053
}
5154

@@ -68,6 +71,7 @@ impl Nla for WgDeviceAttrs {
6871
len += op.as_slice().buffer_len();
6972
}
7073
}
74+
WgDeviceAttrs::Flags(v) => NativeEndian::write_u32(buffer, *v),
7175
}
7276
}
7377
}
@@ -114,6 +118,9 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for WgDeviceAttrs
114118
}
115119
Self::Peers(peers)
116120
}
121+
WGDEVICE_A_FLAGS => {
122+
Self::Flags(parse_u32(payload).context("invalid WGDEVICE_A_FLAGS value")?)
123+
}
117124
kind => return Err(DecodeError::from(format!("invalid NLA kind: {}", kind))),
118125
})
119126
}

netlink-packet-wireguard/src/nlas/peer.rs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub enum WgPeerAttrs {
3333
TxBytes(u64),
3434
AllowedIps(Vec<Vec<WgAllowedIpAttrs>>),
3535
ProtocolVersion(u32),
36+
Flags(u32),
3637
}
3738

3839
impl Nla for WgPeerAttrs {
@@ -51,6 +52,7 @@ impl Nla for WgPeerAttrs {
5152
WgPeerAttrs::TxBytes(v) => size_of_val(v),
5253
WgPeerAttrs::AllowedIps(nlas) => nlas.iter().map(|op| op.as_slice().buffer_len()).sum(),
5354
WgPeerAttrs::ProtocolVersion(v) => size_of_val(v),
55+
WgPeerAttrs::Flags(v) => size_of_val(v),
5456
}
5557
}
5658

@@ -66,6 +68,7 @@ impl Nla for WgPeerAttrs {
6668
WgPeerAttrs::TxBytes(_) => WGPEER_A_TX_BYTES,
6769
WgPeerAttrs::AllowedIps(_) => WGPEER_A_ALLOWEDIPS,
6870
WgPeerAttrs::ProtocolVersion(_) => WGPEER_A_PROTOCOL_VERSION,
71+
WgPeerAttrs::Flags(_) => WGPEER_A_FLAGS,
6972
}
7073
}
7174

@@ -87,6 +90,7 @@ impl Nla for WgPeerAttrs {
8790
}
8891
}
8992
WgPeerAttrs::ProtocolVersion(v) => NativeEndian::write_u32(buffer, *v),
93+
WgPeerAttrs::Flags(v) => NativeEndian::write_u32(buffer, *v),
9094
}
9195
}
9296
}
@@ -114,14 +118,12 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for WgPeerAttrs {
114118
WGPEER_A_LAST_HANDSHAKE_TIME => Self::LastHandshake(
115119
parse_timespec(payload).context("invalid WGPEER_A_LAST_HANDSHAKE_TIME")?,
116120
),
117-
WGPEER_A_RX_BYTES => Self::RxBytes(
118-
parse_u64(payload)
119-
.context("invalid WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL value")?,
120-
),
121-
WGPEER_A_TX_BYTES => Self::TxBytes(
122-
parse_u64(payload)
123-
.context("invalid WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL value")?,
124-
),
121+
WGPEER_A_RX_BYTES => {
122+
Self::RxBytes(parse_u64(payload).context("invalid WGPEER_A_RX_BYTES value")?)
123+
}
124+
WGPEER_A_TX_BYTES => {
125+
Self::TxBytes(parse_u64(payload).context("invalid WGPEER_A_TX_BYTES value")?)
126+
}
125127
WGPEER_A_ALLOWEDIPS => {
126128
let error_msg = "failed to parse WGPEER_A_ALLOWEDIPS";
127129
let mut ips = Vec::new();
@@ -138,9 +140,11 @@ impl<'a, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'a T>> for WgPeerAttrs {
138140
Self::AllowedIps(ips)
139141
}
140142
WGPEER_A_PROTOCOL_VERSION => Self::ProtocolVersion(
141-
parse_u32(payload)
142-
.context("invalid WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL value")?,
143+
parse_u32(payload).context("invalid WGPEER_A_PROTOCOL_VERSION value")?,
143144
),
145+
WGPEER_A_FLAGS => {
146+
Self::Flags(parse_u32(payload).context("invalid WGPEER_A_FLAGS value")?)
147+
}
144148
kind => return Err(DecodeError::from(format!("invalid NLA kind: {}", kind))),
145149
})
146150
}

0 commit comments

Comments
 (0)