Skip to content

Commit

Permalink
Run cargo fmt
Browse files Browse the repository at this point in the history
Signed-off-by: Gris Ge <fge@redhat.com>
  • Loading branch information
cathay4t committed Jan 21, 2025
1 parent 7165c4f commit 6d2be50
Showing 1 changed file with 24 additions and 15 deletions.
39 changes: 24 additions & 15 deletions src/framed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@

use bytes::BytesMut;
use std::{
fmt::Debug, io, marker::PhantomData, mem::size_of, pin::Pin, task::{Context, Poll}
fmt::Debug,
io,
marker::PhantomData,
mem::size_of,
pin::Pin,
task::{Context, Poll},
};

use futures::{Sink, Stream};
Expand All @@ -13,8 +18,8 @@ use crate::{
sys::{AsyncSocket, SocketAddr},
};
use netlink_packet_core::{
NetlinkDeserializable, NetlinkMessage, NetlinkSerializable, NetlinkHeader,
NLMSG_OVERRUN, NetlinkPayload,
NetlinkDeserializable, NetlinkHeader, NetlinkMessage, NetlinkPayload,
NetlinkSerializable, NLMSG_OVERRUN,
};

/// Buffer overrun condition
Expand Down Expand Up @@ -68,24 +73,28 @@ where

*in_addr = match ready!(socket.poll_recv_from(cx, reader)) {
Ok(addr) => addr,
// When receiving messages in multicast mode (i.e. we subscribed to
// notifications), the kernel will not wait for us to read datagrams before
// sending more. The receive buffer has a finite size, so once it is full (no
// more message can fit in), new messages will be dropped and recv calls will
// return `ENOBUFS`.
// This needs to be handled for applications to resynchronize with the contents
// of the kernel if necessary.
// When receiving messages in multicast mode (i.e. we subscribed
// to notifications), the kernel will not wait
// for us to read datagrams before sending more.
// The receive buffer has a finite size, so once it is full (no
// more message can fit in), new messages will be dropped and
// recv calls will return `ENOBUFS`.
// This needs to be handled for applications to resynchronize
// with the contents of the kernel if necessary.
// We don't need to do anything special:
// - contents of the reader is still valid because we won't have partial messages
// in there anyways (large enough buffer)
// - contents of the socket's internal buffer is still valid because the kernel
// won't put partial data in it
// - contents of the reader is still valid because we won't have
// partial messages in there anyways (large enough buffer)
// - contents of the socket's internal buffer is still valid
// because the kernel won't put partial data in it
Err(e) if e.raw_os_error() == Some(ENOBUFS) => {
warn!("netlink socket buffer full");
let mut hdr = NetlinkHeader::default();
hdr.length = size_of::<NetlinkHeader>() as u32;
hdr.message_type = NLMSG_OVERRUN;
let msg = NetlinkMessage::new(hdr, NetlinkPayload::Overrun(Vec::new()));
let msg = NetlinkMessage::new(
hdr,
NetlinkPayload::Overrun(Vec::new()),
);
return Poll::Ready(Some((msg, SocketAddr::new(0, 0))));
}
Err(e) => {
Expand Down

0 comments on commit 6d2be50

Please sign in to comment.