mirror of https://github.com/jetkvm/kvm.git
Make USB network settings configurable
This commit is contained in:
parent
b512e4d817
commit
0317cccd7b
|
@ -96,6 +96,7 @@ type Config struct {
|
|||
UsbConfig *usbgadget.Config `json:"usb_config"`
|
||||
UsbDevices *usbgadget.Devices `json:"usb_devices"`
|
||||
NetworkConfig *network.NetworkConfig `json:"network_config"`
|
||||
UsbNetworkConfig *network.UsbNetworkConfig `json:"usb_network_config"`
|
||||
DefaultLogLevel string `json:"default_log_level"`
|
||||
}
|
||||
|
||||
|
@ -128,7 +129,13 @@ var defaultConfig = &Config{
|
|||
EthernetNcm: false,
|
||||
EthernetRndis: false,
|
||||
},
|
||||
NetworkConfig: &network.NetworkConfig{},
|
||||
NetworkConfig: &network.NetworkConfig{
|
||||
NatEnable: false,
|
||||
},
|
||||
UsbNetworkConfig: &network.UsbNetworkConfig{
|
||||
IPv4Addr: "172.16.55.1",
|
||||
IPv4Network: "172.16.55.0/24",
|
||||
},
|
||||
DefaultLogLevel: "INFO",
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,13 @@ type NetworkConfig struct {
|
|||
TimeSyncOrdering []string `json:"time_sync_ordering,omitempty" one_of:"http,ntp,ntp_dhcp,ntp_user_provided,ntp_fallback" default:"ntp,http"`
|
||||
TimeSyncDisableFallback null.Bool `json:"time_sync_disable_fallback,omitempty" default:"false"`
|
||||
TimeSyncParallel null.Int `json:"time_sync_parallel,omitempty" default:"4"`
|
||||
|
||||
NatEnable bool `json:"nat_enable,omitempty" default:"false" required:"true"`
|
||||
}
|
||||
|
||||
type UsbNetworkConfig struct {
|
||||
IPv4Addr string `json:"ipv4_addr,omitempty" validate_type:"ipv4" default:"172.16.55.1" required:"true"`
|
||||
IPv4Network string `json:"ipv4_network,omitempty" validate_type:"ipv4" default:"172.16.55.0/24" required:"true"`
|
||||
}
|
||||
|
||||
func (c *NetworkConfig) GetMDNSMode() *mdns.MDNSListenOptions {
|
||||
|
|
|
@ -13,13 +13,8 @@ const (
|
|||
func (s *NetworkInterfaceState) reconfigureNat(wantNat bool, sourceAddr string) error {
|
||||
scopedLogger := s.l.With().Str("iface", s.interfaceName).Logger()
|
||||
|
||||
if wantNat && s.IsOnline() {
|
||||
scopedLogger.Info().Msg("enabling NAT")
|
||||
err := enableNat(sourceAddr, s.interfaceName, s.IPv4String())
|
||||
if err != nil {
|
||||
s.l.Error().Err(err).Msg("failed to enable NAT")
|
||||
}
|
||||
} else {
|
||||
if !wantNat {
|
||||
if s.natEnabled {
|
||||
scopedLogger.Info().Msg("disabling NAT")
|
||||
err := disableNat()
|
||||
if err != nil {
|
||||
|
@ -29,6 +24,19 @@ func (s *NetworkInterfaceState) reconfigureNat(wantNat bool, sourceAddr string)
|
|||
return nil
|
||||
}
|
||||
|
||||
if wantNat && s.IsOnline() {
|
||||
scopedLogger.Info().Msg("enabling NAT")
|
||||
err := enableNat(sourceAddr, s.interfaceName, s.IPv4String())
|
||||
if err != nil {
|
||||
s.l.Error().Err(err).Msg("failed to enable NAT")
|
||||
}
|
||||
s.natEnabled = true
|
||||
return nil
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func enableNat(sourceAddr string, oIfName string, snatToAddr string) error {
|
||||
if err := os.WriteFile(procIpv4ForwardPath, []byte("1"), 0644); err != nil {
|
||||
return fmt.Errorf("failed to write %s: %w", procIpv4ForwardPath, err)
|
||||
|
|
|
@ -37,6 +37,8 @@ type NetworkInterfaceState struct {
|
|||
onInitialCheck func(state *NetworkInterfaceState)
|
||||
cbConfigChange func(config *NetworkConfig)
|
||||
|
||||
natEnabled bool
|
||||
|
||||
checked bool
|
||||
}
|
||||
|
||||
|
@ -50,6 +52,7 @@ type NetworkInterfaceOptions struct {
|
|||
OnDhcpLeaseChange func(lease *udhcpc.Lease)
|
||||
OnConfigChange func(config *NetworkConfig)
|
||||
NetworkConfig *NetworkConfig
|
||||
UsbNetworkConfig *UsbNetworkConfig
|
||||
}
|
||||
|
||||
func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceState, error) {
|
||||
|
@ -73,11 +76,11 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
|
|||
stateLock: sync.Mutex{},
|
||||
l: l,
|
||||
onStateChange: func(s *NetworkInterfaceState) {
|
||||
s.reconfigureNat(true, "172.16.55.0/24")
|
||||
s.reconfigureNat(opts.NetworkConfig.NatEnable, opts.UsbNetworkConfig.IPv4Network)
|
||||
opts.OnStateChange(s)
|
||||
},
|
||||
onInitialCheck: func(s *NetworkInterfaceState) {
|
||||
s.reconfigureNat(true, "172.16.55.0/24")
|
||||
s.reconfigureNat(opts.NetworkConfig.NatEnable, opts.UsbNetworkConfig.IPv4Network)
|
||||
opts.OnInitialCheck(s)
|
||||
},
|
||||
cbConfigChange: opts.OnConfigChange,
|
||||
|
|
|
@ -35,6 +35,7 @@ func initNetwork() error {
|
|||
DefaultHostname: GetDefaultHostname(),
|
||||
InterfaceName: NetIfName,
|
||||
NetworkConfig: config.NetworkConfig,
|
||||
UsbNetworkConfig: config.UsbNetworkConfig,
|
||||
Logger: networkLogger,
|
||||
OnStateChange: func(state *network.NetworkInterfaceState) {
|
||||
networkStateChanged()
|
||||
|
|
Loading…
Reference in New Issue