mirror of
https://github.com/yggdrasil-network/yggdrasil-go.git
synced 2025-04-28 22:25:07 +03:00
WIP have peer actors queue packets, temporarily a single simple FIFO queue with head drop
This commit is contained in:
parent
9834f222db
commit
945930aa2c
6 changed files with 91 additions and 338 deletions
|
@ -62,7 +62,7 @@ type linkInterface struct {
|
|||
keepAliveTimer *time.Timer // Fires to send keep-alive traffic
|
||||
stallTimer *time.Timer // Fires to signal that no incoming traffic (including keep-alive) has been seen
|
||||
closeTimer *time.Timer // Fires when the link has been idle so long we need to close it
|
||||
inSwitch bool // True if the switch is tracking this link
|
||||
isIdle bool // True if the peer actor knows the link is idle
|
||||
stalled bool // True if we haven't been receiving any response traffic
|
||||
unstalled bool // False if an idle notification to the switch hasn't been sent because we stalled (or are first starting up)
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ const (
|
|||
func (intf *linkInterface) notifySending(size int, isLinkTraffic bool) {
|
||||
intf.Act(&intf.writer, func() {
|
||||
if !isLinkTraffic {
|
||||
intf.inSwitch = false
|
||||
intf.isIdle = false
|
||||
}
|
||||
intf.sendTimer = time.AfterFunc(sendTime, intf.notifyBlockedSend)
|
||||
intf._cancelStallTimer()
|
||||
|
@ -311,7 +311,7 @@ func (intf *linkInterface) notifySent(size int, isLinkTraffic bool) {
|
|||
intf.sendTimer.Stop()
|
||||
intf.sendTimer = nil
|
||||
if !isLinkTraffic {
|
||||
intf._notifySwitch()
|
||||
intf._notifyIdle()
|
||||
}
|
||||
if size > 0 && intf.stallTimer == nil {
|
||||
intf.stallTimer = time.AfterFunc(stallTime, intf.notifyStalled)
|
||||
|
@ -320,15 +320,13 @@ func (intf *linkInterface) notifySent(size int, isLinkTraffic bool) {
|
|||
}
|
||||
|
||||
// Notify the switch that we're ready for more traffic, assuming we're not in a stalled state
|
||||
func (intf *linkInterface) _notifySwitch() {
|
||||
if !intf.inSwitch {
|
||||
func (intf *linkInterface) _notifyIdle() {
|
||||
if !intf.isIdle {
|
||||
if intf.stalled {
|
||||
intf.unstalled = false
|
||||
} else {
|
||||
intf.inSwitch = true
|
||||
intf.link.core.switchTable.Act(intf, func() {
|
||||
intf.link.core.switchTable._idleIn(intf.peer.port)
|
||||
})
|
||||
intf.isIdle = true
|
||||
intf.peer.Act(intf, intf.peer._handleIdle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -364,7 +362,7 @@ func (intf *linkInterface) notifyRead(size int) {
|
|||
}
|
||||
intf.stalled = false
|
||||
if !intf.unstalled {
|
||||
intf._notifySwitch()
|
||||
intf._notifyIdle()
|
||||
intf.unstalled = true
|
||||
}
|
||||
if size > 0 && intf.stallTimer == nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue