|
@@ -40,13 +40,14 @@ type NetworkManager struct {
|
|
|
scanners *ScannerManager
|
|
scanners *ScannerManager
|
|
|
|
|
|
|
|
// State tracking
|
|
// State tracking
|
|
|
- eth0Carrier bool
|
|
|
|
|
- eth0HasIP bool
|
|
|
|
|
- wlan0HasIP bool
|
|
|
|
|
- currentState NetworkState
|
|
|
|
|
- lastOnlineTime time.Time
|
|
|
|
|
- apRunning bool
|
|
|
|
|
- eth0DhcpPid int
|
|
|
|
|
|
|
+ eth0Carrier bool
|
|
|
|
|
+ eth0HasIP bool
|
|
|
|
|
+ eth0DhcpRunning bool
|
|
|
|
|
+ wlan0HasIP bool
|
|
|
|
|
+ currentState NetworkState
|
|
|
|
|
+ lastOnlineTime time.Time
|
|
|
|
|
+ apRunning bool
|
|
|
|
|
+ eth0DhcpPid int
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// NewNetworkManager creates a new network manager
|
|
// NewNetworkManager creates a new network manager
|
|
@@ -131,8 +132,8 @@ func (nm *NetworkManager) tick() {
|
|
|
|
|
|
|
|
// Priority 1: eth0 (independent, always configure if carrier UP)
|
|
// Priority 1: eth0 (independent, always configure if carrier UP)
|
|
|
if nm.eth0Carrier {
|
|
if nm.eth0Carrier {
|
|
|
- if !nm.eth0HasIP {
|
|
|
|
|
- // Carrier UP but no IP - configure network
|
|
|
|
|
|
|
+ if !nm.eth0HasIP && !nm.eth0DhcpRunning {
|
|
|
|
|
+ // Carrier UP but no IP and DHCP not running - configure network
|
|
|
if nm.cfg.Network.Eth0.Static {
|
|
if nm.cfg.Network.Eth0.Static {
|
|
|
log.Println("[netmgr] eth0 carrier UP - configuring static IP")
|
|
log.Println("[netmgr] eth0 carrier UP - configuring static IP")
|
|
|
nm.configureEth0Static()
|
|
nm.configureEth0Static()
|
|
@@ -143,7 +144,7 @@ func (nm *NetworkManager) tick() {
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
// No eth0 carrier - stop eth0 DHCP/IP
|
|
// No eth0 carrier - stop eth0 DHCP/IP
|
|
|
- if nm.eth0HasIP {
|
|
|
|
|
|
|
+ if nm.eth0HasIP || nm.eth0DhcpRunning {
|
|
|
log.Println("[netmgr] eth0 carrier DOWN - stopping network")
|
|
log.Println("[netmgr] eth0 carrier DOWN - stopping network")
|
|
|
nm.stopEth0()
|
|
nm.stopEth0()
|
|
|
}
|
|
}
|
|
@@ -252,11 +253,8 @@ func (nm *NetworkManager) startEth0DHCP() {
|
|
|
// Stop any existing DHCP first
|
|
// Stop any existing DHCP first
|
|
|
nm.stopEth0DHCP()
|
|
nm.stopEth0DHCP()
|
|
|
|
|
|
|
|
- // Flush old IPs
|
|
|
|
|
- exec.Command("ip", "addr", "flush", "dev", eth0Interface).Run()
|
|
|
|
|
-
|
|
|
|
|
- // Bring interface up
|
|
|
|
|
- exec.Command("ifconfig", eth0Interface, "up").Run()
|
|
|
|
|
|
|
+ // Bring interface up (don't flush IP - udhcpc will handle it)
|
|
|
|
|
+ exec.Command("ip", "link", "set", eth0Interface, "up").Run()
|
|
|
|
|
|
|
|
// Start udhcpc
|
|
// Start udhcpc
|
|
|
pidFile := fmt.Sprintf("/var/run/udhcpc.%s.pid", eth0Interface)
|
|
pidFile := fmt.Sprintf("/var/run/udhcpc.%s.pid", eth0Interface)
|
|
@@ -266,12 +264,18 @@ func (nm *NetworkManager) startEth0DHCP() {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ nm.eth0DhcpRunning = true
|
|
|
time.Sleep(500 * time.Millisecond)
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
|
|
|
|
// Read PID
|
|
// Read PID
|
|
|
pidData, err := os.ReadFile(pidFile)
|
|
pidData, err := os.ReadFile(pidFile)
|
|
|
if err == nil {
|
|
if err == nil {
|
|
|
fmt.Sscanf(string(pidData), "%d", &nm.eth0DhcpPid)
|
|
fmt.Sscanf(string(pidData), "%d", &nm.eth0DhcpPid)
|
|
|
|
|
+ if nm.debug {
|
|
|
|
|
+ log.Printf("[netmgr] eth0 DHCP started (PID: %d)", nm.eth0DhcpPid)
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ log.Printf("[netmgr] Warning: Could not read udhcpc PID file: %v", err)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -279,7 +283,7 @@ func (nm *NetworkManager) configureEth0Static() {
|
|
|
nm.stopEth0DHCP()
|
|
nm.stopEth0DHCP()
|
|
|
|
|
|
|
|
// Bring interface up
|
|
// Bring interface up
|
|
|
- exec.Command("ifconfig", eth0Interface, "up").Run()
|
|
|
|
|
|
|
+ exec.Command("ip", "link", "set", eth0Interface, "up").Run()
|
|
|
|
|
|
|
|
// Configure IP
|
|
// Configure IP
|
|
|
if nm.cfg.Network.Eth0.Address != "" {
|
|
if nm.cfg.Network.Eth0.Address != "" {
|
|
@@ -320,6 +324,7 @@ func (nm *NetworkManager) stopEth0DHCP() {
|
|
|
}
|
|
}
|
|
|
exec.Command("killall", "-q", "udhcpc").Run()
|
|
exec.Command("killall", "-q", "udhcpc").Run()
|
|
|
nm.eth0DhcpPid = 0
|
|
nm.eth0DhcpPid = 0
|
|
|
|
|
+ nm.eth0DhcpRunning = false
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (nm *NetworkManager) stopEth0() {
|
|
func (nm *NetworkManager) stopEth0() {
|