On Thu, Apr 28, 2022 at 10:04:17AM -0400, Aaron Conole wrote: > lic121 <lic...@chinatelecom.cn> writes: > > > On Mon, Apr 25, 2022 at 08:47:32AM -0400, Aaron Conole wrote: > >> lic121 <lic...@chinatelecom.cn> writes: > >> > >> > Max allowed conntrack entries is configurable with > >> > 'ovs-appctl dpctl/ct-set-maxconns' command. In real scenarios, > >> > this configuration is expected to survive from host reboot. > >> > > >> > Signed-off-by: lic121 <lic...@chinatelecom.cn> > >> > --- > >> > >> One complication is that there are 2 other conntrack implementations > >> that OvS supports - one for the Windows Netlink, and the other for > >> Linux kernel netlink. How do you deal with this parameter there? > > > > As linux kernel datapath leverages the kernel implementent of conntrack. > > Besides ovs, the kernel conntrack is used by kernel network stack > > itself. A proper way to set linux kernel datapath conntrack max conns > > could be sysctl interface (nf_conntrack_max). > > But I am not sure if a similar system level configuration exists for windows > > datapath. > > > >> > >> Something in the datapath for this needs to accommodate these. Maybe > >> the DB should store the datapath name as well - that way each dp can > >> lookup the configuration if supported (and if not we can either log the > >> error, etc). That does start to look a bit unfriendly, but at least it > >> prevents user confusion with this knob. > > > > Agree, to indiates the datapath name in configuration item name is > > better than explanation in configuration detail description. > > How about the name "userspace-ct-maxconns"? > > I guess that should be fine. I might prefer 'netdev-conntrack-maxconns' > or something to that effect. "userspace" makes sense to developers, but > we usually call the userspace side the "netdev" datapath.
When we say 'netdev', one may think it as 'netdev datapath'. This is what we expect. But I wonder if someone else may think it as ovs 'netdev library' that abstracts interacting with network devices. > > Ilya, might have some suggestion. > > >> > >> Each CT dp interface does something slightly differently for > >> configuration, and I'm not sure this knob as proposed is the best > >> solution. > >> > >> The 'deprecated' command was only implemented for the userspace DP, but > >> in theory it could work independently for all. I'm not sure this one > >> can work though (for example, if we use AF_XDP for some bridge, but > >> kernel DP for another, we would want to have two different max entry > >> values, but this interface doesn't allow that). > >> > >> > lib/dpctl.man | 3 ++- > >> > lib/dpif-netdev.c | 10 ++++++++++ > >> > tests/system-traffic.at | 10 ++++++++++ > >> > vswitchd/vswitch.xml | 7 +++++++ > >> > 4 files changed, 29 insertions(+), 1 deletion(-) > >> > > >> > diff --git a/lib/dpctl.man b/lib/dpctl.man > >> > index c100d0a..2cfc4f2 100644 > >> > --- a/lib/dpctl.man > >> > +++ b/lib/dpctl.man > >> > @@ -343,7 +343,8 @@ system due to connection tracking or simply limiting > >> > connection > >> > tracking. If the number of connections is already over the new maximum > >> > limit request then the new maximum limit will be enforced when the > >> > number of connections decreases to that limit, which normally happens > >> > -due to connection expiry. Only supported for userspace datapath. > >> > +due to connection expiry. Only supported for userspace datapath. This > >> > +command is deprecated by ovsdb cfg other_config:ct-maxconns. > >> > . > >> > .TP > >> > \*(DX\fBct\-get\-maxconns\fR [\fIdp\fR] > >> > diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c > >> > index 6764343..c518d30 100644 > >> > --- a/lib/dpif-netdev.c > >> > +++ b/lib/dpif-netdev.c > >> > @@ -4827,6 +4827,16 @@ dpif_netdev_set_config(struct dpif *dpif, const > >> > struct smap *other_config) > >> > } > >> > } > >> > > >> > + uint32_t ct_maxconns, cur_maxconns; > >> > + ct_maxconns = smap_get_int(other_config, "ct-maxconns", UINT32_MAX); > >> > + /* Leave runtime value as it is when cfg is removed. */ > >> > + if (ct_maxconns < UINT32_MAX) { > >> > + conntrack_get_maxconns(dp->conntrack, &cur_maxconns); > >> > + if (ct_maxconns != cur_maxconns) { > >> > + conntrack_set_maxconns(dp->conntrack, ct_maxconns); > >> > + } > >> > + } > >> > + > >> > bool smc_enable = smap_get_bool(other_config, "smc-enable", false); > >> > bool cur_smc; > >> > atomic_read_relaxed(&dp->smc_enable_db, &cur_smc); > >> > diff --git a/tests/system-traffic.at b/tests/system-traffic.at > >> > index 4a7fa49..00fefc5 100644 > >> > --- a/tests/system-traffic.at > >> > +++ b/tests/system-traffic.at > >> > @@ -2258,6 +2258,16 @@ AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], > >> > [dnl > >> > 10 > >> > ]) > >> > > >> > +AT_CHECK([ovs-vsctl set Open_vswitch . other_config:ct-maxconns=20], > >> > [0]) > >> > +AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl > >> > +20 > >> > +]) > >> > + > >> > +AT_CHECK([ovs-vsctl remove Open_vswitch . other_config ct-maxconns], > >> > [0]) > >> > +AT_CHECK([ovs-appctl dpctl/ct-get-maxconns], [], [dnl > >> > +20 > >> > +]) > >> > + > >> > OVS_TRAFFIC_VSWITCHD_STOP > >> > AT_CLEANUP > >> > > >> > diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml > >> > index 0c66326..ec634d5 100644 > >> > --- a/vswitchd/vswitch.xml > >> > +++ b/vswitchd/vswitch.xml > >> > @@ -183,6 +183,13 @@ > >> > </p> > >> > </column> > >> > > >> > + <column name="other_config" key="ct-maxconns" > >> > + type='{"type": "integer", "minInteger": 0}'> > >> > + The maximum number of connection tracker entries allowed in the > >> > + datapath. Only supported for userspace datapath. This > >> > deprecates > >> > + "ovs-appctl dpctl/ct-set-maxconns" command. > >> > + </column> > >> > + > >> > <column name="other_config" key="max-idle" > >> > type='{"type": "integer", "minInteger": 500}'> > >> > <p> > >> > _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev