Hostname, #271. rcS needs hostname -F /etc/hostname before ifup

git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@487 e54a6e83-5905-42d5-8d5c-058d10e6a962
This commit is contained in:
focus
2010-03-16 11:39:58 +00:00
parent ba1f0ceb83
commit 4049d9a584
10 changed files with 38 additions and 5 deletions

View File

@@ -569,6 +569,7 @@ networkmenu.broadcast Broadcast
networkmenu.dhcp DHCP
networkmenu.gateway default gateway
networkmenu.head Network Settings
networkmenu.hostname Hostname
networkmenu.ipaddress IP address
networkmenu.mount NFS/CIFS/FTPFS
networkmenu.nameserver name server

View File

@@ -205,9 +205,16 @@ char *netGetHostname( void )
void netSetHostname( char *host )
{
FILE * fp;
strcpy(hostbuf,host);
hostis=1;
sethostname(hostbuf,strlen(hostbuf)+1);
fp = fopen("/etc/hostname", "w");
if(fp != NULL) {
fprintf(fp, "%s\n", hostbuf);
fclose(fp);
}
}
void netSetNameserver(const char * const ip)

View File

@@ -368,6 +368,9 @@ bool setStaticAttributes(const std::string name, const bool automatic_start, con
bool setDhcpAttributes(const std::string name, const bool automatic_start)
{
std::map<std::string, std::string> attribute;
char hostname[100];
if(gethostname(hostname, sizeof(hostname)) == 0)
attribute["hostname"] = hostname;
return write_interface("/etc/network/interfaces", name, automatic_start, "inet", "dhcp", attribute);
}

View File

@@ -1874,18 +1874,23 @@ void CNeutrinoApp::InitNetworkSettings(CMenuWidget &networkSettings)
CSectionsdConfigNotifier* sectionsdConfigNotifier = new CSectionsdConfigNotifier;
CStringInputSMS * networkSettings_NtpServer = new CStringInputSMS(LOCALE_NETWORKMENU_NTPSERVER, &g_settings.network_ntpserver, 30, LOCALE_NETWORKMENU_NTPSERVER_HINT1, LOCALE_NETWORKMENU_NTPSERVER_HINT2, "abcdefghijklmnopqrstuvwxyz0123456789-. ", sectionsdConfigNotifier);
CStringInput * networkSettings_NtpRefresh = new CStringInput(LOCALE_NETWORKMENU_NTPREFRESH, &g_settings.network_ntprefresh, 3,LOCALE_NETWORKMENU_NTPREFRESH_HINT1, LOCALE_NETWORKMENU_NTPREFRESH_HINT2 , "0123456789 ", sectionsdConfigNotifier);
CStringInputSMS * networkSettings_Hostname = new CStringInputSMS(LOCALE_NETWORKMENU_HOSTNAME, &networkConfig.hostname, 30, LOCALE_NETWORKMENU_NTPSERVER_HINT1, LOCALE_NETWORKMENU_NTPSERVER_HINT2, "abcdefghijklmnopqrstuvwxyz0123456789-. ");
CMenuForwarder *m0 = new CMenuForwarder(LOCALE_NETWORKMENU_SETUPNOW, true, NULL, this, "network", CRCInput::RC_red, NEUTRINO_ICON_BUTTON_RED);
CMenuForwarder *m1 = new CMenuForwarder(LOCALE_NETWORKMENU_IPADDRESS , networkConfig.inet_static, networkConfig.address , networkSettings_NetworkIP );
CMenuForwarder *m2 = new CMenuForwarder(LOCALE_NETWORKMENU_NETMASK , networkConfig.inet_static, networkConfig.netmask , networkSettings_NetMask );
CMenuForwarder *m3 = new CMenuForwarder(LOCALE_NETWORKMENU_BROADCAST , networkConfig.inet_static, networkConfig.broadcast , networkSettings_Broadcast );
CMenuForwarder *m4 = new CMenuForwarder(LOCALE_NETWORKMENU_GATEWAY , networkConfig.inet_static, networkConfig.gateway , networkSettings_Gateway );
CMenuForwarder *m5 = new CMenuForwarder(LOCALE_NETWORKMENU_NAMESERVER, networkConfig.inet_static, networkConfig.nameserver, networkSettings_NameServer);
CMenuForwarder *m6 = new CMenuForwarder( LOCALE_NETWORKMENU_NTPSERVER, true , g_settings.network_ntpserver, networkSettings_NtpServer );
CMenuForwarder *m7 = new CMenuForwarder( LOCALE_NETWORKMENU_NTPREFRESH, true , g_settings.network_ntprefresh, networkSettings_NtpRefresh );
CMenuForwarder *m6 = new CMenuForwarder(LOCALE_NETWORKMENU_NTPSERVER, true , g_settings.network_ntpserver, networkSettings_NtpServer );
CMenuForwarder *m7 = new CMenuForwarder(LOCALE_NETWORKMENU_NTPREFRESH, true , g_settings.network_ntprefresh, networkSettings_NtpRefresh );
CDHCPNotifier* dhcpNotifier = new CDHCPNotifier(m1,m2,m3,m4,m5);
CMenuForwarder *m8 = new CMenuForwarder(LOCALE_NETWORKMENU_HOSTNAME, !networkConfig.inet_static, networkConfig.hostname, networkSettings_Hostname);
CDHCPNotifier* dhcpNotifier = new CDHCPNotifier(m1,m2,m3,m4,m5, m8);
network_automatic_start = networkConfig.automatic_start ? 1 : 0;
CMenuOptionChooser* oj = new CMenuOptionChooser(LOCALE_NETWORKMENU_SETUPONSTARTUP, &network_automatic_start, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true);
@@ -1903,6 +1908,7 @@ void CNeutrinoApp::InitNetworkSettings(CMenuWidget &networkSettings)
network_dhcp = networkConfig.inet_static ? 0 : 1;
oj = new CMenuOptionChooser(LOCALE_NETWORKMENU_DHCP, &network_dhcp, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, dhcpNotifier);
networkSettings.addItem(oj);
networkSettings.addItem(m8);
networkSettings.addItem(GenericMenuSeparatorLine);
networkSettings.addItem( m1);

View File

@@ -45,6 +45,8 @@ void CNetworkConfig::init_vars(void)
char router[16];
char ip[16];
hostname = netGetHostname();
netGetDefaultRoute(router);
gateway = router;
netGetIP((char *) "eth0", ip, mask, _broadcast);
@@ -61,6 +63,7 @@ void CNetworkConfig::copy_to_orig(void)
orig_broadcast = broadcast;
orig_gateway = gateway;
orig_inet_static = inet_static;
orig_hostname = hostname;
}
bool CNetworkConfig::modified_from_orig(void)
@@ -71,6 +74,7 @@ bool CNetworkConfig::modified_from_orig(void)
(orig_netmask != netmask ) ||
(orig_broadcast != broadcast ) ||
(orig_gateway != gateway ) ||
(orig_hostname != hostname ) ||
(orig_inet_static != inet_static )
);
}
@@ -79,6 +83,9 @@ void CNetworkConfig::commitConfig(void)
{
if (modified_from_orig())
{
if(orig_hostname != hostname)
netSetHostname((char *) hostname.c_str());
copy_to_orig();
if (inet_static)

View File

@@ -33,6 +33,7 @@ class CNetworkConfig
std::string orig_broadcast;
std::string orig_gateway;
std::string orig_nameserver;
std::string orig_hostname;
bool orig_inet_static;
void copy_to_orig(void);
@@ -46,6 +47,7 @@ class CNetworkConfig
std::string broadcast;
std::string gateway;
std::string nameserver;
std::string hostname;
bool inet_static;
CNetworkConfig(void);

View File

@@ -767,6 +767,7 @@ typedef enum {
LOCALE_NETWORKMENU_DHCP,
LOCALE_NETWORKMENU_GATEWAY,
LOCALE_NETWORKMENU_HEAD,
LOCALE_NETWORKMENU_HOSTNAME,
LOCALE_NETWORKMENU_IPADDRESS,
LOCALE_NETWORKMENU_MOUNT,
LOCALE_NETWORKMENU_NAMESERVER,

View File

@@ -767,6 +767,7 @@ const char *locale_real_names[] = {
"networkmenu.dhcp",
"networkmenu.gateway",
"networkmenu.head",
"networkmenu.hostname",
"networkmenu.ipaddress",
"networkmenu.mount",
"networkmenu.nameserver",

View File

@@ -206,13 +206,14 @@ bool CTP_scanNotifier::changeNotify(const neutrino_locale_t, void * Data)
}
return true;
}
CDHCPNotifier::CDHCPNotifier( CMenuForwarder* a1, CMenuForwarder* a2, CMenuForwarder* a3, CMenuForwarder* a4, CMenuForwarder* a5)
CDHCPNotifier::CDHCPNotifier( CMenuForwarder* a1, CMenuForwarder* a2, CMenuForwarder* a3, CMenuForwarder* a4, CMenuForwarder* a5, CMenuForwarder* a6)
{
toDisable[0] = a1;
toDisable[1] = a2;
toDisable[2] = a3;
toDisable[3] = a4;
toDisable[4] = a5;
toEnable[0] = a6;
}
@@ -221,6 +222,8 @@ bool CDHCPNotifier::changeNotify(const neutrino_locale_t, void * data)
CNeutrinoApp::getInstance()->networkConfig.inet_static = ((*(int*)(data)) == 0);
for(int x=0;x<5;x++)
toDisable[x]->setActive(CNeutrinoApp::getInstance()->networkConfig.inet_static);
toEnable[0]->setActive(!CNeutrinoApp::getInstance()->networkConfig.inet_static);
return true;
}

View File

@@ -82,10 +82,12 @@ class CDHCPNotifier : public CChangeObserver
{
private:
CMenuForwarder* toDisable[5];
CMenuForwarder* toEnable[1];
public:
CDHCPNotifier( CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*);
CDHCPNotifier( CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*, CMenuForwarder*);
bool changeNotify(const neutrino_locale_t, void * data);
};
class CStreamingNotifier : public CChangeObserver
{
private: