fix: add check if kernel supports WG (#993)

This commit is contained in:
Patryk
2025-12-18 16:25:31 +01:00
committed by GitHub
parent 5310cf17e6
commit 05b950fbb3
5 changed files with 24 additions and 1 deletions
@@ -2,6 +2,7 @@ package com.zaneschepke.wireguardautotunnel.core.tunnel
import com.wireguard.android.backend.Backend import com.wireguard.android.backend.Backend
import com.wireguard.android.backend.BackendException import com.wireguard.android.backend.BackendException
import com.wireguard.android.backend.WgQuickBackend
import com.wireguard.android.backend.Tunnel as WgTunnel import com.wireguard.android.backend.Tunnel as WgTunnel
import com.zaneschepke.wireguardautotunnel.R import com.zaneschepke.wireguardautotunnel.R
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
@@ -9,6 +10,7 @@ import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
import com.zaneschepke.wireguardautotunnel.di.Kernel import com.zaneschepke.wireguardautotunnel.di.Kernel
import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode import com.zaneschepke.wireguardautotunnel.domain.enums.BackendMode
import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus import com.zaneschepke.wireguardautotunnel.domain.enums.TunnelStatus
import com.zaneschepke.wireguardautotunnel.domain.events.KernelWireguardNotSupported
import com.zaneschepke.wireguardautotunnel.domain.events.DnsFailure import com.zaneschepke.wireguardautotunnel.domain.events.DnsFailure
import com.zaneschepke.wireguardautotunnel.domain.events.InvalidConfig import com.zaneschepke.wireguardautotunnel.domain.events.InvalidConfig
import com.zaneschepke.wireguardautotunnel.domain.events.KernelTunnelName import com.zaneschepke.wireguardautotunnel.domain.events.KernelTunnelName
@@ -55,6 +57,7 @@ constructor(
} }
override fun tunnelStateFlow(tunnelConfig: TunnelConfig): Flow<TunnelStatus> = callbackFlow { override fun tunnelStateFlow(tunnelConfig: TunnelConfig): Flow<TunnelStatus> = callbackFlow {
if (!WgQuickBackend.hasKernelSupport()) close(KernelWireguardNotSupported())
validateWireGuardInterfaceName(tunnelConfig.name).onFailure { close(it) } validateWireGuardInterfaceName(tunnelConfig.name).onFailure { close(it) }
val stateChannel = Channel<WgTunnel.State>() val stateChannel = Channel<WgTunnel.State>()
@@ -40,3 +40,7 @@ class UnknownError : BackendCoreException() {
class UapiUpdateFailed : BackendCoreException() { class UapiUpdateFailed : BackendCoreException() {
override val stringRes = R.string.active_tunnel_update_failed override val stringRes = R.string.active_tunnel_update_failed
} }
class KernelWireguardNotSupported : BackendCoreException() {
override val stringRes = R.string.kernel_wireguard_unsupported
}
@@ -3,7 +3,7 @@ package com.zaneschepke.wireguardautotunnel.viewmodel
import android.net.Uri import android.net.Uri
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.zaneschepke.wireguardautotunnel.R import com.wireguard.android.backend.WgQuickBackend
import com.zaneschepke.wireguardautotunnel.core.service.ServiceManager import com.zaneschepke.wireguardautotunnel.core.service.ServiceManager
import com.zaneschepke.wireguardautotunnel.core.tunnel.TunnelManager import com.zaneschepke.wireguardautotunnel.core.tunnel.TunnelManager
import com.zaneschepke.wireguardautotunnel.data.model.AppMode import com.zaneschepke.wireguardautotunnel.data.model.AppMode
@@ -34,6 +34,7 @@ import kotlinx.coroutines.flow.map
import org.amnezia.awg.config.BadConfigException import org.amnezia.awg.config.BadConfigException
import org.orbitmvi.orbit.ContainerHost import org.orbitmvi.orbit.ContainerHost
import org.orbitmvi.orbit.viewmodel.container import org.orbitmvi.orbit.viewmodel.container
import timber.log.Timber
import xyz.teamgravity.pin_lock_compose.PinManager import xyz.teamgravity.pin_lock_compose.PinManager
@HiltViewModel @HiltViewModel
@@ -164,6 +165,19 @@ constructor(
else StringValue.StringResource(R.string.root_accepted) else StringValue.StringResource(R.string.root_accepted)
postSideEffect(GlobalSideEffect.Snackbar(message)) postSideEffect(GlobalSideEffect.Snackbar(message))
if (!accepted) return@intent if (!accepted) return@intent
if (WgQuickBackend.hasKernelSupport())
Timber.i("Device supports kernel backend. WireGuard module is built in, switching to kernel backend.")
else {
Timber.e("Device does not support kernel backend!")
intent {
postSideEffect(
GlobalSideEffect.Snackbar(
StringValue.StringResource(R.string.kernel_wireguard_unsupported)
)
)
}
return@intent
}
} }
} }
settingsRepository.upsert(state.settings.copy(appMode = appMode)) settingsRepository.upsert(state.settings.copy(appMode = appMode))
+1
View File
@@ -324,5 +324,6 @@
<string name="donation_closing">Moim marzeniem jest praca nad tym projektem na pełen etat.</string> <string name="donation_closing">Moim marzeniem jest praca nad tym projektem na pełen etat.</string>
<string name="donation_signoff">Z wdzięcznością,</string> <string name="donation_signoff">Z wdzięcznością,</string>
<string name="google_donation_message">Niestety, ze względu na politykę Google, linki do darowizn nie są dozwolone w wersji tej aplikacji dostępnej w Google Play. Aby dowiedzieć się, gdzie można przekazać darowiznę, odwiedź strony projektu.</string> <string name="google_donation_message">Niestety, ze względu na politykę Google, linki do darowizn nie są dozwolone w wersji tej aplikacji dostępnej w Google Play. Aby dowiedzieć się, gdzie można przekazać darowiznę, odwiedź strony projektu.</string>
<string name="kernel_wireguard_unsupported">Kernel nie zawiera wsparcia dla WireGuard (brak modułu albo nie wbudowany w kernel)!</string>
<string name="delete_active_message">Nie można usunąć aktywnego tunelu.</string> <string name="delete_active_message">Nie można usunąć aktywnego tunelu.</string>
</resources> </resources>
+1
View File
@@ -377,6 +377,7 @@
<string name="delete_active_message">Cannot delete active tunnel.</string> <string name="delete_active_message">Cannot delete active tunnel.</string>
<string name="back">Back</string> <string name="back">Back</string>
<string name="configuration">Configuration</string> <string name="configuration">Configuration</string>
<string name="kernel_wireguard_unsupported">Kernel does not include WireGuard support (module missing or not built-in into kernel)!</string>
<string name="about">About</string> <string name="about">About</string>
<string name="resources">Resources</string> <string name="resources">Resources</string>
<string name="website">App website</string> <string name="website">App website</string>