! ! Add IPv6 Address, IPv6 DefaultRouter and IPv6 DNS to the ! netinstall dialog and pass it to the backend. ! ! The UI might want some review from a screen designer now ! and we mimght want to break long lines. This will allow a ! user to either use IPv4 (DHCP) or IPv6 (SLAAC) or manual ! configuration for both. In addition IPv6 (SLAAC) will also ! accept manual v6 configuration (which is currently needed ! for at least DNS). ! ! Review carefully and test IPv4 to still work;) ! ! Submitted by: bz ! Sponsored by: The FreeBSD Foundation ! Sponsored by: iXsystems ! Index: src-qt4/pc-sysinstaller/dialogSelectNet.cpp =================================================================== --- src-qt4/pc-sysinstaller/dialogSelectNet.cpp (revision 10769) +++ src-qt4/pc-sysinstaller/dialogSelectNet.cpp (working copy) @@ -16,7 +16,7 @@ #include "dialogSelectNet.h" #include "backend.h" -void dialogSelectNetServer::dialogInit(QString tmpNic, QString tmpIP, QString tmpNetmask, QString tmpDNS, QString tmpGate) +void dialogSelectNetServer::dialogInit(QString tmpNic, QString tmpIP, QString tmpNetmask, QString tmpDNS, QString tmpGate, QString tmpIPv6, QString tmpIPv6DNS, QString tmpIPv6Gate) { // Save our passed values @@ -25,6 +25,9 @@ Netmask = tmpNetmask; DNS = tmpDNS; Gate = tmpGate; + IPv6 = tmpIPv6; + IPv6DNS = tmpIPv6DNS; + IPv6Gate = tmpIPv6Gate; // Make sure we have enabled / disabled the right objects based on radio selection radioChangedSlot(); @@ -71,7 +74,7 @@ void dialogSelectNetServer::slotEnableNic() if ( usingRsync) { // Lets enable the NIC, and fetch our backup listing labelStatus->setText(tr("Enabling NIC...")); - Scripts::Backend::enableNic(Nic, IP, Netmask, DNS, Gate, false); + Scripts::Backend::enableNic(Nic, IP, Netmask, DNS, Gate, false, IPv6, IPv6Gate, IPv6DNS); Scripts::Backend::setupSSHKeys(Host, User, Port); comboMirror->clear(); labelStatus->setText(tr("Fetching backup list, this may take a while...")); @@ -86,7 +89,7 @@ void dialogSelectNetServer::slotEnableNic() } else { // Enable the NIC, and fetch mirror listing labelStatus->setText(tr("Enabling NIC...")); - Scripts::Backend::enableNic(Nic, IP, Netmask, DNS, Gate, true); + Scripts::Backend::enableNic(Nic, IP, Netmask, DNS, Gate, true, IPv6, IPv6Gate, IPv6DNS); radioInternet->setEnabled(true); comboMirror->setEnabled(false); Index: src-qt4/pc-sysinstaller/dialogSelectNet.h =================================================================== --- src-qt4/pc-sysinstaller/dialogSelectNet.h (revision 10769) +++ src-qt4/pc-sysinstaller/dialogSelectNet.h (working copy) @@ -15,7 +15,7 @@ class dialogSelectNetServer : public QDialog, priv usingRsync = false; } - void dialogInit(QString tmpNic, QString tmpIP, QString tmpNetmask, QString tmpDNS, QString tmpGate); + void dialogInit(QString tmpNic, QString tmpIP, QString tmpNetmask, QString tmpDNS, QString tmpGate, QString tmpIPv6, QString tmpIPv6DNS, QString tmpIPv6Gate); void setUsingRsync(QString rsyncHost, QString rsyncUser, QString rsyncPort); public slots: @@ -35,6 +35,9 @@ private slots: QString DNS; QString Gate; bool usingRsync; + QString IPv6; + QString IPv6DNS; + QString IPv6Gate; QString Host; QString User; QString Port; Index: src-qt4/pc-sysinstaller/backend.cpp =================================================================== --- src-qt4/pc-sysinstaller/backend.cpp (revision 10769) +++ src-qt4/pc-sysinstaller/backend.cpp (working copy) @@ -101,7 +101,7 @@ QStringList Backend::listRsyncBackups(QString Host return backupList; } -void Backend::enableNic(QString Nic, QString IP, QString NetMask, QString DNS, QString Gate, bool fetchMirrors) +void Backend::enableNic(QString Nic, QString IP, QString NetMask, QString DNS, QString Gate, bool fetchMirrors, QString IPv6, QString IPv6Gate, QString IPv6DNS) { QString line; QString Mirrors; @@ -110,7 +110,7 @@ QStringList Backend::listRsyncBackups(QString Host else Mirrors = "OFF"; - Process p(QStringList() << "enable-net" << Nic << IP << NetMask << DNS << Gate << Mirrors); + Process p(QStringList() << "enable-net" << Nic << IP << NetMask << DNS << Gate << Mirrors << IPv6 << IPv6Gate << IPv6DNS); while(p.state() == QProcess::Starting || p.state() == QProcess::Running) QCoreApplication::processEvents(); Index: src-qt4/pc-sysinstaller/sysinstaller.ui =================================================================== --- src-qt4/pc-sysinstaller/sysinstaller.ui (revision 10769) +++ src-qt4/pc-sysinstaller/sysinstaller.ui (working copy) @@ -989,7 +989,7 @@ color: rgb(14, 14, 14); - 9 + 2 @@ -2012,8 +2012,8 @@ background-color: qlineargradient(spread:pad, x1:0 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Welcome to PC-BSD! You may get started above, or click the Help button for more information on each screen. </p></body></html> +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Bitstream Vera Sans'; font-size:10pt;">Welcome to PC-BSD! You may get started above, or click the Help button for more information on each screen. </span></p></body></html> @@ -5385,8 +5385,8 @@ color: rgb(116, 160, 180); - - + + @@ -5560,15 +5560,25 @@ color: rgb(116, 160, 180); - Tip: PC-BSD is designed for the desktop, while FreeBSD makes a great choice for servers + PC-BSD - + + + :/PCBSD/images/pbidiricon.png:/PCBSD/images/pbidiricon.png + + + + 30 + 30 + + + true - - + + @@ -5742,11 +5752,11 @@ color: rgb(116, 160, 180); - PC-BSD + FreeBSD - :/PCBSD/images/pbidiricon.png:/PCBSD/images/pbidiricon.png + :/modules/images/freebsd.png:/modules/images/freebsd.png @@ -5754,13 +5764,65 @@ color: rgb(116, 160, 180); 30 - - true - - - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Vertical + + + + 20 + 5 + + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 5 + + + + + + @@ -5934,62 +5996,13 @@ color: rgb(116, 160, 180); - FreeBSD + Tip: PC-BSD is designed for the desktop, while FreeBSD makes a great choice for servers - - - :/modules/images/freebsd.png:/modules/images/freebsd.png + + true - - - 30 - 30 - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Vertical - - - QSizePolicy::Minimum - - - - 20 - 40 - - - - @@ -6286,19 +6299,6 @@ color: rgb(116, 160, 180); - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -6483,7 +6483,7 @@ color: rgb(116, 160, 180); - + 0 0 @@ -6493,296 +6493,6 @@ color: rgb(116, 160, 180); - - - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - 14 - 14 - 14 - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - 14 - 14 - 14 - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - 14 - 14 - 14 - - - - - - - 14 - 14 - 14 - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 217 - 230 - 235 - - - - - 255 - 255 - 255 - - - - - - - - - - - 75 - true - - - - background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0.7, stop:0 rgba(217, 230, 235, 230), stop:1 rgba(255, 255, 255, 255)); - - - Select your Installation Source: - - - Qt::AlignCenter - - - @@ -7155,13 +6865,28 @@ color: rgb(116, 160, 180); - 1 + 0 + + + 100 + 0 + + + + 2 + + + 2 + + + 2 + @@ -7522,6 +7247,12 @@ color: rgb(116, 160, 180); + + + 0 + 0 + + 000.000.000.000; @@ -7711,6 +7442,12 @@ color: rgb(116, 160, 180); + + + 0 + 0 + + 000.000.000.000; @@ -7900,6 +7637,12 @@ color: rgb(116, 160, 180); + + + 0 + 0 + + 000.000.000.000; @@ -7908,7 +7651,26 @@ color: rgb(116, 160, 180); - + + + + + + + + 0 + 0 + + + + 000.000.000.000; + + + Qt::AlignCenter + + + + @@ -8087,19 +7849,66 @@ color: rgb(116, 160, 180); - - - - 000.000.000.000; + + + + + 0 + 0 + - - Qt::AlignCenter + + 64 - - + + + + + 0 + 0 + + + + 64 + + + + + + + 0 + 0 + + + + 64 + + + + + + + IPv6 Address + + + + + + + IPv6 Gateway + + + + + + + IPv6 Nameserver + + + @@ -8108,6 +7917,296 @@ color: rgb(116, 160, 180); + + + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + 14 + 14 + 14 + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + 14 + 14 + 14 + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + 14 + 14 + 14 + + + + + + + 14 + 14 + 14 + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 217 + 230 + 235 + + + + + 255 + 255 + 255 + + + + + + + + + + + 75 + true + + + + background-color: qlineargradient(spread:pad, x1:0.5, y1:1, x2:0.5, y2:0.7, stop:0 rgba(217, 230, 235, 230), stop:1 rgba(255, 255, 255, 255)); + + + Select your Installation Source: + + + Qt::AlignCenter + + + Index: src-qt4/pc-sysinstaller/backend.h =================================================================== --- src-qt4/pc-sysinstaller/backend.h (revision 10769) +++ src-qt4/pc-sysinstaller/backend.h (working copy) @@ -40,7 +40,7 @@ class Process : public QProcess { class Backend { public: - static void enableNic(QString Nic, QString IP, QString NetMask, QString DNS, QString Gate, bool fetchMirrors); + static void enableNic(QString Nic, QString IP, QString NetMask, QString DNS, QString Gate, bool fetchMirrors, QString IPv6="", QString IPv6Gate="", QString IPv6DNS=""); static void createErrorReport(); static void setupSSHKeys(QString Host, QString User, QString Port); static QStringList upgradePartitions(); Index: src-qt4/pc-sysinstaller/sysinstaller.cpp =================================================================== --- src-qt4/pc-sysinstaller/sysinstaller.cpp (revision 10769) +++ src-qt4/pc-sysinstaller/sysinstaller.cpp (working copy) @@ -198,6 +198,7 @@ void SysInstaller::loadNics() // load drives comboSelectNic->clear(); comboSelectNic->addItem("AUTO-DHCP"); + comboSelectNic->addItem("IPv6-SLAAC"); QStringList sysNics = Scripts::Backend::networkDevices(); for (int i=0; i < sysNics.count(); ++i) { comboSelectNic->addItem(sysNics.at(i)); @@ -294,7 +295,10 @@ void SysInstaller::slotNext() lineIP->text(), \ lineNetmask->text(), \ lineDNS->text(), \ - lineDefaultRouter->text() ); + lineDefaultRouter->text(), \ + lineIPv6->text(), \ + lineIPv6DNS->text(), \ + lineIPv6DefaultRouter->text() ); connect(dsn, SIGNAL(saved(QString)), this, SLOT(slotGotNetworkUrl(QString))); dsn->setWindowModality(Qt::ApplicationModal); dsn->show(); @@ -548,25 +552,40 @@ void SysInstaller::slotChangedInstallSource() void SysInstaller::slotChangedNic() { + + /* The labels are always disabled. */ + textIP->setEnabled(false); + textNetmask->setEnabled(false); + textDNS->setEnabled(false); + textDefaultRouter->setEnabled(false); + textIPv6->setEnabled(false); + textIPv6DefaultRouter->setEnabled(false); + textIPv6DNS->setEnabled(false); if ( comboSelectNic->currentText() == "AUTO-DHCP" ) { lineIP->setEnabled(false); lineNetmask->setEnabled(false); lineDNS->setEnabled(false); lineDefaultRouter->setEnabled(false); - textIP->setEnabled(false); - textNetmask->setEnabled(false); - textDNS->setEnabled(false); - textDefaultRouter->setEnabled(false); + lineIPv6->setEnabled(false); + lineIPv6DefaultRouter->setEnabled(false); + lineIPv6DNS->setEnabled(false); + } else if ( comboSelectNic->currentText() == "IPv6-SLAAC" ) { + lineIP->setEnabled(false); + lineNetmask->setEnabled(false); + lineDNS->setEnabled(false); + lineDefaultRouter->setEnabled(false); + lineIPv6->setEnabled(true); + lineIPv6DefaultRouter->setEnabled(true); + lineIPv6DNS->setEnabled(true); } else { lineIP->setEnabled(true); lineNetmask->setEnabled(true); lineDNS->setEnabled(true); lineDefaultRouter->setEnabled(true); - textIP->setEnabled(false); - textNetmask->setEnabled(false); - textDNS->setEnabled(false); - textDefaultRouter->setEnabled(false); + lineIPv6->setEnabled(true); + lineIPv6DefaultRouter->setEnabled(true); + lineIPv6DNS->setEnabled(true); } } @@ -669,7 +688,17 @@ QStringList SysInstaller::getGlobalCfgSettings(QSt tmpList << ""; tmpList << "# Network Settings"; tmp = comboSelectNic->currentText(); - if ( comboSelectNic->currentText() != "AUTO-DHCP" ) + if ( comboSelectNic->currentText() == "AUTO-DHCP" ) + tmpList << "netDev=AUTO-DHCP"; + else if ( comboSelectNic->currentText() == "IPv6-SLAAC" ) { + tmpList << "netDev=IPv6-SLAAC"; + // We cannot rely on SLAAC to provide DNS for example. The same is true + // for DHCP but the worls seems to have forgotten... + tmpList << "netIPv6=" + lineIPv6->text(); + tmpList << "netIPv6NameServer=" + lineIPv6DNS->text(); + tmpList << "netIPv6DefaultRouter=" + lineIPv6DefaultRouter->text(); + } + else { if ( tmp.indexOf(":") > 0 ) tmp.truncate(tmp.indexOf(":")); @@ -678,14 +707,23 @@ QStringList SysInstaller::getGlobalCfgSettings(QSt tmpList << "netMask=" + lineNetmask->text(); tmpList << "netNameServer=" + lineDNS->text(); tmpList << "netDefaultRouter=" + lineDefaultRouter->text(); - } else { - tmpList << "netDev=AUTO-DHCP"; + tmpList << "netIPv6=" + lineIPv6->text(); + tmpList << "netIPv6NameServer=" + lineIPv6DNS->text(); + tmpList << "netIPv6DefaultRouter=" + lineIPv6DefaultRouter->text(); } // Setup the system nics when doing a fresh PC-BSD install as well if ( radioInstall->isChecked() && radioInstallPCBSD->isChecked() ) { tmp = comboSelectNic->currentText(); - if ( comboSelectNic->currentText() != "AUTO-DHCP" ) + if ( comboSelectNic->currentText() == "AUTO-DHCP" ) + tmpList << "netSaveDev=AUTO-DHCP"; + else if ( comboSelectNic->currentText() == "IPv6-SLAAC" ) { + tmpList << "netSaveDev=IPv6-SLAAC"; + tmpList << "netSaveIPv6=" + lineIPv6->text(); + tmpList << "netSaveIPv6NameServer=" + lineIPv6DNS->text(); + tmpList << "netSaveIPv6DefaultRouter=" + lineIPv6DefaultRouter->text(); + } + else { if ( tmp.indexOf(":") > 0 ) tmp.truncate(tmp.indexOf(":")); @@ -694,8 +732,9 @@ QStringList SysInstaller::getGlobalCfgSettings(QSt tmpList << "netSaveMask=" + lineNetmask->text(); tmpList << "netSaveNameServer=" + lineDNS->text(); tmpList << "netSaveDefaultRouter=" + lineDefaultRouter->text(); - } else { - tmpList << "netSaveDev=AUTO-DHCP"; + tmpList << "netSaveIPv6=" + lineIPv6->text(); + tmpList << "netSaveIPv6NameServer=" + lineIPv6DNS->text(); + tmpList << "netSaveIPv6DefaultRouter=" + lineIPv6DefaultRouter->text(); } } } else { @@ -703,8 +742,10 @@ QStringList SysInstaller::getGlobalCfgSettings(QSt tmpList << "installMedium=dvd"; // Doing PC-BSD install, setup DHCP on all nics - if ( radioInstallPCBSD->isChecked() ) + if ( radioInstallPCBSD->isChecked() ) { tmpList << "netSaveDev=AUTO-DHCP"; + //XXX IPv6 SLAAC? + } summaryList << tr("Installing From:") + " " + tr("DVD/USB"); }