On Nov 23, Dumitru Ceara wrote:
> On 11/23/22 15:26, Lorenzo Bianconi wrote:
> >>>>>  /* Called with in the pinctrl_handler thread context. */
> >>>>>  static int
> >>>>>  pinctrl_handle_buffered_packets(struct dp_packet *pkt_in,
> >>>>>                                  const struct match *md, bool is_arp)
> >>>>>      OVS_REQUIRES(pinctrl_mutex)
> >>>>>  {
> >>>>> -    struct buffered_packets *bp;
> >>>>> -    struct dp_packet *clone;
> >>>>> -    struct in6_addr addr;
> >>>>> -
> >>>>> -    if (is_arp) {
> >>>>> -        addr = in6_addr_mapped_ipv4(htonl(md->flow.regs[0]));
> >>>>> -    } else {
> >>>>> -        ovs_be128 ip6 = hton128(flow_get_xxreg(&md->flow, 0));
> >>>>> -        memcpy(&addr, &ip6, sizeof addr);
> >>>>> -    }
> >>>>> -
> >>>>> -    uint32_t hash = hash_bytes(&addr, sizeof addr, 0);
> >>>>> -    bp = pinctrl_find_buffered_packets(&addr, hash);
> >>>>> +    uint64_t dp_key = ntohll(md->flow.metadata);
> >>>>> +    uint64_t oport_key = md->flow.regs[MFF_LOG_OUTPORT - MFF_REG0];
> >>>>> +    uint32_t hash = pinctrl_buffer_apcket_hash(dp_key, oport_key);
> >>>>> +    struct buffered_packets *bp
> >>>>> +        = pinctrl_find_buffered_packets(dp_key, oport_key, hash);
> >>>>>      if (!bp) {
> >>>>>          if (hmap_count(&buffered_packets_map) >= 1000) {
> >> Before your patch we would hit this hard coded limit if there were 1000
> >> next hops for which we were bufferring packets.
> >>
> >> Now, with your change, we will hit his limit only if there are 1000
> >> ports for which we are bufferring packets.  This seems very unlikely and
> >> I wonder if this will ever happen in practice.  Do we need to change its
> >> value?  Also, let's add a define for it somewhere to make it a bit less
> >> "magic".
> > ack. I would prefer to be a bit more conservative and keep the condition.
> > What is the right value to use up to you? 😄
> > 
> 
> Well, if you want to keep the exact same condition you'd have to count
> how many individual next hops we're buffering packets for.  Is that an
> option?

I am fine to just keep a condition that limits the max size of
buffered_packets_map, but if you think that is really not important we can drop
it.

Regards,
Lorenzo

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

Reply via email to