@@ -15,6 +15,7 @@ import (
15
15
"github.com/metallb/frr-k8s/internal/community"
16
16
"github.com/metallb/frr-k8s/internal/frr"
17
17
"github.com/metallb/frr-k8s/internal/ipfamily"
18
+ "github.com/metallb/frr-k8s/internal/safeconvert"
18
19
corev1 "k8s.io/api/core/v1"
19
20
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20
21
"k8s.io/apimachinery/pkg/util/sets"
@@ -185,7 +186,7 @@ func neighborToFRR(n v1beta1.Neighbor, prefixesInRouter []string, alwaysBlock []
185
186
}
186
187
187
188
if n .ConnectTime != nil {
188
- res .ConnectTime = ptr .To (uint64 (n .ConnectTime .Duration / time .Second ))
189
+ res .ConnectTime = ptr .To (int64 (n .ConnectTime .Duration / time .Second ))
189
190
}
190
191
191
192
res .Password , err = passwordForNeighbor (n , passwordSecrets )
@@ -373,7 +374,11 @@ func filterForSelector(selector v1beta1.PrefixSelector) (frr.IncomingFilter, err
373
374
return frr.IncomingFilter {}, fmt .Errorf ("failed to parse prefix %s: %w" , selector .Prefix , err )
374
375
}
375
376
maskLen , _ := cidr .Mask .Size ()
376
- err = validateSelectorLengths (maskLen , selector .LE , selector .GE )
377
+ maskLenUint , err := safeconvert .IntToUInt32 (maskLen )
378
+ if err != nil {
379
+ return frr.IncomingFilter {}, fmt .Errorf ("failed to convert maskLen from CIDR %s to uint32: %w" , cidr , err )
380
+ }
381
+ err = validateSelectorLengths (maskLenUint , selector .LE , selector .GE )
377
382
if err != nil {
378
383
return frr.IncomingFilter {}, err
379
384
}
@@ -390,17 +395,17 @@ func filterForSelector(selector v1beta1.PrefixSelector) (frr.IncomingFilter, err
390
395
391
396
// validateSelectorLengths checks the lengths respect the following
392
397
// condition: mask length <= ge <= le
393
- func validateSelectorLengths (mask int , le , ge uint32 ) error {
398
+ func validateSelectorLengths (mask , le , ge uint32 ) error {
394
399
if ge == 0 && le == 0 {
395
400
return nil
396
401
}
397
402
if le > 0 && ge > le {
398
403
return fmt .Errorf ("invalid selector lengths: ge %d is bigger than le %d" , ge , le )
399
404
}
400
- if le > 0 && uint32 ( mask ) > le {
405
+ if le > 0 && mask > le {
401
406
return fmt .Errorf ("invalid selector lengths: cidr mask %d is bigger than le %d" , mask , le )
402
407
}
403
- if ge > 0 && uint32 ( mask ) > ge {
408
+ if ge > 0 && mask > ge {
404
409
return fmt .Errorf ("invalid selector lengths: cidr mask %d is bigger than ge %d" , mask , ge )
405
410
}
406
411
return nil
@@ -604,7 +609,7 @@ func alwaysBlockToFRR(cidrs []net.IPNet) []frr.IncomingFilter {
604
609
return res
605
610
}
606
611
607
- func parseTimers (ht , ka * v1.Duration ) (* uint64 , * uint64 , error ) {
612
+ func parseTimers (ht , ka * v1.Duration ) (* int64 , * int64 , error ) {
608
613
if ht == nil && ka != nil || ht != nil && ka == nil {
609
614
return nil , nil , fmt .Errorf ("one of KeepaliveTime/HoldTime specified, both must be set or none" )
610
615
}
@@ -625,8 +630,8 @@ func parseTimers(ht, ka *v1.Duration) (*uint64, *uint64, error) {
625
630
return nil , nil , fmt .Errorf ("invalid keepaliveTime %q, must be lower than holdTime %q" , ka , ht )
626
631
}
627
632
628
- htSeconds := uint64 (holdTime / time .Second )
629
- kaSeconds := uint64 (keepaliveTime / time .Second )
633
+ htSeconds := int64 (holdTime / time .Second )
634
+ kaSeconds := int64 (keepaliveTime / time .Second )
630
635
631
636
return & htSeconds , & kaSeconds , nil
632
637
}
0 commit comments