1
1
// SPDX-License-Identifier: MIT
2
2
3
+ use std:: ffi:: { CStr , CString } ;
4
+
3
5
use anyhow:: Context ;
4
6
use byteorder:: { BigEndian , ByteOrder } ;
5
7
use derive_more:: { From , IsVariant } ;
@@ -54,7 +56,7 @@ pub enum PacketNla {
54
56
#[ from]
55
57
HwAddr ( HwAddr ) ,
56
58
Payload ( Vec < u8 > ) ,
57
- Prefix ( Vec < u8 > ) ,
59
+ Prefix ( CString ) ,
58
60
Uid ( u32 ) ,
59
61
Seq ( u32 ) ,
60
62
SeqGlobal ( u32 ) ,
@@ -78,7 +80,7 @@ impl Nla for PacketNla {
78
80
PacketNla :: IfIndexPhysOutDev ( _) => 4 ,
79
81
PacketNla :: HwAddr ( attr) => attr. value_len ( ) ,
80
82
PacketNla :: Payload ( vec) => vec. len ( ) ,
81
- PacketNla :: Prefix ( vec ) => vec . len ( ) ,
83
+ PacketNla :: Prefix ( cstring ) => cstring . as_bytes_with_nul ( ) . len ( ) ,
82
84
PacketNla :: Uid ( _) => 4 ,
83
85
PacketNla :: Seq ( _) => 4 ,
84
86
PacketNla :: SeqGlobal ( _) => 4 ,
@@ -124,7 +126,7 @@ impl Nla for PacketNla {
124
126
PacketNla :: IfIndexPhysOutDev ( value) => BigEndian :: write_u32 ( buffer, * value) ,
125
127
PacketNla :: HwAddr ( attr) => attr. emit_value ( buffer) ,
126
128
PacketNla :: Payload ( vec) => buffer. copy_from_slice ( vec) ,
127
- PacketNla :: Prefix ( vec ) => buffer. copy_from_slice ( vec ) ,
129
+ PacketNla :: Prefix ( cstring ) => buffer. copy_from_slice ( cstring . as_bytes_with_nul ( ) ) ,
128
130
PacketNla :: Uid ( value) => BigEndian :: write_u32 ( buffer, * value) ,
129
131
PacketNla :: Seq ( value) => BigEndian :: write_u32 ( buffer, * value) ,
130
132
PacketNla :: SeqGlobal ( value) => BigEndian :: write_u32 ( buffer, * value) ,
@@ -174,7 +176,11 @@ impl<'buffer, T: AsRef<[u8]> + ?Sized> Parseable<NlaBuffer<&'buffer T>> for Pack
174
176
PacketNla :: HwAddr ( HwAddr :: parse ( & buf) ?)
175
177
}
176
178
NFULA_PAYLOAD => PacketNla :: Payload ( payload. to_vec ( ) ) ,
177
- NFULA_PREFIX => PacketNla :: Prefix ( payload. to_vec ( ) ) ,
179
+ NFULA_PREFIX => PacketNla :: Prefix (
180
+ CStr :: from_bytes_with_nul ( payload)
181
+ . context ( "invalid NFULA_PREFIX value" ) ?
182
+ . to_owned ( ) ,
183
+ ) ,
178
184
NFULA_UID => PacketNla :: Uid ( parse_u32_be ( payload) . context ( "invalid NFULA_UID value" ) ?) ,
179
185
NFULA_SEQ => PacketNla :: Seq ( parse_u32_be ( payload) . context ( "invalid NFULA_SEQ value" ) ?) ,
180
186
NFULA_SEQ_GLOBAL => PacketNla :: SeqGlobal (
0 commit comments