Skip to content

Commit e540930

Browse files
authored
Fix v9 mac address parsing (#47)
1 parent cd56aa6 commit e540930

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ repository = "https://github.com/mikemiles-dev/netflow_parser/"
1212
[dependencies]
1313
nom = "7.1.3"
1414
nom-derive = "0.10.1"
15+
mac_address = "1.1.5"
1516
serde = { version = "1.0.166", features = ["derive"] }
1617

1718
[features]

src/variable_versions/common.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ impl DataNumber {
7070
let ip_addr = Ipv6Addr::from(taken);
7171
(i, FieldValue::Ip6Addr(ip_addr))
7272
}
73+
FieldDataType::MacAddr => {
74+
let (i, taken) = take(6 as usize)(remaining)?;
75+
let taken: &[u8; 6] = taken
76+
.try_into()
77+
.map_err(|_| NomErr::Error(NomError::new(remaining, ErrorKind::Fail)))?;
78+
79+
let mac_addr = mac_address::MacAddress::from(*taken).to_string();
80+
(i, FieldValue::MacAddr(mac_addr))
81+
}
7382
FieldDataType::DurationSeconds => {
7483
let (i, data_number) = DataNumber::parse(remaining, field_length, false)?;
7584
(
@@ -149,6 +158,7 @@ pub enum FieldValue {
149158
Duration(Duration),
150159
Ip4Addr(Ipv4Addr),
151160
Ip6Addr(Ipv6Addr),
161+
MacAddr(String),
152162
Vec(Vec<u8>),
153163
ProtocolType(ProtocolTypes),
154164
Unknown,
@@ -167,6 +177,7 @@ pub enum FieldDataType {
167177
DurationNanos,
168178
Ip4Addr,
169179
Ip6Addr,
180+
MacAddr,
170181
Vec,
171182
ProtocolType,
172183
Unknown,

src/variable_versions/v9_lookup.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ impl From<V9Field> for FieldDataType {
185185
53 => FieldDataType::UnsignedDataNumber,
186186
54 => FieldDataType::UnsignedDataNumber,
187187
55 => FieldDataType::UnsignedDataNumber,
188-
56 => FieldDataType::UnsignedDataNumber,
189-
57 => FieldDataType::UnsignedDataNumber,
188+
56 => FieldDataType::MacAddr,
189+
57 => FieldDataType::MacAddr,
190190
58 => FieldDataType::UnsignedDataNumber,
191191
60 => FieldDataType::UnsignedDataNumber,
192192
61 => FieldDataType::UnsignedDataNumber,
@@ -203,8 +203,8 @@ impl From<V9Field> for FieldDataType {
203203
77 => FieldDataType::UnsignedDataNumber,
204204
78 => FieldDataType::UnsignedDataNumber,
205205
79 => FieldDataType::UnsignedDataNumber,
206-
80 => FieldDataType::UnsignedDataNumber,
207-
81 => FieldDataType::UnsignedDataNumber,
206+
80 => FieldDataType::MacAddr,
207+
81 => FieldDataType::MacAddr,
208208
82 => FieldDataType::UnsignedDataNumber,
209209
83 => FieldDataType::UnsignedDataNumber,
210210
84 => FieldDataType::UnsignedDataNumber,

0 commit comments

Comments
 (0)