mirror of https://github.com/jetkvm/kvm.git
Initialize USB ethernet
This commit is contained in:
parent
0317cccd7b
commit
91766550cd
|
@ -133,7 +133,7 @@ var defaultConfig = &Config{
|
||||||
NatEnable: false,
|
NatEnable: false,
|
||||||
},
|
},
|
||||||
UsbNetworkConfig: &network.UsbNetworkConfig{
|
UsbNetworkConfig: &network.UsbNetworkConfig{
|
||||||
IPv4Addr: "172.16.55.1",
|
IPv4Addr: "172.16.55.1/24",
|
||||||
IPv4Network: "172.16.55.0/24",
|
IPv4Network: "172.16.55.0/24",
|
||||||
},
|
},
|
||||||
DefaultLogLevel: "INFO",
|
DefaultLogLevel: "INFO",
|
||||||
|
@ -183,6 +183,10 @@ func LoadConfig() {
|
||||||
loadedConfig.NetworkConfig = defaultConfig.NetworkConfig
|
loadedConfig.NetworkConfig = defaultConfig.NetworkConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if loadedConfig.UsbNetworkConfig == nil {
|
||||||
|
loadedConfig.UsbNetworkConfig = defaultConfig.UsbNetworkConfig
|
||||||
|
}
|
||||||
|
|
||||||
config = &loadedConfig
|
config = &loadedConfig
|
||||||
|
|
||||||
logging.GetRootLogger().UpdateLogLevel(config.DefaultLogLevel)
|
logging.GetRootLogger().UpdateLogLevel(config.DefaultLogLevel)
|
||||||
|
|
|
@ -53,7 +53,7 @@ type NetworkConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type UsbNetworkConfig struct {
|
type UsbNetworkConfig struct {
|
||||||
IPv4Addr string `json:"ipv4_addr,omitempty" validate_type:"ipv4" default:"172.16.55.1" required:"true"`
|
IPv4Addr string `json:"ipv4_addr,omitempty" validate_type:"ipv4" default:"172.16.55.1/24" required:"true"`
|
||||||
IPv4Network string `json:"ipv4_network,omitempty" validate_type:"ipv4" default:"172.16.55.0/24" required:"true"`
|
IPv4Network string `json:"ipv4_network,omitempty" validate_type:"ipv4" default:"172.16.55.0/24" required:"true"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,10 @@ const (
|
||||||
procIpv4ForwardPath = "/proc/sys/net/ipv4/ip_forward"
|
procIpv4ForwardPath = "/proc/sys/net/ipv4/ip_forward"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (s *NetworkInterfaceState) UsbNetworkConfig() *UsbNetworkConfig {
|
||||||
|
return s.usbNetConfig
|
||||||
|
}
|
||||||
|
|
||||||
func (s *NetworkInterfaceState) reconfigureNat(wantNat bool, sourceAddr string) error {
|
func (s *NetworkInterfaceState) reconfigureNat(wantNat bool, sourceAddr string) error {
|
||||||
scopedLogger := s.l.With().Str("iface", s.interfaceName).Logger()
|
scopedLogger := s.l.With().Str("iface", s.interfaceName).Logger()
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,9 @@ type NetworkInterfaceState struct {
|
||||||
l *zerolog.Logger
|
l *zerolog.Logger
|
||||||
stateLock sync.Mutex
|
stateLock sync.Mutex
|
||||||
|
|
||||||
config *NetworkConfig
|
config *NetworkConfig
|
||||||
dhcpClient *udhcpc.DHCPClient
|
usbNetConfig *UsbNetworkConfig
|
||||||
|
dhcpClient *udhcpc.DHCPClient
|
||||||
|
|
||||||
defaultHostname string
|
defaultHostname string
|
||||||
currentHostname string
|
currentHostname string
|
||||||
|
@ -85,6 +86,7 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
|
||||||
},
|
},
|
||||||
cbConfigChange: opts.OnConfigChange,
|
cbConfigChange: opts.OnConfigChange,
|
||||||
config: opts.NetworkConfig,
|
config: opts.NetworkConfig,
|
||||||
|
usbNetConfig: opts.UsbNetworkConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
// create the dhcp client
|
// create the dhcp client
|
||||||
|
|
|
@ -1,5 +1,9 @@
|
||||||
package usbgadget
|
package usbgadget
|
||||||
|
|
||||||
|
const (
|
||||||
|
usbEthernetDevice = "usb0"
|
||||||
|
)
|
||||||
|
|
||||||
// Ethernet Control Model (ECM)
|
// Ethernet Control Model (ECM)
|
||||||
var ethernetEcmConfig = gadgetConfigItem{
|
var ethernetEcmConfig = gadgetConfigItem{
|
||||||
order: 4000,
|
order: 4000,
|
||||||
|
@ -43,3 +47,14 @@ var ethernetRndisConfig = gadgetConfigItem{
|
||||||
"dev_addr": "", // MAC address of JetKVM (randomly select)
|
"dev_addr": "", // MAC address of JetKVM (randomly select)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (u *UsbGadget) UsbEthernetEnabled() bool {
|
||||||
|
return u.isGadgetConfigItemEnabled("ecm") ||
|
||||||
|
u.isGadgetConfigItemEnabled("eem") ||
|
||||||
|
u.isGadgetConfigItemEnabled("ncm") ||
|
||||||
|
u.isGadgetConfigItemEnabled("rndis")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UsbGadget) UsbEthernetDevice() string {
|
||||||
|
return usbEthernetDevice
|
||||||
|
}
|
5
usb.go
5
usb.go
|
@ -18,6 +18,11 @@ func initUsbGadget() {
|
||||||
usbLogger,
|
usbLogger,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
err := initUsbEthernet(gadget)
|
||||||
|
if err != nil {
|
||||||
|
usbLogger.Err(err).Msg("Failed to initialize USB Ethernet")
|
||||||
|
}
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for {
|
for {
|
||||||
checkUSBState()
|
checkUSBState()
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package kvm
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/jetkvm/kvm/internal/usbgadget"
|
||||||
|
)
|
||||||
|
|
||||||
|
func initUsbEthernet(gadget *usbgadget.UsbGadget) error {
|
||||||
|
if !gadget.UsbEthernetEnabled() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
iface := gadget.UsbEthernetDevice()
|
||||||
|
ipv4addr := networkState.UsbNetworkConfig().IPv4Addr
|
||||||
|
|
||||||
|
scopedLogger := usbLogger.With().Str("iface", iface).Str("ipv4addr", ipv4addr).Logger()
|
||||||
|
scopedLogger.Info().Msg("enabling USB Ethernet")
|
||||||
|
|
||||||
|
if err := exec.Command("ip", "addr", "add", ipv4addr, "dev", iface).Run(); err != nil {
|
||||||
|
return fmt.Errorf("failed to flush table nat: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := exec.Command("ip", "link", "set", "dev", iface, "up").Run(); err != nil {
|
||||||
|
return fmt.Errorf("failed to flush table nat: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue