Skip to content

Commit e5bc08c

Browse files
committed
netstack/icmp: logs, replies in goroutine
1 parent 4ae24d7 commit e5bc08c

File tree

3 files changed

+12
-18
lines changed

3 files changed

+12
-18
lines changed

intra/netstack/forwarders.go

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"encoding/binary"
2828
"fmt"
2929
"math/rand"
30-
"runtime/debug"
3130
"sync"
3231
"time"
3332

@@ -143,10 +142,6 @@ type processor struct {
143142

144143
// start starts the processor goroutine; thread-safe.
145144
func (p *processor) start(wg *sync.WaitGroup) {
146-
debug.SetPanicOnFault(true)
147-
// defer core.RecoverFn("ns.forwaders.start", p.e.notifyRestart)
148-
defer core.Recover(core.Exit11, "ns.forwarder.start")
149-
150145
defer wg.Done()
151146
defer p.sleeper.Done()
152147
for {
@@ -166,14 +161,10 @@ func (p *processor) start(wg *sync.WaitGroup) {
166161
// deliverPackets delivers packets to the endpoint; thread-safe.
167162
func (p *processor) deliverPackets() {
168163
testpanic := settings.PanicAtRandom.Load() && rand10pc()
169-
code := core.Exit11
170164
if testpanic {
171-
code = core.DontExit
165+
defer core.Recover(core.DontExit, "ns.forwarder.deliverPackets")
172166
}
173167

174-
debug.SetPanicOnFault(true)
175-
defer core.Recover(code, "ns.forwarder.deliverPackets")
176-
177168
p.mu.Lock()
178169
defer p.mu.Unlock()
179170
for p.pkts.Len() > 0 {
@@ -317,9 +308,8 @@ func (m *supervisor) queuePacket(pkt *stack.PacketBuffer, hasEthHeader bool) {
317308

318309
p.mu.Lock()
319310
defer p.mu.Unlock()
320-
pkt.IncRef()
321-
p.pkts.PushBack(pkt) // enqueue.
322-
m.ready[pIdx] = true // ready to deliver enqueued packets.
311+
p.pkts.PushBack(pkt.IncRef()) // enqueue.
312+
m.ready[pIdx] = true // ready to deliver enqueued packets.
323313
}
324314

325315
// stop stops all processor goroutines.

intra/netstack/icmp.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (f *icmpForwarder) reply4(id stack.TransportEndpointID, pkt *stack.PacketBu
9595
route, err := f.s.FindRoute(pkt.NICID, localAddr, l3.SourceAddress(), pkt.NetworkProtocolNumber, false /* multicastLoop */)
9696
if err != nil {
9797
log.W("icmp: v4: %s: no route on %v to %s <= %s", f.o, pkt.NICID, l3.DestinationAddress(), l3.SourceAddress())
98-
return false // not handled
98+
return // not handled
9999
}
100100

101101
// github.com/google/gvisor/blob/9b4a7aa00/pkg/tcpip/network/ipv6/icmp.go#L1180

intra/netstack/icmpecho.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,10 @@ func (r *icmpResponder) forward(h *icmpForwarder, pkt *stack.PacketBuffer, src,
162162
// and netstack/icmp/icmp.go:func (h *icmpForwarder) reply6
163163
local := dst.Addr().AsSlice()
164164
remote := src.Addr().AsSlice()
165-
if len(local) == 0 || len(remote) == 0 {
166-
log.W("icmp: responder: forward: (sz: %d) empty addr; %s => %s", pkt.Size(), src, dst)
165+
166+
notok := len(local) == 0 || len(remote) == 0
167+
logwv(notok)("icmp: responder: forward: (sz: %d) empty addr; %s => %s", pkt.Size(), src, dst)
168+
if notok {
167169
return false
168170
}
169171

@@ -174,9 +176,11 @@ func (r *icmpResponder) forward(h *icmpForwarder, pkt *stack.PacketBuffer, src,
174176

175177
switch pkt.NetworkProtocolNumber {
176178
case header.IPv4ProtocolNumber:
177-
return h.reply4(id, pkt)
179+
core.Gx("icmpecho.reply4", func() { h.reply4(id, pkt) })
180+
return true
178181
case header.IPv6ProtocolNumber:
179-
return h.reply6(id, pkt)
182+
core.Gx("icmpecho.reply6", func() { h.reply6(id, pkt) })
183+
return true
180184
}
181185

182186
log.W("icmp: responder: unsupported proto: %d; %s => %s",

0 commit comments

Comments
 (0)