Add support for IPv6 network setting
Add IPv6 setting in network setting page.
- Add IPv6 domain name, DNS servers, NTP servers enable/disable
- Add DHCPv6 enable/disable
- Add IPv6 default gateway
- Add IPv6 addresses
- Add IPv6 static addresses
- Add IPv6 static addresses adding and deleting
Tested:
- IPv6 domain name, DNS servers, NTP servers enable/disable function
- DHCPv6 enable/disable function
- Verified the IPv6 default gateway
- IPv6 addresses adding and deleting
- Verified the IPv6 addresses in IPv6 table
Change-Id: I9eebf6ef5f7de748f79779d8168b8dcfcdda2495
Signed-off-by: Sean Zhang <xiazhang@nvidia.com>
diff --git a/src/views/Settings/Network/Network.vue b/src/views/Settings/Network/Network.vue
index f731c25..0279cbe 100644
--- a/src/views/Settings/Network/Network.vue
+++ b/src/views/Settings/Network/Network.vue
@@ -23,6 +23,8 @@
<network-interface-settings :tab-index="tabIndex" />
<!-- IPV4 table -->
<table-ipv-4 :tab-index="tabIndex" />
+ <!-- IPV6 table -->
+ <table-ipv-6 :tab-index="tabIndex" />
<!-- Static DNS table -->
<table-dns :tab-index="tabIndex" />
</b-tab>
@@ -33,9 +35,14 @@
</page-section>
<!-- Modals -->
<modal-ipv4 :default-gateway="defaultGateway" @ok="saveIpv4Address" />
+ <modal-ipv6 @ok="saveIpv6Address" />
<modal-dns @ok="saveDnsAddress" />
<modal-hostname :hostname="currentHostname" @ok="saveSettings" />
<modal-mac-address :mac-address="currentMacAddress" @ok="saveSettings" />
+ <modal-default-gateway
+ :default-gateway="ipv6DefaultGateway"
+ @ok="saveSettings"
+ />
</b-container>
</template>
@@ -44,14 +51,17 @@
import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
import ModalMacAddress from './ModalMacAddress.vue';
+import ModalDefaultGateway from './ModalDefaultGateway.vue';
import ModalHostname from './ModalHostname.vue';
import ModalIpv4 from './ModalIpv4.vue';
+import ModalIpv6 from './ModalIpv6.vue';
import ModalDns from './ModalDns.vue';
import NetworkGlobalSettings from './NetworkGlobalSettings.vue';
import NetworkInterfaceSettings from './NetworkInterfaceSettings.vue';
import PageSection from '@/components/Global/PageSection';
import PageTitle from '@/components/Global/PageTitle';
import TableIpv4 from './TableIpv4.vue';
+import TableIpv6 from './TableIpv6.vue';
import TableDns from './TableDns.vue';
import { mapState } from 'vuex';
@@ -60,7 +70,9 @@
components: {
ModalHostname,
ModalMacAddress,
+ ModalDefaultGateway,
ModalIpv4,
+ ModalIpv6,
ModalDns,
NetworkGlobalSettings,
NetworkInterfaceSettings,
@@ -68,6 +80,7 @@
PageTitle,
TableDns,
TableIpv4,
+ TableIpv6,
},
mixins: [BVToastMixin, DataFormatterMixin, LoadingBarMixin],
beforeRouteLeave(to, from, next) {
@@ -79,6 +92,7 @@
currentHostname: '',
currentMacAddress: '',
defaultGateway: '',
+ ipv6DefaultGateway: '',
loading,
tabIndex: 0,
};
@@ -105,6 +119,9 @@
const networkTableIpv4 = new Promise((resolve) => {
this.$root.$on('network-table-ipv4-complete', () => resolve());
});
+ const networkTableIpv6 = new Promise((resolve) => {
+ this.$root.$on('network-table-ipv6-complete', () => resolve());
+ });
// Combine all child component Promises to indicate
// when page data load complete
Promise.all([
@@ -113,6 +130,7 @@
interfaceSettings,
networkTableDns,
networkTableIpv4,
+ networkTableIpv6,
]).finally(() => this.endLoader());
},
methods: {
@@ -131,6 +149,10 @@
this.$store.getters['network/globalNetworkSettings'][
this.tabIndex
].macAddress;
+ this.ipv6DefaultGateway =
+ this.$store.getters['network/globalNetworkSettings'][
+ this.tabIndex
+ ].ipv6DefaultGateway;
},
getTabIndex(selectedIndex) {
this.tabIndex = selectedIndex;
@@ -149,6 +171,14 @@
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
+ saveIpv6Address(modalFormData) {
+ this.startLoader();
+ this.$store
+ .dispatch('network/saveIpv6Address', modalFormData)
+ .then((message) => this.successToast(message))
+ .catch(({ message }) => this.errorToast(message))
+ .finally(() => this.endLoader());
+ },
saveDnsAddress(modalFormData) {
this.startLoader();
this.$store