diff --git a/src/preferences/network/EthernetSettingsView.cpp b/src/preferences/network/EthernetSettingsView.cpp index 2dd956b9da..fac9f6274b 100644 --- a/src/preferences/network/EthernetSettingsView.cpp +++ b/src/preferences/network/EthernetSettingsView.cpp @@ -57,6 +57,8 @@ #include #include +#include + #include "AutoDeleter.h" @@ -338,6 +340,7 @@ EthernetSettingsView::_ApplyControlsToConfiguration() fCurrentSettings->SetAutoConfigure( strcmp(fTypeMenuField->Menu()->FindMarked()->Label(), "DHCP") == 0); + fCurrentSettings->fNameservers.MakeEmpty(); fCurrentSettings->fNameservers.AddItem(new BString( fPrimaryDNSTextControl->Text())); @@ -355,6 +358,8 @@ EthernetSettingsView::_SaveConfiguration() _ApplyControlsToConfiguration(); _SaveDNSConfiguration(); _SaveAdaptersConfiguration(); + if (fCurrentSettings->GetAutoConfigure()) + _TriggerAutoConfig(fCurrentSettings->GetName()); } @@ -431,6 +436,42 @@ EthernetSettingsView::_SaveAdaptersConfiguration() } +status_t +EthernetSettingsView::_TriggerAutoConfig(const char* device) +{ + BMessenger networkServer(kNetServerSignature); + if (!networkServer.IsValid()) { + (new BAlert("error", "The net_server needs to run for the auto " + "configuration!", "Ok"))->Go(); + return B_ERROR; + } + + BMessage message(kMsgConfigureInterface); + message.AddString("device", device); + BMessage address; + address.AddString("family", "inet"); + address.AddBool("auto config", true); + message.AddMessage("address", &address); + + BMessage reply; + status_t status = networkServer.SendMessage(&message, &reply); + if (status != B_OK) { + BString errorMessage("Sending auto-config message failed: "); + errorMessage << strerror(status); + (new BAlert("error", errorMessage.String(), "Ok"))->Go(); + return status; + } else if (reply.FindInt32("status", &status) == B_OK + && status != B_OK) { + BString errorMessage("Auto-configuring failed: "); + errorMessage << strerror(status); + (new BAlert("error", errorMessage.String(), "Ok"))->Go(); + return status; + } + + return B_OK; +} + + status_t EthernetSettingsView::_GetPath(const char* name, BPath& path) { diff --git a/src/preferences/network/EthernetSettingsView.h b/src/preferences/network/EthernetSettingsView.h index 7e2ffd9a70..3d26c9a913 100644 --- a/src/preferences/network/EthernetSettingsView.h +++ b/src/preferences/network/EthernetSettingsView.h @@ -45,6 +45,7 @@ private: void _SaveAdaptersConfiguration(); void _ApplyControlsToConfiguration(); status_t _GetPath(const char* name, BPath& path); + status_t _TriggerAutoConfig(const char* device); private: BButton* fApplyButton; diff --git a/src/preferences/network/Jamfile b/src/preferences/network/Jamfile index 49c6bed0fb..3bfdd75d27 100644 --- a/src/preferences/network/Jamfile +++ b/src/preferences/network/Jamfile @@ -1,6 +1,7 @@ SubDir HAIKU_TOP src preferences network ; UsePrivateHeaders shared ; +UseHeaders [ FDirName $(HAIKU_TOP) src servers net ] : true ; Preference Network : NetworkApp.cpp