Use numeric prefix for IPv6 mask (#25130)

pull/25142/head^2
Petar Petrov 2025-04-24 17:45:37 +03:00 committed by GitHub
parent c794a2734b
commit c0f304ad40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 47 additions and 20 deletions

View File

@ -120,7 +120,7 @@ export const parseAddress = (address: string) => {
const [ip, cidr] = address.split("/"); const [ip, cidr] = address.split("/");
const isIPv6 = ip.includes(":"); const isIPv6 = ip.includes(":");
const mask = cidr ? cidrToNetmask(cidr, isIPv6) : null; const mask = cidr ? cidrToNetmask(cidr, isIPv6) : null;
return { ip, mask }; return { ip, mask, prefix: cidr };
}; };
export const formatAddress = (ip: string, mask: string) => export const formatAddress = (ip: string, mask: string) =>

View File

@ -380,7 +380,7 @@ export class HassioNetwork extends LitElement {
? html` ? html`
${this._interface![version].address.map( ${this._interface![version].address.map(
(address: string, index: number) => { (address: string, index: number) => {
const { ip, mask } = parseAddress(address); const { ip, mask, prefix } = parseAddress(address);
return html` return html`
<div class="address-row"> <div class="address-row">
<ha-textfield <ha-textfield
@ -395,18 +395,35 @@ export class HassioNetwork extends LitElement {
.disabled=${disableInputs} .disabled=${disableInputs}
> >
</ha-textfield> </ha-textfield>
<ha-textfield ${version === "ipv6"
id="netmask" ? html`
.label=${this.hass.localize( <ha-textfield
"ui.panel.config.network.supervisor.netmask" id="prefix"
)} .label=${this.hass.localize(
.version=${version} "ui.panel.config.network.supervisor.prefix"
.value=${mask} )}
.index=${index} .version=${version}
@change=${this._handleInputValueChanged} .value=${prefix || ""}
.disabled=${disableInputs} .index=${index}
> @change=${this._handleInputValueChanged}
</ha-textfield> .disabled=${disableInputs}
>
</ha-textfield>
`
: html`
<ha-textfield
id="netmask"
.label=${this.hass.localize(
"ui.panel.config.network.supervisor.netmask"
)}
.version=${version}
.value=${mask || ""}
.index=${index}
@change=${this._handleInputValueChanged}
.disabled=${disableInputs}
>
</ha-textfield>
`}
${this._interface![version].address.length > 1 && ${this._interface![version].address.length > 1 &&
!disableInputs !disableInputs
? html` ? html`
@ -654,25 +671,30 @@ export class HassioNetwork extends LitElement {
if (id === "address") { if (id === "address") {
const index = (ev.target as any).index as number; const index = (ev.target as any).index as number;
const { mask: oldMask } = parseAddress( const { mask: oldMask } = parseAddress(
this._interface![version]!.address![index] this._interface[version].address![index]
); );
const { mask } = parseAddress(value); const { mask } = parseAddress(value);
this._interface[version]!.address![index] = formatAddress( this._interface[version].address![index] = formatAddress(
value, value,
mask || oldMask || "" mask || oldMask || ""
); );
this.requestUpdate("_interface"); this.requestUpdate("_interface");
} else if (id === "netmask") { } else if (id === "netmask") {
const index = (ev.target as any).index as number; const index = (ev.target as any).index as number;
const { ip } = parseAddress(this._interface![version]!.address![index]); const { ip } = parseAddress(this._interface[version].address![index]);
this._interface[version]!.address![index] = formatAddress(ip, value); 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"); this.requestUpdate("_interface");
} else if (id === "nameserver") { } else if (id === "nameserver") {
const index = (ev.target as any).index as number; const index = (ev.target as any).index as number;
this._interface[version]!.nameservers![index] = value; this._interface[version].nameservers![index] = value;
this.requestUpdate("_interface"); this.requestUpdate("_interface");
} else { } else {
this._interface[version]![id] = value; this._interface[version][id] = value;
} }
} }
@ -790,6 +812,10 @@ export class HassioNetwork extends LitElement {
.address-row ha-textfield { .address-row ha-textfield {
flex: 1; flex: 1;
} }
.address-row #prefix {
flex: none;
width: 95px;
}
.address-row ha-icon-button { .address-row ha-icon-button {
--mdc-icon-button-size: 36px; --mdc-icon-button-size: 36px;
margin-top: 16px; margin-top: 16px;

View File

@ -6331,6 +6331,7 @@
"disabled": "Disabled", "disabled": "Disabled",
"ip": "IP address", "ip": "IP address",
"netmask": "Netmask", "netmask": "Netmask",
"prefix": "Subnet prefix",
"add_address": "Add address", "add_address": "Add address",
"gateway": "Gateway address", "gateway": "Gateway address",
"dns_server": "DNS Server", "dns_server": "DNS Server",