mirror of
https://github.com/daeuniverse/dae.git
synced 2025-07-04 07:17:55 +07:00
fix: should reset kernel program outbound alive status every reload
This commit is contained in:
@ -29,7 +29,7 @@ type DialerGroup struct {
|
||||
selectionPolicy *DialerSelectionPolicy
|
||||
}
|
||||
|
||||
func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.Dialer, p DialerSelectionPolicy, aliveChangeCallback func(alive bool, networkType *dialer.NetworkType)) *DialerGroup {
|
||||
func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.Dialer, p DialerSelectionPolicy, aliveChangeCallback func(alive bool, networkType *dialer.NetworkType, isInit bool)) *DialerGroup {
|
||||
log := option.Log
|
||||
var aliveDnsTcp4DialerSet *dialer.AliveDialerSet
|
||||
var aliveDnsTcp6DialerSet *dialer.AliveDialerSet
|
||||
@ -54,8 +54,9 @@ func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.
|
||||
log, name, networkType, option.CheckTolerance, p.Policy, dialers,
|
||||
func(networkType *dialer.NetworkType) func(alive bool) {
|
||||
// Use the trick to copy a pointer of *dialer.NetworkType.
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType) }
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType, false) }
|
||||
}(networkType), true)
|
||||
aliveChangeCallback(true, networkType, true)
|
||||
|
||||
networkType = &dialer.NetworkType{
|
||||
L4Proto: consts.L4ProtoStr_TCP,
|
||||
@ -66,8 +67,9 @@ func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.
|
||||
log, name, networkType, option.CheckTolerance, p.Policy, dialers,
|
||||
func(networkType *dialer.NetworkType) func(alive bool) {
|
||||
// Use the trick to copy a pointer of *dialer.NetworkType.
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType) }
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType, false) }
|
||||
}(networkType), true)
|
||||
aliveChangeCallback(true, networkType, true)
|
||||
|
||||
networkType = &dialer.NetworkType{
|
||||
L4Proto: consts.L4ProtoStr_UDP,
|
||||
@ -78,8 +80,9 @@ func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.
|
||||
log, name, networkType, option.CheckTolerance, p.Policy, dialers,
|
||||
func(networkType *dialer.NetworkType) func(alive bool) {
|
||||
// Use the trick to copy a pointer of *dialer.NetworkType.
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType) }
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType, false) }
|
||||
}(networkType), true)
|
||||
aliveChangeCallback(true, networkType, true)
|
||||
|
||||
networkType = &dialer.NetworkType{
|
||||
L4Proto: consts.L4ProtoStr_UDP,
|
||||
@ -90,8 +93,9 @@ func NewDialerGroup(option *dialer.GlobalOption, name string, dialers []*dialer.
|
||||
log, name, networkType, option.CheckTolerance, p.Policy, dialers,
|
||||
func(networkType *dialer.NetworkType) func(alive bool) {
|
||||
// Use the trick to copy a pointer of *dialer.NetworkType.
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType) }
|
||||
return func(alive bool) { aliveChangeCallback(alive, networkType, false) }
|
||||
}(networkType), true)
|
||||
aliveChangeCallback(true, networkType, true)
|
||||
|
||||
if option.CheckDnsTcp {
|
||||
aliveDnsTcp4DialerSet = dialer.NewAliveDialerSet(log, name, &dialer.NetworkType{
|
||||
|
@ -23,13 +23,15 @@ func FormatL4Proto(l4proto uint8) string {
|
||||
return strconv.Itoa(int(l4proto))
|
||||
}
|
||||
|
||||
func (c *controlPlaneCore) OutboundAliveChangeCallback(outbound uint8) func(alive bool, networkType *dialer.NetworkType) {
|
||||
return func(alive bool, networkType *dialer.NetworkType) {
|
||||
c.log.WithFields(logrus.Fields{
|
||||
"alive": alive,
|
||||
"network": networkType.StringWithoutDns(),
|
||||
"outbound": c.outboundId2Name[outbound],
|
||||
}).Warnf("Outbound alive state changed, notify the kernel program.")
|
||||
func (c *controlPlaneCore) OutboundAliveChangeCallback(outbound uint8) func(alive bool, networkType *dialer.NetworkType, isInit bool) {
|
||||
return func(alive bool, networkType *dialer.NetworkType, isInit bool) {
|
||||
if !isInit {
|
||||
c.log.WithFields(logrus.Fields{
|
||||
"alive": alive,
|
||||
"network": networkType.StringWithoutDns(),
|
||||
"outbound": c.outboundId2Name[outbound],
|
||||
}).Warnf("Outbound alive state changed, notify the kernel program.")
|
||||
}
|
||||
|
||||
value := uint32(0)
|
||||
if alive {
|
||||
|
Reference in New Issue
Block a user