Skip to content

Commit 3a91703

Browse files
committed
don't always use TCP first
Signed-off-by: zirain <zirain2009@gmail.com>
1 parent 9d083cf commit 3a91703

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

internal/gatewayapi/validate.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,9 +1020,31 @@ func markProtocolConflicts(portListenerInfo map[gwapiv1.PortNumber]*portListener
10201020
}
10211021
}
10221022
default:
1023-
// All from ListenerSet: first TCP listener wins
1023+
// All from ListenerSet: use deterministic first-listener precedence.
1024+
// Listeners that do not match the first listener's protocol are conflicted.
1025+
var winnerProtocol string
1026+
for _, listener := range info.listeners {
1027+
// UDP does not participate in protocol conflict checks.
1028+
if listener.Protocol == gwapiv1.UDPProtocolType {
1029+
continue
1030+
}
1031+
winnerProtocol = getProtocolForListener(listener)
1032+
break
1033+
}
1034+
if winnerProtocol == "" {
1035+
continue
1036+
}
10241037
for _, listener := range layer4Listeners {
1025-
setProtocolConflictConditions(listener)
1038+
if getProtocolForListener(listener) != winnerProtocol {
1039+
setProtocolConflictConditions(listener)
1040+
}
1041+
}
1042+
for _, listeners := range hostnameGroups {
1043+
for _, listener := range listeners {
1044+
if getProtocolForListener(listener) != winnerProtocol {
1045+
setProtocolConflictConditions(listener)
1046+
}
1047+
}
10261048
}
10271049
}
10281050
} else if len(layer4Listeners) > 1 {

0 commit comments

Comments
 (0)