func selectPortForLBRule()

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")
}