handleLocal开启本地环回

This commit is contained in:
impact-eintr
2022-12-30 09:38:10 +08:00
parent 162cca1079
commit e7e3da0c62
2 changed files with 5 additions and 14 deletions

View File

@@ -9,7 +9,6 @@ import (
"netstack/tcpip"
"netstack/tcpip/header"
"netstack/tcpip/link/fdbased"
"netstack/tcpip/link/loopback"
"netstack/tcpip/link/tuntap"
"netstack/tcpip/network/arp"
"netstack/tcpip/network/ipv4"
@@ -95,22 +94,15 @@ func main() {
MTU: 1500,
Address: tcpip.LinkAddress(maddr),
ResolutionRequired: true,
HandleLocal: true,
})
loopbackLinkID := loopback.New()
// 新建相关协议的协议栈
s := stack.New([]string{ipv4.ProtocolName, arp.ProtocolName},
[]string{tcp.ProtocolName, udp.ProtocolName}, stack.Options{})
// 新建抽象的网卡
_ = loopbackLinkID
if err := s.CreateNamedNIC(1, "lo", loopbackLinkID); err != nil {
log.Fatal(err)
}
_ = linkID
if err := s.CreateNamedNIC(2, "fdbase", linkID); err != nil {
if err := s.CreateNamedNIC(1, "eth0", linkID); err != nil {
log.Fatal(err)
}

View File

@@ -1,7 +1,6 @@
package fdbased
import (
"fmt"
"log"
"netstack/logger"
"netstack/tcpip"
@@ -123,13 +122,13 @@ func (e *endpoint) WritePacket(r *stack.Route, hdr buffer.Prependable,
// 如果路由信息中有配置源MAC地址那么使用该地址
// 如果没有,则使用本网卡的地址
if r.LocalLinkAddress != "" {
ethHdr.SrcAddr = r.LocalLinkAddress // 源网卡地址 说明这是一个转发报文
ethHdr.SrcAddr = r.LocalLinkAddress
} else {
ethHdr.SrcAddr = e.addr // 说明这是一个原始报文
ethHdr.SrcAddr = e.addr
}
eth.Encode(ethHdr) // 将以太帧信息作为报文头编入
logger.GetInstance().Info(logger.ETH, func() {
log.Println("链路层写回以太报文 ", r.LocalAddress, " to ", r.RemoteAddress)
log.Println(e.handleLocal, r.LocalLinkAddress, "链路层写回以太报文 ", r.LocalAddress, " to ", r.RemoteAddress)
})
// 写入网卡中
if payload.Size() == 0 {