diff --git a/src/data/hassio/network.ts b/src/data/hassio/network.ts index 40500360af..1d036a04ee 100644 --- a/src/data/hassio/network.ts +++ b/src/data/hassio/network.ts @@ -120,7 +120,7 @@ export const parseAddress = (address: string) => { const [ip, cidr] = address.split("/"); const isIPv6 = ip.includes(":"); const mask = cidr ? cidrToNetmask(cidr, isIPv6) : null; - return { ip, mask }; + return { ip, mask, prefix: cidr }; }; export const formatAddress = (ip: string, mask: string) => diff --git a/src/panels/config/network/supervisor-network.ts b/src/panels/config/network/supervisor-network.ts index deea22e5a5..0df1ac663c 100644 --- a/src/panels/config/network/supervisor-network.ts +++ b/src/panels/config/network/supervisor-network.ts @@ -380,7 +380,7 @@ export class HassioNetwork extends LitElement { ? html` ${this._interface![version].address.map( (address: string, index: number) => { - const { ip, mask } = parseAddress(address); + const { ip, mask, prefix } = parseAddress(address); return html`
- - + ${version === "ipv6" + ? html` + + + ` + : html` + + + `} ${this._interface![version].address.length > 1 && !disableInputs ? html` @@ -654,25 +671,30 @@ export class HassioNetwork extends LitElement { if (id === "address") { const index = (ev.target as any).index as number; const { mask: oldMask } = parseAddress( - this._interface![version]!.address![index] + this._interface[version].address![index] ); const { mask } = parseAddress(value); - this._interface[version]!.address![index] = formatAddress( + this._interface[version].address![index] = formatAddress( value, mask || oldMask || "" ); this.requestUpdate("_interface"); } else if (id === "netmask") { const index = (ev.target as any).index as number; - const { ip } = parseAddress(this._interface![version]!.address![index]); - this._interface[version]!.address![index] = formatAddress(ip, value); + const { ip } = parseAddress(this._interface[version].address![index]); + this._interface[version].address![index] = formatAddress(ip, value); + this.requestUpdate("_interface"); + } else if (id === "prefix") { + const index = (ev.target as any).index as number; + const { ip } = parseAddress(this._interface[version].address![index]); + this._interface[version].address![index] = `${ip}/${value}`; this.requestUpdate("_interface"); } else if (id === "nameserver") { const index = (ev.target as any).index as number; - this._interface[version]!.nameservers![index] = value; + this._interface[version].nameservers![index] = value; this.requestUpdate("_interface"); } else { - this._interface[version]![id] = value; + this._interface[version][id] = value; } } @@ -790,6 +812,10 @@ export class HassioNetwork extends LitElement { .address-row ha-textfield { flex: 1; } + .address-row #prefix { + flex: none; + width: 95px; + } .address-row ha-icon-button { --mdc-icon-button-size: 36px; margin-top: 16px; diff --git a/src/translations/en.json b/src/translations/en.json index 8b5953acf3..17ebbb6e79 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -6331,6 +6331,7 @@ "disabled": "Disabled", "ip": "IP address", "netmask": "Netmask", + "prefix": "Subnet prefix", "add_address": "Add address", "gateway": "Gateway address", "dns_server": "DNS Server",