in pkg/providers/gateway/translation/gateway.go [155:208]
func getAllowedKinds(listener gatewayv1beta1.Listener) ([]gatewayv1beta1.RouteGroupKind, error) {
var expectedKinds []gatewayv1beta1.RouteGroupKind
group := gatewayv1beta1.Group(gatewayv1beta1.GroupName)
var kind gatewayv1beta1.Kind
switch listener.Protocol {
case gatewayv1beta1.HTTPProtocolType, gatewayv1beta1.HTTPSProtocolType:
kind = types.KindHTTPRoute
case gatewayv1beta1.TLSProtocolType:
kind = types.KindTLSRoute
case gatewayv1beta1.TCPProtocolType:
kind = types.KindTCPRoute
case gatewayv1beta1.UDPProtocolType:
kind = types.KindUDPRoute
default:
// TODO: If an implementation does not support or recognize this resource type,
// it MUST set the “ResolvedRefs” condition to False for this Listener with
// the “InvalidRouteKinds” reason.
return nil, errors.New("unknown protocol " + string(listener.Protocol))
}
expectedKinds = []gatewayv1beta1.RouteGroupKind{
{
Group: &group,
Kind: kind,
},
}
if listener.AllowedRoutes == nil || len(listener.AllowedRoutes.Kinds) == 0 {
return expectedKinds, nil
}
uniqueAllowedKinds := make(map[gatewayv1beta1.Kind]struct{})
var allowedKinds []gatewayv1beta1.RouteGroupKind
for _, kind := range listener.AllowedRoutes.Kinds {
expected := false
for _, expectedKind := range expectedKinds {
if kind.Kind == expectedKind.Kind &&
kind.Group != nil && *kind.Group == *expectedKind.Group {
expected = true
break
}
}
if expected {
if _, ok := uniqueAllowedKinds[kind.Kind]; !ok {
uniqueAllowedKinds[kind.Kind] = struct{}{}
allowedKinds = append(allowedKinds, kind)
}
}
}
return allowedKinds, nil
}