On 13 Oct 2026, at 16:34, Eli Britstein wrote:

> On 13/10/2026 15:21, Eelco Chaudron wrote:
>> +static int
>>   dummy_offload_hw_process_pkt(const struct dpif_offload *offload_,
>>                                struct dummy_offloaded_flow *flow,
>>                                struct dp_packet *pkt)
>> @@ -734,7 +745,7 @@ dummy_offload_hw_process_pkt(const struct dpif_offload 
>> *offload_,
>>       size_t left;
>>
>>       if (!flow->actions) {
>> -        return false;
>> +        return ENOENT;
>>       }
>>
>>       NL_ATTR_FOR_EACH (nla, left, flow->actions, flow->actions_len) {
>> @@ -750,7 +761,14 @@ dummy_offload_hw_process_pkt(const struct dpif_offload 
>> *offload_,
>>
>>               port = dummy_offload_get_port_by_odp_port(offload_, odp_port);
>>               if (!port) {
>> -                return false;
>> +                return ENODEV;
>> +            }
>> +
>> +            /* Stop at the first non-dummy-pmd port; remaining actions are
>> +             * handled via alt_actions returned by hw_post_process. */
>> +            if (strcmp("dummy-pmd",
>> +                       netdev_get_type(port->pm_port.netdev))) {
>> +                goto done;
> break. no need for the label and goto.

No, break only exits the switch, not the enclosing
NL_ATTR_FOR_EACH for loop. Using break here would continue
processing remaining actions in "hardware" rather than stopping at
the first non-dummy-pmd port. The goto done is needed to exit
both the switch and the loop.

>>               }
>>
>>               n_txq = netdev_n_txq(port->pm_port.netdev);
>> @@ -813,10 +831,65 @@ dummy_offload_hw_process_pkt(const struct dpif_offload 
>> *offload_,
>>           }
>>       }
>>
>> +done:
>>       flow->stats.n_bytes += pkt_size;
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to