On 26 Apr 2023, at 4:38, Chris Mi wrote:

> On 4/12/2023 10:07 PM, Eelco Chaudron wrote:
>> On 29 Mar 2023, at 13:42, Chris Mi wrote:
>>
>>> Iterate each registered offload API. It's not a problem for today
>>> since we only have one implementation.
>> See comment inline.
>>
>> //Eelco
>>
>>> Signed-off-by: Chris Mi<[email protected]>
>>> Reviewed-by: Roi Dayan<[email protected]>
>>> ---
>>>   lib/netdev-offload.c | 35 +++++++++++++++++++++++++++++++++++
>>>   lib/netdev-offload.h |  5 +++++
>>>   2 files changed, 40 insertions(+)
>>>
>>> diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c
>>> index 84503ec8b..ec61e1cc0 100644
>>> --- a/lib/netdev-offload.c
>>> +++ b/lib/netdev-offload.c
>>> @@ -257,6 +257,41 @@ 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,
>>> +                    uint32_t handler_id)
>>> +{
>>> +    struct netdev_registered_flow_api *rfa;
>>> +    int ret = EAGAIN;
>>> +
>>> +    CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
>>> +        if (rfa->flow_api->recv) {
>>> +            ret = rfa->flow_api->recv(upcall, buf, handler_id);
>>> +            if (ret) {
>> See the previous conversation on not logging on EAGAIN.
>>                     if (ret != EAGAIN) {
>>
>>> +                VLOG_DBG_RL(&rl, "Failed to receive offload packet, %s, "
>>> +                            "type: %s", ovs_strerror(ret),
>>> +                            rfa->flow_api->type);
>>> +            } else {
>>> +                return ret;
>> Maybe just return 0; so it's explicit we return ok here? What about (notice 
>> also the ret change, or else we might return an old error):
> Done.
>> int
>> netdev_offload_recv(struct dpif_upcall *upcall, struct ofpbuf *buf,
>>                      uint32_t handler_id)
>> {
>>      struct netdev_registered_flow_api *rfa;
>>      int ret;
> I changed above line to
>     int ret = EAGAIN;
> to avoid uninitialized error.

Thanks for fixing my problems ;)

>>      CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
>>          if (rfa->flow_api->recv) {
>>              ret = rfa->flow_api->recv(upcall, buf, handler_id);
>>              if (!ret) {
>>                  return 0;
>>              }
>>
>>              if (ret == EAGAIN) {
>>                  VLOG_DBG_RL(&rl, "Failed to receive offload packet, %s, "
>>                              "type: %s", ovs_strerror(ret),
>>                              rfa->flow_api->type);
>>              }
>>          } else {
>>              ret = EAGAIN;
>>         }
>>      }
>>      return ret;
>> }
>>
>>
>>> +            }
>>> +        }
>>> +    }
>>> +
>>> +    return ret;
>>> +}
>>> +
>>> +void
>>> +netdev_offload_recv_wait(uint32_t handler_id)
>>> +{
>>> +    struct netdev_registered_flow_api *rfa;
>>> +
>>> +    CMAP_FOR_EACH (rfa, cmap_node, &netdev_flow_apis) {
>>> +        if (rfa->flow_api->recv_wait) {
>>> +            rfa->flow_api->recv_wait(handler_id);
>>> +        }
>>> +    }
>>> +}
>>> +
>>>   int
>>>   netdev_flow_flush(struct netdev *netdev)
>>>   {
>>> diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h
>>> index edc843cd9..09cdb6db2 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,10 @@ 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,
>>> +                        uint32_t handler_id);
>>> +void netdev_offload_recv_wait(uint32_t handler_id);
>>> +
>>>   #ifdef  __cplusplus
>>>   }
>>>   #endif
>>> -- 
>>> 2.26.3

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to