@@ -2,6 +2,7 @@ import './style.scss';
2
2
3
3
import { zodResolver } from '@hookform/resolvers/zod' ;
4
4
import { useMutation , useQuery } from '@tanstack/react-query' ;
5
+ import ipaddr from 'ipaddr.js' ;
5
6
import { useEffect , useMemo , useRef , useState } from 'react' ;
6
7
import { SubmitHandler , useForm } from 'react-hook-form' ;
7
8
import { z } from 'zod' ;
@@ -20,7 +21,7 @@ import { QueryKeys } from '../../../../shared/queries';
20
21
import { ModifyNetworkRequest } from '../../../../shared/types' ;
21
22
import { titleCase } from '../../../../shared/utils/titleCase' ;
22
23
import { trimObjectStrings } from '../../../../shared/utils/trimObjectStrings.ts' ;
23
- import { validateIpOrDomainList , validateIPv4 } from '../../../../shared/validators' ;
24
+ import { validateIpOrDomainList } from '../../../../shared/validators' ;
24
25
import { useWizardStore } from '../../hooks/useWizardStore' ;
25
26
26
27
type FormInputs = ModifyNetworkRequest [ 'network' ] ;
@@ -91,13 +92,36 @@ export const WizardNetworkConfiguration = () => {
91
92
if ( ! netmaskPresent ) {
92
93
return false ;
93
94
}
94
- const ipValid = validateIPv4 ( value , true ) ;
95
- if ( ipValid ) {
96
- const host = value . split ( '.' ) [ 3 ] . split ( '/' ) [ 0 ] ;
97
- if ( host === '0' ) return false ;
95
+ const ipValid = ipaddr . isValidCIDR ( value ) ;
96
+ if ( ! ipValid ) {
97
+ return false ;
98
+ }
99
+ const [ address ] = ipaddr . parseCIDR ( value ) ;
100
+ if ( address . kind ( ) === 'ipv6' ) {
101
+ const networkAddress = ipaddr . IPv6 . networkAddressFromCIDR ( value ) ;
102
+ const broadcastAddress = ipaddr . IPv6 . broadcastAddressFromCIDR ( value ) ;
103
+ if (
104
+ ( address as ipaddr . IPv6 ) . toNormalizedString ( ) ===
105
+ networkAddress . toNormalizedString ( ) ||
106
+ ( address as ipaddr . IPv6 ) . toNormalizedString ( ) ===
107
+ broadcastAddress . toNormalizedString ( )
108
+ ) {
109
+ return false ;
110
+ }
111
+ } else {
112
+ const networkAddress = ipaddr . IPv4 . networkAddressFromCIDR ( value ) ;
113
+ const broadcastAddress = ipaddr . IPv4 . broadcastAddressFromCIDR ( value ) ;
114
+ if (
115
+ ( address as ipaddr . IPv4 ) . toNormalizedString ( ) ===
116
+ networkAddress . toNormalizedString ( ) ||
117
+ ( address as ipaddr . IPv4 ) . toNormalizedString ( ) ===
118
+ broadcastAddress . toNormalizedString ( )
119
+ ) {
120
+ return false ;
121
+ }
98
122
}
99
123
return ipValid ;
100
- } ) ,
124
+ } , LL . form . error . addressNetmask ( ) ) ,
101
125
endpoint : z . string ( ) . min ( 1 , LL . form . error . required ( ) ) ,
102
126
port : z
103
127
. number ( {
0 commit comments