pub struct TcpLayer {
port_map: RwLock<BTreeMap<u16, Vec<Weak<TcpSocket>>>>,
stats: RwLock<NetworkLayerStats>,
self_weak: Weak<TcpLayer>,
}Expand description
TCP layer
Manages TCP port bindings and routes packets to sockets.
Fields§
§port_map: RwLock<BTreeMap<u16, Vec<Weak<TcpSocket>>>>Port-to-socket mapping for receiving packets
stats: RwLock<NetworkLayerStats>Statistics
self_weak: Weak<TcpLayer>Implementations§
Source§impl TcpLayer
impl TcpLayer
Sourcepub fn init(network_manager: &NetworkManager)
pub fn init(network_manager: &NetworkManager)
Initialize and register the TCP layer with NetworkManager
Registers with NetworkManager and registers itself with Ipv4Layer for protocol number 6 (TCP).
§Panics
Panics if Ipv4Layer is not registered (must be initialized first).
pub fn create_socket(&self) -> Arc<TcpSocket>
Sourcepub fn register_port(&self, port: u16, socket: Weak<TcpSocket>)
pub fn register_port(&self, port: u16, socket: Weak<TcpSocket>)
Register a socket for a specific port
Sourcepub fn unregister_socket(&self, port: u16, socket: &Weak<TcpSocket>)
pub fn unregister_socket(&self, port: u16, socket: &Weak<TcpSocket>)
Unregister a specific socket from a port
Only removes the given socket from the port’s socket list. The port entry itself is removed only when no sockets remain.
Sourcepub fn find_socket(
&self,
port: u16,
src_ip: Ipv4Address,
src_port: u16,
) -> Option<Arc<TcpSocket>>
pub fn find_socket( &self, port: u16, src_ip: Ipv4Address, src_port: u16, ) -> Option<Arc<TcpSocket>>
Find socket for a destination port
pub fn find_listening_socket(&self, port: u16) -> Option<Arc<TcpSocket>>
Sourcepub fn receive_segment(
&self,
src_ip: Ipv4Address,
header: TcpHeader,
data: &[u8],
)
pub fn receive_segment( &self, src_ip: Ipv4Address, header: TcpHeader, data: &[u8], )
Process incoming TCP segment
Source§impl TcpLayer
impl TcpLayer
Sourcepub fn receive_packet(
&self,
src_ip: Ipv4Address,
_dst_ip: Ipv4Address,
packet: &[u8],
) -> Result<(), SocketError>
pub fn receive_packet( &self, src_ip: Ipv4Address, _dst_ip: Ipv4Address, packet: &[u8], ) -> Result<(), SocketError>
Receive a TCP segment with IPv4 addressing information
Trait Implementations§
Source§impl NetworkLayer for TcpLayer
impl NetworkLayer for TcpLayer
Source§fn register_protocol(&self, _proto_num: u16, _handler: Arc<dyn NetworkLayer>)
fn register_protocol(&self, _proto_num: u16, _handler: Arc<dyn NetworkLayer>)
Register a protocol handler for this layer Read more
Source§fn send(
&self,
_packet: &[u8],
_context: &LayerContext,
_next_layers: &[Arc<dyn NetworkLayer>],
) -> Result<(), SocketError>
fn send( &self, _packet: &[u8], _context: &LayerContext, _next_layers: &[Arc<dyn NetworkLayer>], ) -> Result<(), SocketError>
Send a packet through this layer Read more
Source§fn receive(
&self,
packet: &[u8],
context: Option<&LayerContext>,
) -> Result<(), SocketError>
fn receive( &self, packet: &[u8], context: Option<&LayerContext>, ) -> Result<(), SocketError>
Receive and process a packet at this layer Read more
Source§fn stats(&self) -> NetworkLayerStats
fn stats(&self) -> NetworkLayerStats
Get layer statistics
Source§fn configure(
&self,
config: &SocketConfig,
next_layers: &[Arc<dyn NetworkLayer>],
) -> Result<(), SocketError>
fn configure( &self, config: &SocketConfig, next_layers: &[Arc<dyn NetworkLayer>], ) -> Result<(), SocketError>
Configure this layer with socket-specific parameters Read more