Files
netstack/tcpip/stack/transport_demuxer.go
2021-09-08 21:54:54 +08:00

42 lines
1.1 KiB
Go

package stack
import (
"sync"
"github.com/impact-eintr/netstack/tcpip"
)
// 解复用针对传输端点的数据包 在他们被网络层解析之后
// 它执行两级解复用 首先基于网络协议和传输协议 然后基于端点ID
type transportDemuxer struct {
protocol map[protocolIDs]*transportEndpoints
}
// 管理给定协议的所有端点
type transportEndpoints struct {
mu sync.RWMutex
endpoints map[TransportEndpointID]*transportEndpoints
}
// 网络层协议号和传输层协议号的组合 当作分流器的key值
type protocolIDs struct {
network tcpip.NetworkProtocolNumber
transport tcpip.TransportProtocolNumber
}
// 新建一个分流器
func newTransportDemuxer(stack *Stack) *transportDemuxer {
d := &transportDemuxer{
protocol: make(map[protocolIDs]*transportEndpoints),
}
for netProto := range stack.networkProtocols {
for proto := range stack.transportProtocols {
d.protocol[protocolIDs{netProto, proto}] = &transportEndpoints{
endpoints: make(map[TransportEndpointID]*transportEndpoints),
}
}
}
return d
}