Allow disabling IPv6

Simply ignores any IPv6 addresses in the lease and doesn't offer them to the RPC
Fixes https://github.com/orgs/jetkvm/projects/7/views/1?pane=issue&itemId=122761546&issue=jetkvm%7Ckvm%7C685
This commit is contained in:
Marc Brooks 2025-08-26 21:19:51 -05:00
parent 3ec243255b
commit a67f641978
No known key found for this signature in database
GPG Key ID: 583A6AF2D6AE1DC6
3 changed files with 33 additions and 27 deletions

View File

@ -239,6 +239,10 @@ func (s *NetworkInterfaceState) update() (DhcpTargetState, error) {
ipv4Addresses = append(ipv4Addresses, addr.IP) ipv4Addresses = append(ipv4Addresses, addr.IP)
ipv4AddressesString = append(ipv4AddressesString, addr.IPNet.String()) ipv4AddressesString = append(ipv4AddressesString, addr.IPNet.String())
} else if addr.IP.To16() != nil { } else if addr.IP.To16() != nil {
if s.config.IPv6Mode.String == "disabled" {
continue
}
scopedLogger := s.l.With().Str("ipv6", addr.IP.String()).Logger() scopedLogger := s.l.With().Str("ipv6", addr.IP.String()).Logger()
// check if it's a link local address // check if it's a link local address
if addr.IP.IsLinkLocalUnicast() { if addr.IP.IsLinkLocalUnicast() {
@ -287,35 +291,37 @@ func (s *NetworkInterfaceState) update() (DhcpTargetState, error) {
} }
s.ipv4Addresses = ipv4AddressesString s.ipv4Addresses = ipv4AddressesString
if ipv6LinkLocal != nil { if s.config.IPv6Mode.String != "disabled" {
if s.ipv6LinkLocal == nil || s.ipv6LinkLocal.String() != ipv6LinkLocal.String() { if ipv6LinkLocal != nil {
scopedLogger := s.l.With().Str("ipv6", ipv6LinkLocal.String()).Logger() if s.ipv6LinkLocal == nil || s.ipv6LinkLocal.String() != ipv6LinkLocal.String() {
if s.ipv6LinkLocal != nil { scopedLogger := s.l.With().Str("ipv6", ipv6LinkLocal.String()).Logger()
scopedLogger.Info(). if s.ipv6LinkLocal != nil {
Str("old_ipv6", s.ipv6LinkLocal.String()). scopedLogger.Info().
Msg("IPv6 link local address changed") Str("old_ipv6", s.ipv6LinkLocal.String()).
} else { Msg("IPv6 link local address changed")
scopedLogger.Info().Msg("IPv6 link local address found") } else {
scopedLogger.Info().Msg("IPv6 link local address found")
}
s.ipv6LinkLocal = ipv6LinkLocal
changed = true
} }
s.ipv6LinkLocal = ipv6LinkLocal
changed = true
} }
} s.ipv6Addresses = ipv6Addresses
s.ipv6Addresses = ipv6Addresses
if len(ipv6Addresses) > 0 { if len(ipv6Addresses) > 0 {
// compare the addresses to see if there's a change // compare the addresses to see if there's a change
if s.ipv6Addr == nil || s.ipv6Addr.String() != ipv6Addresses[0].Address.String() { if s.ipv6Addr == nil || s.ipv6Addr.String() != ipv6Addresses[0].Address.String() {
scopedLogger := s.l.With().Str("ipv6", ipv6Addresses[0].Address.String()).Logger() scopedLogger := s.l.With().Str("ipv6", ipv6Addresses[0].Address.String()).Logger()
if s.ipv6Addr != nil { if s.ipv6Addr != nil {
scopedLogger.Info(). scopedLogger.Info().
Str("old_ipv6", s.ipv6Addr.String()). Str("old_ipv6", s.ipv6Addr.String()).
Msg("IPv6 address changed") Msg("IPv6 address changed")
} else { } else {
scopedLogger.Info().Msg("IPv6 address found") scopedLogger.Info().Msg("IPv6 address found")
}
s.ipv6Addr = &ipv6Addresses[0].Address
changed = true
} }
s.ipv6Addr = &ipv6Addresses[0].Address
changed = true
} }
} }

View File

@ -65,7 +65,7 @@ func (s *NetworkInterfaceState) IPv6LinkLocalAddress() string {
func (s *NetworkInterfaceState) RpcGetNetworkState() RpcNetworkState { func (s *NetworkInterfaceState) RpcGetNetworkState() RpcNetworkState {
ipv6Addresses := make([]RpcIPv6Address, 0) ipv6Addresses := make([]RpcIPv6Address, 0)
if s.ipv6Addresses != nil { if s.ipv6Addresses != nil && s.config.IPv6Mode.String != "disabled" {
for _, addr := range s.ipv6Addresses { for _, addr := range s.ipv6Addresses {
ipv6Addresses = append(ipv6Addresses, RpcIPv6Address{ ipv6Addresses = append(ipv6Addresses, RpcIPv6Address{
Address: addr.Prefix.String(), Address: addr.Prefix.String(),

View File

@ -419,7 +419,7 @@ export default function SettingsNetworkRoute() {
value={networkSettings.ipv6_mode} value={networkSettings.ipv6_mode}
onChange={e => handleIpv6ModeChange(e.target.value)} onChange={e => handleIpv6ModeChange(e.target.value)}
options={filterUnknown([ options={filterUnknown([
// { value: "disabled", label: "Disabled" }, { value: "disabled", label: "Disabled" },
{ value: "slaac", label: "SLAAC" }, { value: "slaac", label: "SLAAC" },
// { value: "dhcpv6", label: "DHCPv6" }, // { value: "dhcpv6", label: "DHCPv6" },
// { value: "slaac_and_dhcpv6", label: "SLAAC and DHCPv6" }, // { value: "slaac_and_dhcpv6", label: "SLAAC and DHCPv6" },