使用logger尝试控制日志输出级别

This commit is contained in:
impact-eintr
2022-12-09 09:29:44 +08:00
parent 478d7cbc71
commit be9e2e53e4
8 changed files with 73 additions and 58 deletions

View File

@@ -20,6 +20,7 @@ import (
"sync"
"time"
"netstack/logger"
"netstack/sleep"
"netstack/tcpip"
)
@@ -149,7 +150,9 @@ func (e *linkAddrEntry) removeWaker(w *sleep.Waker) {
// add adds a k -> v mapping to the cache.
func (c *linkAddrCache) add(k tcpip.FullAddress, v tcpip.LinkAddress) {
log.Printf("add link cache: %v-%v", k, v)
logger.GetInstance().Info(logger.ETH, func() {
log.Printf("add link cache: %v-%v", k, v)
})
c.mu.Lock()
defer c.mu.Unlock()
@@ -203,7 +206,9 @@ func (c *linkAddrCache) makeAndAddEntry(k tcpip.FullAddress, v tcpip.LinkAddress
// get reports any known link address for k.
func (c *linkAddrCache) get(k tcpip.FullAddress, linkRes LinkAddressResolver,
localAddr tcpip.Address, linkEP LinkEndpoint, waker *sleep.Waker) (tcpip.LinkAddress, <-chan struct{}, *tcpip.Error) {
log.Println("在arp本地缓存中寻找", k)
logger.GetInstance().Info(logger.ETH, func() {
log.Println("在arp本地缓存中寻找", k)
})
if linkRes != nil {
if addr, ok := linkRes.ResolveStaticAddress(k.Addr); ok {
return addr, nil, nil

View File

@@ -3,6 +3,7 @@ package stack
import (
"log"
"netstack/ilist"
"netstack/logger"
"netstack/tcpip"
"netstack/tcpip/buffer"
"netstack/tcpip/header"
@@ -92,7 +93,6 @@ func (n *NIC) addAddressLocked(protocol tcpip.NetworkProtocolNumber, addr tcpip.
peb PrimaryEndpointBehavior, replace bool) (*referencedNetworkEndpoint, *tcpip.Error) {
netProto, ok := n.stack.networkProtocols[protocol]
if !ok {
log.Println("添加失败")
return nil, tcpip.ErrUnknownProtocol
}
@@ -101,7 +101,9 @@ func (n *NIC) addAddressLocked(protocol tcpip.NetworkProtocolNumber, addr tcpip.
if err != nil {
return nil, err
}
log.Printf("基于[%d]协议 为 #%d 网卡 添加网络层实现 并绑定地址到: %s\n", netProto.Number(), n.id, ep.ID().LocalAddress)
logger.GetInstance().Info(logger.IP, func() {
log.Printf("基于[%d]协议 为 #%d 网卡 添加网络层实现 并绑定地址到: %s\n", netProto.Number(), n.id, ep.ID().LocalAddress)
})
// 获取网络层端的id 其实就是ip地址
id := *ep.ID()
@@ -340,19 +342,23 @@ func (n *NIC) DeliverNetworkPacket(linkEP LinkEndpoint, remoteLinkAddr, localLin
return
}
src, dst := netProto.ParseAddresses(vv.First())
log.Printf("网卡[%v]准备从 [%s] 向 [%s] 分发数据: %v\n", linkEP.LinkAddress(), src, dst, func() []byte {
if len(vv.ToView()) > 64 {
return vv.ToView()[:64]
}
return vv.ToView()
}())
logger.GetInstance().Info(logger.ETH, func() {
log.Printf("网卡[%v]准备从 [%s] 向 [%s] 分发数据: %v\n", linkEP.LinkAddress(), src, dst, func() []byte {
if len(vv.ToView()) > 64 {
return vv.ToView()[:64]
}
return vv.ToView()
}())
})
// 根据网络协议和数据包的目的地址,找到网络端
// 然后将数据包分发给网络层
if ref := n.getRef(protocol, dst); ref != nil {
r := makeRoute(protocol, dst, src, linkEP.LinkAddress(), ref)
r.RemoteLinkAddress = remoteLinkAddr
log.Println("准备前往 IP 将本地和远端的MAC、IP 保存在路由中 以便协议栈使用",
r.LocalLinkAddress, r.RemoteLinkAddress, r.LocalAddress, r.RemoteAddress)
logger.GetInstance().Info(logger.ETH, func() {
log.Println("准备前往 IP 将本地和远端的MAC、IP 保存在路由中 以便协议栈使用",
r.LocalLinkAddress, r.RemoteLinkAddress, r.LocalAddress, r.RemoteAddress)
})
ref.ep.HandlePacket(&r, vv)
ref.decRef()
return
@@ -396,7 +402,9 @@ func (n *NIC) getRef(protocol tcpip.NetworkProtocolNumber, dst tcpip.Address) *r
n.mu.RLock()
if ref, ok := n.endpoints[id]; ok && ref.tryIncRef() {
log.Println("找到了目标网络端(绑定过的IP): ", id.LocalAddress)
logger.GetInstance().Info(logger.IP, func() {
log.Println("找到了目标网络端(绑定过的IP): ", id.LocalAddress)
})
n.mu.RUnlock()
return ref
}
@@ -453,7 +461,9 @@ func (n *NIC) DeliverTransportPacket(r *Route, protocol tcpip.TransportProtocolN
n.stack.stats.MalformedRcvdPackets.Increment()
return
}
log.Println("网卡准备分发传输层数据报", n.stack.transportProtocols, srcPort, dstPort)
logger.GetInstance().Info(logger.IP, func() {
log.Println("网卡准备分发传输层数据报", n.stack.transportProtocols, srcPort, dstPort)
})
id := TransportEndpointID{dstPort, r.LocalAddress, srcPort, r.RemoteAddress}
// 调用分流器根据传输层协议和传输层id分发数据报文
if n.demux.deliverPacket(r, protocol, vv, id) {
@@ -484,6 +494,7 @@ func (n *NIC) DeliverTransportControlPacket(local, remote tcpip.Address, net tcp
}
// ID 网卡的标识号
func (n *NIC) ID() tcpip.NICID {
return n.id
}

View File

@@ -2,6 +2,7 @@ package stack
import (
"log"
"netstack/logger"
"netstack/sleep"
"netstack/tcpip"
"netstack/tcpip/buffer"
@@ -389,7 +390,9 @@ func (s *Stack) FindRoute(id tcpip.NICID, localAddr, remoteAddr tcpip.Address,
r := makeRoute(netProto, ref.ep.ID().LocalAddress, remoteAddr, nic.linkEP.LinkAddress(), ref)
r.NextHop = s.routeTable[i].Gateway
log.Println(r.LocalLinkAddress, r.LocalAddress, r.RemoteLinkAddress, r.RemoteAddress, r.NextHop)
logger.GetInstance().Info(logger.IP, func() {
log.Println(r.LocalLinkAddress, r.LocalAddress, r.RemoteLinkAddress, r.RemoteAddress, r.NextHop)
})
return r, nil
}
@@ -466,7 +469,9 @@ func (s *Stack) RemoveWaker(nicid tcpip.NICID, addr tcpip.Address, waker *sleep.
// 最终调用 demuxer.registerEndpoint 函数来实现注册。
func (s *Stack) RegisterTransportEndpoint(nicID tcpip.NICID, netProtos []tcpip.NetworkProtocolNumber,
protocol tcpip.TransportProtocolNumber, id TransportEndpointID, ep TransportEndpoint) *tcpip.Error {
log.Println("往", nicID, "网卡注册新的传输端")
logger.GetInstance().Info(logger.UDP|logger.TCP, func() {
log.Println("往", nicID, "网卡注册新的传输端")
})
if nicID == 0 {
return s.demux.registerEndpoint(netProtos, protocol, id, ep) // 给协议栈的所有网卡注册传输端
}