diff --git a/src/config.cpp b/src/config.cpp index cc689f8b..66142a4b 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -203,11 +203,12 @@ void CConfig::Load (void) // Network m_bNetworkEnabled = m_Properties.GetNumber ("NetworkEnabled", 0) != 0; m_bNetworkDHCP = m_Properties.GetNumber ("NetworkDHCP", 0) != 0; - m_NetworkType = m_Properties.GetString ("NetworkType", "wifi"); + m_NetworkType = m_Properties.GetString ("NetworkType", "wlan"); m_NetworkHostname = m_Properties.GetString ("NetworkHostname", "MiniDexed"); m_INetworkIPAddress = m_Properties.GetIPAddress("NetworkIPAddress") != 0; m_INetworkSubnetMask = m_Properties.GetIPAddress("NetworkSubnetMask") != 0; m_INetworkDefaultGateway = m_Properties.GetIPAddress("NetworkDefaultGateway") != 0; + m_bSyslogEnabled = m_Properties.GetNumber ("SyslogEnabled", 0) != 0; m_INetworkDNSServer = m_Properties.GetIPAddress("NetworkDNSServer") != 0; const u8 *pSyslogServerIP = m_Properties.GetIPAddress ("NetworkSyslogServerIPAddress"); @@ -774,6 +775,11 @@ CIPAddress CConfig::GetNetworkDNSServer (void) const return m_INetworkDNSServer; } +bool CConfig::GetSyslogEnabled (void) const +{ + return m_bSyslogEnabled; +} + CIPAddress CConfig::GetNetworkSyslogServerIPAddress (void) const { return m_INetworkSyslogServerIPAddress; diff --git a/src/config.h b/src/config.h index 7af0bfc0..a30fb7c9 100644 --- a/src/config.h +++ b/src/config.h @@ -248,6 +248,7 @@ class CConfig // Configuration for MiniDexed CIPAddress GetNetworkSubnetMask (void) const; CIPAddress GetNetworkDefaultGateway (void) const; CIPAddress GetNetworkDNSServer (void) const; + bool GetSyslogEnabled (void) const; CIPAddress GetNetworkSyslogServerIPAddress (void) const; private: @@ -373,6 +374,7 @@ class CConfig // Configuration for MiniDexed CIPAddress m_INetworkSubnetMask; CIPAddress m_INetworkDefaultGateway; CIPAddress m_INetworkDNSServer; + bool m_bSyslogEnabled; CIPAddress m_INetworkSyslogServerIPAddress; }; diff --git a/src/minidexed.cpp b/src/minidexed.cpp index 57c9c86a..3f558634 100644 --- a/src/minidexed.cpp +++ b/src/minidexed.cpp @@ -359,7 +359,7 @@ bool CMiniDexed::Initialize (void) return false; } #endif - InitNetwork(); + InitNetwork(); // returns bool but we continue even if something goes wrong return true; } @@ -2201,15 +2201,13 @@ void CMiniDexed::UpdateNetwork() if (!m_pNet) return; - //add wired network check as well - //add wired network check as well bool bNetIsRunning = m_pNet->IsRunning(); if (m_pNetDevice->GetType() == NetDeviceTypeEthernet) bNetIsRunning &= m_pNetDevice->IsLinkUp(); else if (m_pNetDevice->GetType() == NetDeviceTypeWLAN) bNetIsRunning &= m_WPASupplicant.IsConnected(); - if (!m_bNetworkInit) + if (!m_bNetworkInit && bNetIsRunning) { m_bNetworkInit = true; CString IPString; @@ -2248,7 +2246,21 @@ void CMiniDexed::UpdateNetwork() { LOGPANIC ("Cannot publish mdns service"); } - + // syslog configuration + if (m_pConfig->GetSyslogEnabled()) + { + CIPAddress ServerIP = m_pConfig->GetNetworkSyslogServerIPAddress(); + if (ServerIP.IsSet () && !ServerIP.IsNull ()) + { + static const u16 usServerPort = 8514; // standard port is 514 + CString IPString; + ServerIP.Format (&IPString); + LOGNOTE ("Sending log messages to syslog server %s:%u", + (const char *) IPString, (unsigned) usServerPort); + + new CSysLogDaemon (m_pNet, ServerIP, usServerPort); + } + } m_bNetworkReady = true; } @@ -2287,18 +2299,17 @@ bool CMiniDexed::InitNetwork() TNetDeviceType NetDeviceType = NetDeviceTypeUnknown; - if (m_pConfig->GetNetworkEnabled () && (strcmp(m_pConfig->GetNetworkType(), "wifi") == 0)) + if (m_pConfig->GetNetworkEnabled () && (strcmp(m_pConfig->GetNetworkType(), "wlan") == 0)) { LOGNOTE("Initializing WLAN"); - - if (m_WLAN.Initialize() && m_WPASupplicant.Initialize()) + NetDeviceType = NetDeviceTypeWLAN; + if (m_WLAN.Initialize()) { - LOGNOTE("wlan and wpasupplicant initialized"); - NetDeviceType = NetDeviceTypeWLAN; - + LOGNOTE("WLAN initialized"); } else - LOGERR("Failed to initialize WLAN"); + LOGERR("Failed to initialize WLAN, maybe firmware files are missing?"); + return false; } else if (m_pConfig->GetNetworkEnabled () && (strcmp(m_pConfig->GetNetworkType(), "ethernet") == 0)) { @@ -2319,29 +2330,22 @@ bool CMiniDexed::InitNetwork() m_pConfig->GetNetworkHostname(), NetDeviceType ); - - if (!m_pNet->Initialize()) + if (!m_pNet->Initialize(false)) { LOGERR("Failed to initialize network subsystem"); delete m_pNet; m_pNet = nullptr; } - m_pNetDevice = CNetDevice::GetNetDevice(NetDeviceType); - - // syslog configuration - CIPAddress ServerIP = m_pConfig->GetNetworkSyslogServerIPAddress(); - if (ServerIP.IsSet () && !ServerIP.IsNull ()) + // WPASupplicant needs to be started after netdevice available + if (NetDeviceType == NetDeviceTypeWLAN) { - static const u16 usServerPort = 8514; // standard port is 514 - CString IPString; - ServerIP.Format (&IPString); - LOGNOTE ("Sending log messages to syslog server %s:%u", - (const char *) IPString, (unsigned) usServerPort); - - new CSysLogDaemon (m_pNet, ServerIP, usServerPort); + if (!m_WPASupplicant.Initialize()) { + // It seems no way to catch if config is missing unless circle provides it + // or we catch the faults in config file ourselves + LOGERR("Failed to initialize WPASupplicant, maybe wlan config is missing?"); + } } - } return m_pNet != nullptr; } diff --git a/src/minidexed.ini b/src/minidexed.ini index cff0eaed..d2233fe2 100644 --- a/src/minidexed.ini +++ b/src/minidexed.ini @@ -151,8 +151,8 @@ ProfileEnabled=0 # Network NetworkEnabled=0 NetworkDHCP=1 -# NetworkType ( wifi ; ethernet ) -NetworkType=wifi +# NetworkType ( wlan ; ethernet ) +NetworkType=wlan NetworkHostname=MiniDexed NetworkIPAddress=0 NetworkSubnetMask=0