On 11/2/23 07:26, Han Zhou wrote: > > > On Wed, Nov 1, 2023 at 11:25 AM Ilya Maximets <i.maxim...@ovn.org > <mailto:i.maxim...@ovn.org>> wrote: >> >> On 10/26/23 18:51, Han Zhou wrote: >> > >> > >> > On Wed, Oct 25, 2023 at 11:15 AM Ilya Maximets <i.maxim...@ovn.org >> > <mailto:i.maxim...@ovn.org> <mailto:i.maxim...@ovn.org >> > <mailto:i.maxim...@ovn.org>>> wrote: >> >> >> >> On 10/24/23 21:35, Han Zhou wrote: >> >> > Enhance MAC_Binding aging to allow CIDR-based threshold configurations. >> >> > This enables distinct threshold settings for different IP ranges, >> >> > applying the longest prefix matching for overlapping ranges. >> >> > >> >> > A common use case involves setting a default threshold for all IPs, >> >> > while >> >> > disabling aging for a specific range and potentially excluding a subset >> >> > within that range. >> >> > >> >> > Signed-off-by: Han Zhou <hz...@ovn.org <mailto:hz...@ovn.org> >> >> > <mailto:hz...@ovn.org <mailto:hz...@ovn.org>>> >> >> > --- >> >> > northd/aging.c | 297 +++++++++++++++++++++++++++++++++++++++++++++--- >> >> > northd/aging.h | 3 + >> >> > northd/northd.c | 11 +- >> >> > ovn-nb.xml | 63 +++++++++- >> >> > tests/ovn.at <http://ovn.at> <http://ovn.at <http://ovn.at>> | 60 >> >> > ++++++++++ >> >> > 5 files changed, 413 insertions(+), 21 deletions(-) >> >> > >> >> > diff --git a/northd/aging.c b/northd/aging.c >> >> > index f626c72c8ca3..e5868211a63b 100644 >> >> > --- a/northd/aging.c >> >> > +++ b/northd/aging.c >> >> > @@ -47,12 +47,253 @@ aging_waker_schedule_next_wake(struct aging_waker >> >> > *waker, int64_t next_wake_ms) >> >> > } >> >> > } >> >> > >> >> > +struct threshold_entry { >> >> > + union { >> >> > + ovs_be32 ipv4; >> >> > + struct in6_addr ipv6; >> >> > + } prefix; >> >> > + bool is_v4; >> >> >> >> Hi, Han. Thanks for the patch! >> >> >> >> Not a full review, but I wonder if it would be cleaner to replace >> >> all the structure members above with a single 'struct in6_addr prefix;' >> >> and store ipv4 addresses as ipv6-mapped ipv4. This will allow to use >> >> a single array for storing the entries as well. May save some lines >> >> of code. >> >> >> >> What do you think? >> > >> > Thanks Ilya for the review. In fact using a common in6_addr in a single >> > array was my first attempt, but then I realized that if there are both >> > IPv4 and IPv6 entries in the array, for each mac-binding checking, say if >> > it is IPv4, it may have to go through all the IPv6 entries unnecessarily. >> > If there are a huge amount of MAC-bindings to check, the time may be >> > doubled. Probably this doesn't have a big impact, but using two arrays >> > didn't seem too many lines of code, so I went with the current *safe* >> > approach. Let me know if you have a strong preference for the alternative, >> > and I am happy to change it. >> >> That makes sense. >> >> Though, if performance here is a concern, we probably should have an >> actual I-P for MAC binding/FDB aging. It should be possible to keep >> track of current entries in a heap or a skiplist based on the expected >> removal time and adjust whenever actual Sb tables change and not walk >> over the whole table each time. >> >> Another idea to keep in mind is to use a classifier instead of array, >> but this will only make sense with a large number of different CIDRs >> in the configuration, otherwise the overhead of the classifier will >> likely be higher than simple array traversal. >> >> With the lack of I-P, I think, it's OK to have the entries in separate >> arrays for now. >> > Cool. I'd say performance is probably not a big concern right now, while I > was also trying to avoid adding an obvious performance penalty. I agree that > when performance becomes a real concern we should do I-P. > >> > >> >> >> >> Also, this patch, probably, needs a NEWS entry. >> > >> > I was wondering if this change is big enough to add one. Now I will add it >> > since you brought up :). >> >> It's a new user-facing API. Should be in the NEWS, IMO. >> > > OK, how about the below change: > > ------------------------------------------------------------ > diff --git a/NEWS b/NEWS > index 425dfe0a84e1..6352990ae8f5 100644 > --- a/NEWS > +++ b/NEWS > @@ -1,5 +1,7 @@ > Post v23.09.0 > ------------- > + - Support CIDR based MAC binding aging threshold. See man ovn-nb for > + 'mac_binding_age_threshold' for more details.
Looks fine. Nit: man pages are usually referenced with a number, i.e. 'See ovs-nb(5)'. > > OVN v23.09.0 - 15 Sep 2023 > -------------------------- > -------------------------------------------------------------- > > I can add it in v2 or when merging if there are no other comments. Sure. I see Ales posted some comments. > > Thanks, > Han > >> > >> > Thanks, >> > Han >> > >> >> >> >> Best regards, Ilya Maximets. >> _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev