Files
netstack/tcpip/stack/route.go

40 lines
1.1 KiB
Go

package stack
import "netstack/tcpip"
// 贯穿整个协议栈的路由,也就是在链路层和网络层都可以路由
// 如果目标地址是链路层地址,那么在链路层路由,
// 如果目标地址是网络层地址,那么在网络层路由。
type Route struct {
// 远端网络层地址 ipv4 or ipv6 地址
RemoteAddress tcpip.Address
// 远端网卡MAC地址
RemoteLinkAddress tcpip.LinkAddress
// 本地网络层地址 ipv4 or ipv6 地址
LocalAddress tcpip.Address
// 本地网卡MAC地址
LocalLinkAddress tcpip.LinkAddress
// 下一跳网络层地址
NextHop tcpip.Address
// 网络层协议号
NetProto tcpip.NetworkProtocolNumber
// 相关的网络终端
ref *referencedNetworkEndpoint
}
// 根据参数新建一个路由,并关联一个网络层端
func makeRoute(netProto tcpip.NetworkProtocolNumber, localAddr, remoteAddr tcpip.Address,
localLinkAddr tcpip.LinkAddress, ref *referencedNetworkEndpoint) Route {
return Route{
NetProto: netProto,
LocalAddress: localAddr,
LocalLinkAddress: localLinkAddr,
RemoteAddress: remoteAddr,
ref: ref,
}
}