in controllers/manager/gatewaylbconfiguration_controller.go [655:673]
func selectPortForLBRule(targetRule *network.LoadBalancingRule, lbRules []*network.LoadBalancingRule) (int32, error) {
ports := make([]bool, consts.WireguardPortEnd-consts.WireguardPortStart)
for _, rule := range lbRules {
if rule.Properties != nil && rule.Properties.BackendAddressPool != nil &&
strings.EqualFold(to.Val(rule.Properties.BackendAddressPool.ID), to.Val(targetRule.Properties.BackendAddressPool.ID)) {
if rule.Properties.FrontendPort == nil || rule.Properties.BackendPort == nil || *rule.Properties.FrontendPort != *rule.Properties.BackendPort ||
*rule.Properties.BackendPort < consts.WireguardPortStart || *rule.Properties.BackendPort >= consts.WireguardPortEnd {
return 0, fmt.Errorf("selectPortForLBRule: found rule with invalid LB port")
}
ports[*rule.Properties.BackendPort-consts.WireguardPortStart] = true
}
}
for i, portInUse := range ports {
if !portInUse {
return int32(i) + consts.WireguardPortStart, nil
}
}
return 0, fmt.Errorf("selectPortForLBRule: No available ports")
}