File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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 {
You can’t perform that action at this time.
0 commit comments