pub struct SharedRawPacket {
pub packet: RawPacket,
/* private fields */
}Expand description
One raw IP datagram and every joined logical subscription that matched it.
The kernel datagram is captured once and the RawPacket uses the first
matching ID in deterministic ascending order as its primary subscription.
Use Self::matching_subscription_ids when overlapping logical
memberships need to be distinguished.
Fields§
§packet: RawPacketThe received complete IP datagram and primary matching subscription ID.
Implementations§
Sourcepub fn matching_subscription_ids(&self) -> &[SubscriptionId]
pub fn matching_subscription_ids(&self) -> &[SubscriptionId]
Returns every joined logical subscription matched by this datagram.
Examples found in repository?
examples/shared_raw_capture.rs (line 48)
8fn main() -> Result<(), Box<dyn Error>> {
9 let mut args = env::args().skip(1);
10 let Some(group) = args.next() else {
11 print_usage();
12 return Ok(());
13 };
14 let Some(interface) = args.next() else {
15 print_usage();
16 return Ok(());
17 };
18 let source = args.next();
19 if args.next().is_some() {
20 print_usage();
21 return Ok(());
22 }
23
24 let group: IpAddr = group.parse()?;
25 let interface: IpAddr = interface.parse()?;
26 let source_address = source.as_deref().map(str::parse).transpose()?;
27 let mut config = match source_address {
28 Some(source) => RawSubscriptionConfig::ssm_ip(group, source),
29 None => RawSubscriptionConfig::asm_ip(group),
30 };
31 config.interface = Some(interface);
32
33 let mut context = SharedRawContext::new();
34 let id = context.add_subscription(config)?;
35 context.join_subscription(id)?;
36
37 println!("shared raw capture ready");
38 println!(" group: {group}");
39 println!(" interface: {interface}");
40 println!(" source: {}", source.as_deref().unwrap_or("any"));
41 println!(" sub_id: {}", id.0);
42
43 loop {
44 if let Some(packet) = context.try_recv_any()? {
45 println!(
46 "received {} raw bytes matching {:?}",
47 packet.packet.datagram_len(),
48 packet.matching_subscription_ids()
49 );
50 } else {
51 thread::sleep(Duration::from_millis(10));
52 }
53 }
54}Trait Implementations§
Source§fn clone(&self) -> SharedRawPacket
fn clone(&self) -> SharedRawPacket
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more