> > > > > + */ > > > > > + uint32_t ingress_oop : 1; > > > > > + > > > > > /** Reserved bit fields for future extension > > > > > * > > > > > * User should ensure reserved_opts is cleared as it may change > > > > > in > > > > > @@ -282,7 +293,7 @@ struct rte_security_ipsec_sa_options { > > > > > * > > > > > * Note: Reduce number of bits in reserved_opts for every new > > > > > option. > > > > > */ > > > > > - uint32_t reserved_opts : 17; > > > > > + uint32_t reserved_opts : 16; > > > > > }; > > > > > > > > NAK > > > > Let me repeat the reserved bit rant. YAGNI > > > > > > > > Reserved space is not usable without ABI breakage unless the existing > > > > code enforces that reserved space has to be zero. > > > > > > > > Just saying "User should ensure reserved_opts is cleared" is not enough. > > > > > > Yes. I think, we need to enforce to have _init functions for the > > > structures which is using reserved filed. > > > > > > On the same note on YAGNI, I am wondering why NOT introduce > > > RTE_NEXT_ABI marco kind of scheme to compile out ABI breaking changes. > > > By keeping RTE_NEXT_ABI disable by default, enable explicitly if user > > > wants it to avoid waiting for one year any ABI breaking changes. > > > There are a lot of "fixed appliance" customers (not OS distribution > > > driven customer) they are willing to recompile DPDK for new feature. > > > What we are loosing with this scheme? > > > > RTE_NEXT_ABI is described in the ABI policy. > > We are not doing it currently, but I think we could > > when it is not too much complicate in the code. > > > > The only problems I see are: > > - more #ifdef clutter > > - 2 binary versions to test > > - CI and checks must handle RTE_NEXT_ABI version > > I think, we have two buckets of ABI breakages via RTE_NEXT_ABI > > 1) Changes that introduces compilation failures like adding new > argument to API or change API name etc > 2) Structure size change which won't affect the compilation but breaks > the ABI for shared library usage. > > I think, (1) is very distributive, and I don't see recently such > changes. I think, we should avoid (1) for non XX.11 releases.(or two > or three-year cycles if we decide that path) > > The (2) comes are very common due to the fact HW features are > evolving. I think, to address the (2), we have two options > a) Have reserved fields and have _init() function to initialize the structures > b) Follow YAGNI style and introduce RTE_NEXT_ABI for structure size change. > > The above concerns[1] can greatly reduce with option b OR option a. > > [1] > 1) more #ifdef clutter > For option (a) this is not needed or option (b) the clutter will be > limited, it will be around structure which add the new filed and > around the FULL block where new functions are added (not inside the > functions) > > 2) 2 binary versions to test > For option (a) this is not needed, for option (b) it is limited as for > new features only one needs to test another binary (rather than NOT > adding a new feature). > > 3) CI and checks must handle RTE_NEXT_ABI version > > I think, it is cheap to add this, at least for compilation test. > > IMO, We need to change the API break release to 3 year kind of time > frame to have very good end user experience > and allow ABI related change to get in every release and force > _rebuild_ shared objects in major LTS release. > > I think, in this major LTS version(23.11) if we can decide (a) vs (b) > then we can align the code accordingly . e.s.p for (a) we need to add > _init() functions. > > Thoughts?
Not much input from mailing list. Can we discuss this next TB meeting? Especially how to align with next LTS release on -YAGNI vs reserved fileds with init() -What it takes to Extend the API breaking release more than a year as first step.