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,
|
||||
},
|
||||
UsbNetworkConfig: &network.UsbNetworkConfig{
|
||||
IPv4Addr: "172.16.55.1",
|
||||
IPv4Addr: "172.16.55.1/24",
|
||||
IPv4Network: "172.16.55.0/24",
|
||||
},
|
||||
DefaultLogLevel: "INFO",
|
||||
|
@ -183,6 +183,10 @@ func LoadConfig() {
|
|||
loadedConfig.NetworkConfig = defaultConfig.NetworkConfig
|
||||
}
|
||||
|
||||
if loadedConfig.UsbNetworkConfig == nil {
|
||||
loadedConfig.UsbNetworkConfig = defaultConfig.UsbNetworkConfig
|
||||
}
|
||||
|
||||
config = &loadedConfig
|
||||
|
||||
logging.GetRootLogger().UpdateLogLevel(config.DefaultLogLevel)
|
||||
|
|
|
@ -53,7 +53,7 @@ type NetworkConfig 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"`
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,10 @@ const (
|
|||
procIpv4ForwardPath = "/proc/sys/net/ipv4/ip_forward"
|
||||
)
|
||||
|
||||
func (s *NetworkInterfaceState) UsbNetworkConfig() *UsbNetworkConfig {
|
||||
return s.usbNetConfig
|
||||
}
|
||||
|
||||
func (s *NetworkInterfaceState) reconfigureNat(wantNat bool, sourceAddr string) error {
|
||||
scopedLogger := s.l.With().Str("iface", s.interfaceName).Logger()
|
||||
|
||||
|
|
|
@ -26,8 +26,9 @@ type NetworkInterfaceState struct {
|
|||
l *zerolog.Logger
|
||||
stateLock sync.Mutex
|
||||
|
||||
config *NetworkConfig
|
||||
dhcpClient *udhcpc.DHCPClient
|
||||
config *NetworkConfig
|
||||
usbNetConfig *UsbNetworkConfig
|
||||
dhcpClient *udhcpc.DHCPClient
|
||||
|
||||
defaultHostname string
|
||||
currentHostname string
|
||||
|
@ -85,6 +86,7 @@ func NewNetworkInterfaceState(opts *NetworkInterfaceOptions) (*NetworkInterfaceS
|
|||
},
|
||||
cbConfigChange: opts.OnConfigChange,
|
||||
config: opts.NetworkConfig,
|
||||
usbNetConfig: opts.UsbNetworkConfig,
|
||||
}
|
||||
|
||||
// create the dhcp client
|
||||
|
|
|
@ -1,5 +1,9 @@
|
|||
package usbgadget
|
||||
|
||||
const (
|
||||
usbEthernetDevice = "usb0"
|
||||
)
|
||||
|
||||
// Ethernet Control Model (ECM)
|
||||
var ethernetEcmConfig = gadgetConfigItem{
|
||||
order: 4000,
|
||||
|
@ -43,3 +47,14 @@ var ethernetRndisConfig = gadgetConfigItem{
|
|||
"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,
|
||||
)
|
||||
|
||||
err := initUsbEthernet(gadget)
|
||||
if err != nil {
|
||||
usbLogger.Err(err).Msg("Failed to initialize USB Ethernet")
|
||||
}
|
||||
|
||||
go func() {
|
||||
for {
|
||||
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