On 2/23/23 21:19, Ilya Maximets wrote:
> On 2/23/23 12:27, Chris Mi wrote:
>> Iterate each registered offload API. It's not a problem for today
>> since we only have one implementation.
>>
>> Signed-off-by: Chris Mi <c...@nvidia.com>
>> Reviewed-by: Roi Dayan <r...@nvidia.com>
>> ---
>>  lib/netdev-offload.c | 32 ++++++++++++++++++++++++++++++++
>>  lib/netdev-offload.h |  4 ++++
>>  2 files changed, 36 insertions(+)
>>
>> diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c
>> index 4592262bd..b333a3b82 100644
>> --- a/lib/netdev-offload.c
>> +++ b/lib/netdev-offload.c
>> @@ -256,6 +256,38 @@ meter_offload_del(ofproto_meter_id meter_id, struct 
>> ofputil_meter_stats *stats)
>>      return 0;
>>  }
>>  
>> +int
>> +netdev_offload_recv(struct dpif_upcall *upcall, struct ofpbuf *buf)
> 
> Handler id.
> 
>> +{
>> +    struct netdev_registered_flow_api *rfa;
>> +    int ret;
>> +
>> +    CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
>> +        if (rfa->flow_api->sflow_recv) {
>> +            ret = rfa->flow_api->sflow_recv(upcall, buf);
>> +            if (ret) {
>> +                VLOG_DBG_RL(&rl, "Failed to receive psample packet, error 
>> %d, "
> 
> No 'sflow' or 'psample' in names or logs.
> 
>> +                            "type: %s", ret, rfa->flow_api->type);
> 
> strerror ?
> 
>> +                return ret;

Also, we should continue on error and return on success.
Current core will call recv() for the next provider when
the first one already returned a packet.

>> +           }
>> +        }
>> +    }
>> +
>> +    return 0;
>> +}
>> +
>> +void
>> +netdev_offload_recv_wait(void)
> 
> Same.
> 
>> +{
>> +    struct netdev_registered_flow_api *rfa;
>> +
>> +    CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
>> +        if (rfa->flow_api->sflow_recv_wait) {
>> +            rfa->flow_api->sflow_recv_wait();
>> +        }
>> +    }
>> +}
>> +
>>  int
>>  netdev_flow_flush(struct netdev *netdev)
>>  {
>> diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h
>> index edc843cd9..e332555ee 100644
>> --- a/lib/netdev-offload.h
>> +++ b/lib/netdev-offload.h
>> @@ -33,6 +33,7 @@ extern "C" {
>>  
>>  struct dp_packet_batch;
>>  struct dp_packet;
>> +struct dpif_upcall;
>>  struct netdev_class;
>>  struct netdev_rxq;
>>  struct netdev_saved_flags;
>> @@ -162,6 +163,9 @@ void meter_offload_set(ofproto_meter_id, struct 
>> ofputil_meter_config *);
>>  int meter_offload_get(ofproto_meter_id, struct ofputil_meter_stats *);
>>  int meter_offload_del(ofproto_meter_id, struct ofputil_meter_stats *);
>>  
>> +int netdev_offload_recv(struct dpif_upcall *upcall, struct ofpbuf *buf);
>> +void netdev_offload_recv_wait(void);
>> +
>>  #ifdef  __cplusplus
>>  }
>>  #endif
> 

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to