fix: should reset kernel program outbound alive status every reload

This commit is contained in:
mzz2017
2023-03-02 21:28:30 +08:00
parent 1eaf4bb7f6
commit 0433f8d5da
2 changed files with 18 additions and 12 deletions

View File

@ -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{

View File

@ -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) {
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 {