@ -56,6 +56,7 @@ type linuxRouter struct {
// Various feature checks for the network stack.
ipRuleAvailable bool // whether kernel was built with IP_MULTIPLE_TABLES
v6Available bool // whether the kernel supports IPv6
fwmaskWorks bool // whether we can use 'ip rule...fwmark <mark>/<mask>'
// ipPolicyPrefBase is the base priority at which ip rules are installed.
@ -142,6 +143,8 @@ func newUserspaceRouterAdvanced(logf logger.Logf, tunname string, netMon *netmon
r . logf ( "mwan3 on openWRT detected, switching policy base priority to 1300" )
}
r . v6Available = linuxfw . CheckIPv6 ( r . logf ) == nil
r . fixupWSLMTU ( )
return r , nil
@ -416,7 +419,7 @@ func (r *linuxRouter) UpdateMagicsockPort(port uint16, network string) error {
case "udp4" :
magicsockPort = & r . magicsockPortV4
case "udp6" :
if ! r . nfr . HasIPV6 ( ) {
if ! r . getV6Available ( ) {
return nil
}
magicsockPort = & r . magicsockPortV6
@ -523,7 +526,7 @@ func (r *linuxRouter) setNetfilterMode(mode preftype.NetfilterMode) error {
return fmt . Errorf ( "could not add magicsock port rule v4: %w" , err )
}
}
if r . magicsockPortV6 != 0 && r . nfr . HasIPV6 ( ) {
if r . magicsockPortV6 != 0 && r . getV6Available ( ) {
if err := r . nfr . AddMagicsockPortRule ( r . magicsockPortV6 , "udp6" ) ; err != nil {
return fmt . Errorf ( "could not add magicsock port rule v6: %w" , err )
}
@ -563,7 +566,7 @@ func (r *linuxRouter) setNetfilterMode(mode preftype.NetfilterMode) error {
return fmt . Errorf ( "could not add magicsock port rule v4: %w" , err )
}
}
if r . magicsockPortV6 != 0 && r . nfr . HasIPV6 ( ) {
if r . magicsockPortV6 != 0 && r . getV6Available ( ) {
if err := r . nfr . AddMagicsockPortRule ( r . magicsockPortV6 , "udp6" ) ; err != nil {
return fmt . Errorf ( "could not add magicsock port rule v6: %w" , err )
}
@ -602,6 +605,9 @@ func (r *linuxRouter) setNetfilterMode(mode preftype.NetfilterMode) error {
}
func ( r * linuxRouter ) getV6Available ( ) bool {
if r . netfilterMode == netfilterOff {
return r . v6Available
}
return r . nfr . HasIPV6 ( )
}