Skip to content

Commit 94e7237

Browse files
committed
add validate listener checks
1 parent 02ebcfe commit 94e7237

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

internal/mode/static/state/graph/gateway_listener.go

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -254,44 +254,49 @@ func getAndValidateListenerSupportedKinds(listener v1.Listener) (
254254
var conds []conditions.Condition
255255
var supportedKinds []v1.RouteGroupKind
256256

257-
ngfSupportedKinds := map[v1.Kind]struct{}{
258-
kinds.TLSRoute: {},
259-
kinds.HTTPRoute: {},
260-
kinds.GRPCRoute: {},
261-
}
262-
263-
validRouteKind := func(kind v1.RouteGroupKind) bool {
264-
if _, ok := ngfSupportedKinds[kind.Kind]; !ok {
257+
validProtocolRouteKind := func(kind v1.RouteGroupKind, validKinds []v1.RouteGroupKind) bool {
258+
matchedKind := false
259+
for _, k := range validKinds {
260+
if k.Kind == kind.Kind {
261+
matchedKind = true
262+
break
263+
}
264+
}
265+
if !matchedKind {
265266
return false
266267
}
267-
if kind.Group == nil || *kind.Group != v1.GroupName {
268+
if kind.Group != nil && *kind.Group != v1.GroupName {
268269
return false
269270
}
270271
return true
271272
}
272273

274+
var validKinds []v1.RouteGroupKind
275+
276+
switch listener.Protocol {
277+
case v1.HTTPProtocolType, v1.HTTPSProtocolType:
278+
validKinds = []v1.RouteGroupKind{
279+
{Kind: v1.Kind(kinds.HTTPRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
280+
{Kind: v1.Kind(kinds.GRPCRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
281+
}
282+
case v1.TLSProtocolType:
283+
validKinds = []v1.RouteGroupKind{
284+
{Kind: v1.Kind(kinds.TLSRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
285+
}
286+
}
287+
273288
if listener.AllowedRoutes != nil && listener.AllowedRoutes.Kinds != nil {
274289
supportedKinds = make([]v1.RouteGroupKind, 0, len(listener.AllowedRoutes.Kinds))
275290
for _, kind := range listener.AllowedRoutes.Kinds {
276-
if !validRouteKind(kind) {
291+
if !validProtocolRouteKind(kind, validKinds) {
277292
msg := fmt.Sprintf("Unsupported route kind \"%s/%s\"", *kind.Group, kind.Kind)
278293
conds = append(conds, staticConds.NewListenerInvalidRouteKinds(msg)...)
279294
continue
280295
}
281296
supportedKinds = append(supportedKinds, kind)
282297
}
283298
} else {
284-
switch listener.Protocol {
285-
case v1.HTTPProtocolType, v1.HTTPSProtocolType:
286-
supportedKinds = []v1.RouteGroupKind{
287-
{Kind: v1.Kind(kinds.HTTPRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
288-
{Kind: v1.Kind(kinds.GRPCRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
289-
}
290-
case v1.TLSProtocolType:
291-
supportedKinds = []v1.RouteGroupKind{
292-
{Kind: v1.Kind(kinds.TLSRoute), Group: helpers.GetPointer[v1.Group](v1.GroupName)},
293-
}
294-
}
299+
supportedKinds = validKinds
295300
}
296301

297302
return conds, supportedKinds

0 commit comments

Comments
 (0)