@@ -218,9 +218,13 @@ func (t *Translator) processHTTPRouteRules(httpRoute *HTTPRouteContext, parentRe
218218 backendRefNames := make ([]string , len (rule .BackendRefs ))
219219 backendCustomRefs := []* ir.UnstructuredRef {}
220220 // process each backendRef, and calculate the destination settings for this rule
221- for i , backendRef := range rule .BackendRefs {
221+ for i := range rule .BackendRefs {
222222 settingName := irDestinationSettingName (destName , i )
223- ds , unstructuredRef , err := t .processDestination (settingName , backendRef , parentRef , httpRoute , resources )
223+ backendRefCtx := BackendRefWithFilters {
224+ BackendRef : & rule .BackendRefs [i ].BackendRef ,
225+ Filters : rule .BackendRefs [i ].Filters ,
226+ }
227+ ds , unstructuredRef , err := t .processDestination (settingName , backendRefCtx , parentRef , httpRoute , resources )
224228 if err != nil {
225229 errs .Add (status .NewRouteStatusError (
226230 fmt .Errorf ("failed to process route rule %d backendRef %d: %w" , ruleIdx , i , err ),
@@ -242,8 +246,8 @@ func (t *Translator) processHTTPRouteRules(httpRoute *HTTPRouteContext, parentRe
242246 if ds .IsDynamicResolver {
243247 hasDynamicResolver = true
244248 }
245- backendNamespace := NamespaceDerefOr (backendRef .Namespace , httpRoute .GetNamespace ())
246- backendRefNames [i ] = fmt .Sprintf ("%s/%s" , backendNamespace , backendRef .Name )
249+ backendNamespace := NamespaceDerefOr (rule . BackendRefs [ i ] .Namespace , httpRoute .GetNamespace ())
250+ backendRefNames [i ] = fmt .Sprintf ("%s/%s" , backendNamespace , rule . BackendRefs [ i ] .Name )
247251 }
248252
249253 // process each ir route
@@ -664,9 +668,13 @@ func (t *Translator) processGRPCRouteRules(grpcRoute *GRPCRouteContext, parentRe
664668 failedProcessDestination := false
665669
666670 backendRefNames := make ([]string , len (rule .BackendRefs ))
667- for i , backendRef := range rule .BackendRefs {
671+ for i := range rule .BackendRefs {
668672 settingName := irDestinationSettingName (destName , i )
669- ds , _ , err := t .processDestination (settingName , backendRef , parentRef , grpcRoute , resources )
673+ backendRefCtx := BackendRefWithFilters {
674+ BackendRef : & rule .BackendRefs [i ].BackendRef ,
675+ Filters : rule .BackendRefs [i ].Filters ,
676+ }
677+ ds , _ , err := t .processDestination (settingName , backendRefCtx , parentRef , grpcRoute , resources )
670678 if err != nil {
671679 errs .Add (status .NewRouteStatusError (
672680 fmt .Errorf ("failed to process route rule %d backendRef %d: %w" , ruleIdx , i , err ),
@@ -680,8 +688,8 @@ func (t *Translator) processGRPCRouteRules(grpcRoute *GRPCRouteContext, parentRe
680688 continue
681689 }
682690 allDs = append (allDs , ds )
683- backendNamespace := NamespaceDerefOr (backendRef .Namespace , grpcRoute .GetNamespace ())
684- backendRefNames [i ] = fmt .Sprintf ("%s/%s" , backendNamespace , backendRef .Name )
691+ backendNamespace := NamespaceDerefOr (rule . BackendRefs [ i ] .Namespace , grpcRoute .GetNamespace ())
692+ backendRefNames [i ] = fmt .Sprintf ("%s/%s" , backendNamespace , rule . BackendRefs [ i ] .Name )
685693 }
686694
687695 // process each ir route
@@ -955,9 +963,10 @@ func (t *Translator) processTLSRouteParentRefs(tlsRoute *TLSRouteContext, resour
955963
956964 // compute backends
957965 for _ , rule := range tlsRoute .Spec .Rules {
958- for i , backendRef := range rule .BackendRefs {
966+ for i := range rule .BackendRefs {
959967 settingName := irDestinationSettingName (destName , i )
960- ds , _ , err := t .processDestination (settingName , backendRef , parentRef , tlsRoute , resources )
968+ backendRefCtx := DirectBackendRef {BackendRef : & rule .BackendRefs [i ]}
969+ ds , _ , err := t .processDestination (settingName , backendRefCtx , parentRef , tlsRoute , resources )
961970 if err != nil {
962971 resolveErrs .Add (err )
963972 continue
@@ -1110,9 +1119,10 @@ func (t *Translator) processUDPRouteParentRefs(udpRoute *UDPRouteContext, resour
11101119 destName = irRouteDestinationName (udpRoute , - 1 /*rule index*/ )
11111120 )
11121121
1113- for i , backendRef := range udpRoute .Spec .Rules [0 ].BackendRefs {
1122+ for i := range udpRoute .Spec .Rules [0 ].BackendRefs {
11141123 settingName := irDestinationSettingName (destName , i )
1115- ds , _ , err := t .processDestination (settingName , backendRef , parentRef , udpRoute , resources )
1124+ backendRefCtx := DirectBackendRef {BackendRef : & udpRoute .Spec .Rules [0 ].BackendRefs [i ]}
1125+ ds , _ , err := t .processDestination (settingName , backendRefCtx , parentRef , udpRoute , resources )
11161126 if err != nil {
11171127 resolveErrs .Add (err )
11181128 continue
@@ -1258,9 +1268,10 @@ func (t *Translator) processTCPRouteParentRefs(tcpRoute *TCPRouteContext, resour
12581268 destName = irRouteDestinationName (tcpRoute , - 1 /*rule index*/ )
12591269 )
12601270
1261- for i , backendRef := range tcpRoute .Spec .Rules [0 ].BackendRefs {
1271+ for i := range tcpRoute .Spec .Rules [0 ].BackendRefs {
12621272 settingName := irDestinationSettingName (destName , i )
1263- ds , _ , err := t .processDestination (settingName , backendRef , parentRef , tcpRoute , resources )
1273+ backendRefCtx := DirectBackendRef {BackendRef : & tcpRoute .Spec .Rules [0 ].BackendRefs [i ]}
1274+ ds , _ , err := t .processDestination (settingName , backendRefCtx , parentRef , tcpRoute , resources )
12641275 // skip adding the route and provide the reason via route status.
12651276 if err != nil {
12661277 resolveErrs .Add (err )
@@ -1373,7 +1384,7 @@ func (t *Translator) processDestination(name string, backendRefContext BackendRe
13731384) (ds * ir.DestinationSetting , unstructuredRef * ir.UnstructuredRef , err status.Error ) {
13741385 routeType := route .GetRouteType ()
13751386 weight := uint32 (1 )
1376- backendRef := GetBackendRef (backendRefContext )
1387+ backendRef := backendRefContext . GetBackendRef ()
13771388 if backendRef .Weight != nil {
13781389 weight = uint32 (* backendRef .Weight )
13791390 }
@@ -1604,7 +1615,10 @@ func (t *Translator) processServiceDestinationSetting(
16041615}
16051616
16061617func getBackendFilters (routeType gwapiv1.Kind , backendRefContext BackendRefContext ) (backendFilters any ) {
1607- filters := GetFilters (backendRefContext )
1618+ filters := backendRefContext .GetFilters ()
1619+ if filters == nil {
1620+ return nil
1621+ }
16081622 switch routeType {
16091623 case resource .KindHTTPRoute :
16101624 if len (filters .([]gwapiv1.HTTPRouteFilter )) > 0 {
0 commit comments