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