Skip to content

Commit 39ac2f6

Browse files
rvqlsharang
authored andcommitted
test: Support Linux cooked capture v2
1 parent c6aa6a4 commit 39ac2f6

File tree

1 file changed

+60
-47
lines changed

1 file changed

+60
-47
lines changed

agent/src/utils/test.rs

Lines changed: 60 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -49,58 +49,71 @@ impl Capture {
4949
0,
5050
)
5151
.unwrap();
52-
Some(meta)
52+
return Some(meta);
5353
}
54-
Linktype::LINUX_SLL => {
55-
let mut meta = MetaPacket::empty();
56-
meta.update(
57-
// remove 2 bytes to fake ethernet header
58-
&packet.data[2..],
59-
true,
60-
true,
61-
Duration::new(
62-
packet.header.ts.tv_sec as u64,
63-
packet.header.ts.tv_usec as u32 * 1000,
64-
),
65-
0,
66-
)
67-
.unwrap();
54+
_ => (),
55+
}
6856

69-
// fake mac with ip
70-
let mut data = (&packet.data[2..]).to_vec();
71-
(&mut data[0..12]).fill(0);
72-
match meta.lookup_key.dst_ip {
73-
IpAddr::V4(ip) => {
74-
data[0..4].copy_from_slice(&ip.octets());
75-
}
76-
IpAddr::V6(ip) => {
77-
data[0..6].copy_from_slice(&ip.octets()[0..6]);
78-
}
79-
}
80-
match meta.lookup_key.src_ip {
81-
IpAddr::V4(ip) => {
82-
data[6..10].copy_from_slice(&ip.octets());
83-
}
84-
IpAddr::V6(ip) => {
85-
data[6..12].copy_from_slice(&ip.octets()[0..6]);
86-
}
87-
}
88-
let mut meta = MetaPacket::empty();
89-
meta.update(
90-
data,
91-
true,
92-
true,
93-
Duration::new(
94-
packet.header.ts.tv_sec as u64,
95-
packet.header.ts.tv_usec as u32 * 1000,
96-
),
97-
0,
98-
)
99-
.unwrap();
100-
Some(meta)
57+
// change SLL header to look like ethernet header just before L3 header
58+
let mut data = match dl_type {
59+
// 2 bytes longer than ethernet header
60+
Linktype::LINUX_SLL => (&packet.data[2..]).to_vec(),
61+
Linktype::LINUX_SLL2 => {
62+
// 6 bytes longer, and L3 type is in first 2 bytes
63+
let mut data = (&packet.data[6..]).to_vec();
64+
data[12..14].copy_from_slice(&packet.data[0..2]);
65+
data
10166
}
10267
_ => unimplemented!(),
68+
};
69+
70+
let mut meta = MetaPacket::empty();
71+
meta.update(
72+
&data[..],
73+
true,
74+
true,
75+
Duration::new(
76+
packet.header.ts.tv_sec as u64,
77+
packet.header.ts.tv_usec as u32 * 1000,
78+
),
79+
0,
80+
)
81+
.unwrap();
82+
83+
let src_ip = meta.lookup_key.src_ip;
84+
let dst_ip = meta.lookup_key.dst_ip;
85+
// fake mac with ip
86+
(&mut data[0..12]).fill(0);
87+
match dst_ip {
88+
IpAddr::V4(ip) => {
89+
data[0..4].copy_from_slice(&ip.octets());
90+
}
91+
IpAddr::V6(ip) => {
92+
data[0..6].copy_from_slice(&ip.octets()[0..6]);
93+
}
10394
}
95+
match src_ip {
96+
IpAddr::V4(ip) => {
97+
data[6..10].copy_from_slice(&ip.octets());
98+
}
99+
IpAddr::V6(ip) => {
100+
data[6..12].copy_from_slice(&ip.octets()[0..6]);
101+
}
102+
}
103+
104+
let mut meta = MetaPacket::empty();
105+
meta.update(
106+
data,
107+
true,
108+
true,
109+
Duration::new(
110+
packet.header.ts.tv_sec as u64,
111+
packet.header.ts.tv_usec as u32 * 1000,
112+
),
113+
0,
114+
)
115+
.unwrap();
116+
Some(meta)
104117
}
105118
}
106119

0 commit comments

Comments
 (0)