Skip to content

Transmission Interest Checks Discrepency #3013

@boquan-fang

Description

@boquan-fang

Security issue notifications

Problem:

ApplicationSpace::transmission_interest() does not reflect the full set of components that Normal mode actually transmits. This means the has_transmission check in transmission.rs
can return false for the application space even when there are pending frames, leading to missed coalescing opportunities.

Application space:

impl<Config: endpoint::Config> transmission::interest::Provider for ApplicationSpace<Config> {
#[inline]
fn transmission_interest<Q: transmission::interest::Query>(
&self,
query: &mut Q,
) -> transmission::interest::Result {
self.ack_manager.transmission_interest(query)?;
self.ping.transmission_interest(query)?;
self.crypto_stream.transmission_interest(query)?;
self.recovery_manager.transmission_interest(query)?;
self.stream_manager.transmission_interest(query)?;
self.datagram_manager.transmission_interest(query)?;
self.dc_manager.transmission_interest(query)?;
Ok(())
}
}

Normal sending mode:

impl<Config: endpoint::Config> transmission::interest::Provider for Normal<'_, Config> {
fn transmission_interest<Q: transmission::interest::Query>(
&self,
query: &mut Q,
) -> transmission::interest::Result {
self.ack_manager.transmission_interest(query)?;
self.handshake_status.transmission_interest(query)?;
self.stream_manager.transmission_interest(query)?;
self.datagram_manager.transmission_interest(query)?;
self.local_id_registry.transmission_interest(query)?;
self.path_manager.transmission_interest(query)?;
self.crypto_stream.transmission_interest(query)?;
self.recovery_manager.transmission_interest(query)?;
self.path_manager
.active_path()
.transmission_interest(query)?;
self.ping.transmission_interest(query)?;
self.dc_manager.transmission_interest(query)?;
Ok(())
}
}

We need to think about a way to refactor the logic for detecting transmission interest, so that we know the transmission interest at the space level.

Need By Date:

Solution:

Refactor the sending logic.

Requirements / Acceptance Criteria:

The application space transmission check should check for every components.

Out of scope:

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions