On 13 Jan 2026, at 14:32, Ilya Maximets wrote:
> On 1/12/26 12:20 PM, Eelco Chaudron wrote: >> We will initially move them to global functions/variables, and later >> patches will integrate them into the offload provider framework. >> >> Acked-by: Eli Britstein <elibr.nvidia.com> >> Signed-off-by: Eelco Chaudron <[email protected]> >> --- >> lib/dpif-netdev-avx512.c | 3 ++- >> lib/dpif-netdev.c | 13 ++++++----- >> lib/dpif-netlink.c | 18 +++++++++------ >> lib/dpif-offload.c | 39 ++++++++++++++++++++++++++++++++ >> lib/dpif-offload.h | 2 ++ >> lib/dpif.c | 5 ++-- >> lib/netdev-dpdk.c | 5 ++-- >> lib/netdev-linux.c | 3 ++- >> lib/netdev-offload.c | 26 +++------------------ >> lib/netdev-offload.h | 2 -- >> ofproto/ofproto-dpif-upcall.c | 5 ++-- >> ofproto/ofproto-dpif.c | 6 +++++ >> tests/ofproto-dpif.at | 10 ++++++-- >> tests/system-dpdk.at | 3 +++ >> tests/system-offloads-traffic.at | 3 +++ >> 15 files changed, 95 insertions(+), 48 deletions(-) >> >> diff --git a/lib/dpif-netdev-avx512.c b/lib/dpif-netdev-avx512.c >> index 83e7a1394..0cc566eae 100644 >> --- a/lib/dpif-netdev-avx512.c >> +++ b/lib/dpif-netdev-avx512.c >> @@ -23,6 +23,7 @@ >> #include "dpif-netdev.h" >> #include "dpif-netdev-perf.h" >> #include "dpif-netdev-private.h" >> +#include "dpif-offload.h" >> >> #include <errno.h> >> #include <immintrin.h> >> @@ -110,7 +111,7 @@ dp_netdev_input_outer_avx512(struct dp_netdev_pmd_thread >> *pmd, >> >> in_port); >> /* Check if EMC or SMC are enabled. */ >> struct dfc_cache *cache = &pmd->flow_cache; >> - const uint32_t hwol_enabled = netdev_is_flow_api_enabled(); >> + const uint32_t hwol_enabled = dpif_offload_is_offload_enabled(); >> const uint32_t emc_enabled = pmd->ctx.emc_insert_min != 0; >> const uint32_t smc_enabled = pmd->ctx.smc_enable_db; >> >> diff --git a/lib/dpif-netdev.c b/lib/dpif-netdev.c >> index 224ce7086..2e31041ef 100644 >> --- a/lib/dpif-netdev.c >> +++ b/lib/dpif-netdev.c >> @@ -18,6 +18,7 @@ >> #include "dpif-netdev.h" >> #include "dpif-netdev-private.h" >> #include "dpif-netdev-private-dfc.h" >> +#include "dpif-offload.h" >> >> #include <ctype.h> >> #include <errno.h> >> @@ -2993,7 +2994,7 @@ queue_netdev_flow_del(struct dp_netdev_pmd_thread *pmd, >> { >> struct dp_offload_thread_item *offload; >> >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return; >> } >> >> @@ -3077,7 +3078,7 @@ queue_netdev_flow_put(struct dp_netdev_pmd_thread *pmd, >> struct dp_offload_thread_item *item; >> struct dp_offload_flow_item *flow_offload; >> >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return; >> } >> >> @@ -3171,7 +3172,7 @@ dp_netdev_offload_flush(struct dp_netdev *dp, >> static struct ovs_barrier barrier OVS_GUARDED_BY(flush_mutex); >> struct netdev *netdev; >> >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return; >> } >> >> @@ -3700,7 +3701,7 @@ dpif_netdev_get_flow_offload_status(const struct >> dp_netdev *dp, >> >> int ret = 0; >> >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return false; >> } >> >> @@ -4769,7 +4770,7 @@ dpif_netdev_offload_stats_get(struct dpif *dpif, >> unsigned int tid; >> size_t i; >> >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return EINVAL; >> } >> >> @@ -8516,7 +8517,7 @@ dfc_processing(struct dp_netdev_pmd_thread *pmd, >> size_t *n_flows, uint8_t *index_map, >> bool md_is_valid, odp_port_t port_no) >> { >> - const bool netdev_flow_api = netdev_is_flow_api_enabled(); >> + const bool netdev_flow_api = dpif_offload_is_offload_enabled(); >> const uint32_t recirc_depth = *recirc_depth_get(); >> const size_t cnt = dp_packet_batch_size(packets_); >> size_t n_missed = 0, n_emc_hit = 0, n_phwol_hit = 0; >> diff --git a/lib/dpif-netlink.c b/lib/dpif-netlink.c >> index 691c69650..e7e55bc05 100644 >> --- a/lib/dpif-netlink.c >> +++ b/lib/dpif-netlink.c >> @@ -34,6 +34,7 @@ >> >> #include "bitmap.h" >> #include "dpif-netlink-rtnl.h" >> +#include "dpif-offload.h" >> #include "dpif-provider.h" >> #include "fat-rwlock.h" >> #include "flow.h" >> @@ -1316,7 +1317,7 @@ dpif_netlink_flow_flush(struct dpif *dpif_) >> flow.cmd = OVS_FLOW_CMD_DEL; >> flow.dp_ifindex = dpif->dp_ifindex; >> >> - if (netdev_is_flow_api_enabled()) { >> + if (dpif_offload_is_offload_enabled()) { >> netdev_ports_flow_flush(dpif_type_str); >> } >> >> @@ -2323,7 +2324,8 @@ parse_flow_put(struct dpif_netlink *dpif, struct >> dpif_flow_put *put) >> } else if (err != EEXIST) { >> struct netdev *oor_netdev = NULL; >> enum vlog_level level; >> - if (err == ENOSPC && netdev_is_offload_rebalance_policy_enabled()) { >> + if (err == ENOSPC >> + && dpif_offload_is_offload_rebalance_policy_enabled()) { >> /* >> * We need to set OOR on the input netdev (i.e, 'dev') for the >> * flow. But if the flow has a tunnel attribute (i.e, decap >> action, >> @@ -2442,12 +2444,14 @@ dpif_netlink_operate(struct dpif *dpif_, struct >> dpif_op **ops, size_t n_ops, >> int i = 0; >> int err = 0; >> >> - if (offload_type == DPIF_OFFLOAD_ALWAYS && >> !netdev_is_flow_api_enabled()) { >> + if (offload_type == DPIF_OFFLOAD_ALWAYS >> + && !dpif_offload_is_offload_enabled()) { >> VLOG_DBG("Invalid offload_type: %d", offload_type); >> return; >> } >> >> - if (offload_type != DPIF_OFFLOAD_NEVER && netdev_is_flow_api_enabled()) >> { >> + if (offload_type != DPIF_OFFLOAD_NEVER >> + && dpif_offload_is_offload_enabled()) { >> while (n_ops > 0) { >> count = 0; >> >> @@ -4237,7 +4241,7 @@ dpif_netlink_meter_set(struct dpif *dpif_, >> ofproto_meter_id meter_id, >> } >> >> err = dpif_netlink_meter_set__(dpif_, meter_id, config); >> - if (!err && netdev_is_flow_api_enabled()) { >> + if (!err && dpif_offload_is_offload_enabled()) { >> meter_offload_set(meter_id, config); >> } >> >> @@ -4344,7 +4348,7 @@ dpif_netlink_meter_get(const struct dpif *dpif, >> ofproto_meter_id meter_id, >> >> err = dpif_netlink_meter_get_stats(dpif, meter_id, stats, max_bands, >> OVS_METER_CMD_GET); >> - if (!err && netdev_is_flow_api_enabled()) { >> + if (!err && dpif_offload_is_offload_enabled()) { >> meter_offload_get(meter_id, stats); >> } >> >> @@ -4359,7 +4363,7 @@ dpif_netlink_meter_del(struct dpif *dpif, >> ofproto_meter_id meter_id, >> >> err = dpif_netlink_meter_get_stats(dpif, meter_id, stats, >> max_bands, OVS_METER_CMD_DEL); >> - if (!err && netdev_is_flow_api_enabled()) { >> + if (!err && dpif_offload_is_offload_enabled()) { >> meter_offload_del(meter_id, stats); >> } >> >> diff --git a/lib/dpif-offload.c b/lib/dpif-offload.c >> index d65a887f7..964909e8a 100644 >> --- a/lib/dpif-offload.c >> +++ b/lib/dpif-offload.c >> @@ -52,6 +52,8 @@ static const struct dpif_offload_class >> *base_dpif_offload_classes[] = { >> #define DEFAULT_PROVIDER_PRIORITY_LIST "tc,dpdk,dummy,dummy_x" >> >> static char *dpif_offload_provider_priority_list = NULL; >> +static atomic_bool dpif_offload_global_enabled = false; >> +static atomic_bool dpif_offload_rebalance_policy = false; > > All of the above are local to this module, they don't need to have > dpif_offload prefix. ack, will remove it. >> >> static int >> dpif_offload_register_provider__(const struct dpif_offload_class *class) >> @@ -380,6 +382,24 @@ dpif_offload_class_type(const struct dpif_offload >> *offload) >> return offload->class->type; >> } >> >> +bool >> +dpif_offload_is_offload_enabled(void) > > dpif_offload_is_enabled() or just dpif_offload_enabled(). Will rename to dpif_offload_enabled(), and in all following patches :( >> +{ >> + bool enabled; >> + >> + atomic_read_relaxed(&dpif_offload_global_enabled, &enabled); >> + return enabled; >> +} >> + >> +bool >> +dpif_offload_is_offload_rebalance_policy_enabled(void) > > dpif_offload_rebalance_policy_enabled() Ack >> +{ >> + bool enabled; >> + >> + atomic_read_relaxed(&dpif_offload_rebalance_policy, &enabled); >> + return enabled; >> +} >> + >> void >> dpif_offload_dump_start(struct dpif_offload_dump *dump, >> const struct dpif *dpif) >> @@ -492,4 +512,23 @@ dpif_offload_set_global_cfg(const struct smap >> *other_cfg) >> "restart required"); >> } >> } >> + >> + /* Handle other global configuration settings. >> + * >> + * According to the manual the 'hw-offload' parameter requires a restart >> + * when changed. In practice this is only needed on disable, as it will >> + * not actually disable hw-offload when requested. */ > > Is this actually true? It works in maost cases when enabled after the > OVS is running, but I'm not sure if everything will work as expected if > some traffic is already flowing as that traffic may never get offloaded. I know for sure meter offload is not working. There might be other features not working correctly. Let me remove this comment to avoid confusion. >> + if (smap_get_bool(other_cfg, "hw-offload", false)) { >> + static struct ovsthread_once once_enable = >> OVSTHREAD_ONCE_INITIALIZER; >> + >> + if (ovsthread_once_start(&once_enable)) { >> + atomic_store_relaxed(&dpif_offload_global_enabled, true); >> + >> + if (smap_get_bool(other_cfg, "offload-rebalance", false)) { >> + atomic_store_relaxed(&dpif_offload_rebalance_policy, true); >> + } >> + >> + ovsthread_once_done(&once_enable); >> + } >> + } >> } >> diff --git a/lib/dpif-offload.h b/lib/dpif-offload.h >> index 43d8b6b74..f35f9b8a8 100644 >> --- a/lib/dpif-offload.h >> +++ b/lib/dpif-offload.h >> @@ -33,6 +33,8 @@ struct dpif_offload_dump { >> >> /* Global functions. */ >> void dpif_offload_set_global_cfg(const struct smap *other_cfg); >> +bool dpif_offload_is_offload_enabled(void); >> +bool dpif_offload_is_offload_rebalance_policy_enabled(void); >> >> >> /* Per dpif specific functions. */ >> diff --git a/lib/dpif.c b/lib/dpif.c >> index 7b7c85c72..91fa00888 100644 >> --- a/lib/dpif.c >> +++ b/lib/dpif.c >> @@ -1341,7 +1341,8 @@ void >> dpif_operate(struct dpif *dpif, struct dpif_op **ops, size_t n_ops, >> enum dpif_offload_type offload_type) >> { >> - if (offload_type == DPIF_OFFLOAD_ALWAYS && >> !netdev_is_flow_api_enabled()) { >> + if (offload_type == DPIF_OFFLOAD_ALWAYS >> + && !dpif_offload_is_offload_enabled()) { >> size_t i; >> for (i = 0; i < n_ops; i++) { >> struct dpif_op *op = ops[i]; >> @@ -1929,7 +1930,7 @@ bool >> dpif_may_support_explicit_drop_action(const struct dpif *dpif) >> { >> /* TC does not support offloading this action. */ >> - return dpif_is_netdev(dpif) || !netdev_is_flow_api_enabled(); >> + return dpif_is_netdev(dpif) || !dpif_offload_is_offload_enabled(); >> } >> >> bool >> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c >> index 55278c245..d4e504c4e 100644 >> --- a/lib/netdev-dpdk.c >> +++ b/lib/netdev-dpdk.c >> @@ -47,6 +47,7 @@ >> #include "dirs.h" >> #include "dp-packet.h" >> #include "dpdk.h" >> +#include "dpif-offload.h" >> #include "dpif-netdev.h" >> #include "fatal-signal.h" >> #include "if-notifier.h" >> @@ -1315,7 +1316,7 @@ dpdk_eth_dev_init(struct netdev_dpdk *dev) >> RTE_ETH_RX_OFFLOAD_TCP_CKSUM | >> RTE_ETH_RX_OFFLOAD_IPV4_CKSUM; >> >> - if (netdev_is_flow_api_enabled()) { >> + if (dpif_offload_is_offload_enabled()) { >> /* >> * Full tunnel offload requires that tunnel ID metadata be >> * delivered with "miss" packets from the hardware to the >> @@ -2268,7 +2269,7 @@ dpdk_set_rx_steer_config(struct netdev *netdev, struct >> netdev_dpdk *dev, >> flags = 0; >> } >> >> - if (flags && netdev_is_flow_api_enabled()) { >> + if (flags && dpif_offload_is_offload_enabled()) { >> VLOG_WARN_BUF(errp, "%s: options:rx-steering " >> "is incompatible with hw-offload", >> netdev_get_name(netdev)); >> diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c >> index 8bf1a29a0..d6054e911 100644 >> --- a/lib/netdev-linux.c >> +++ b/lib/netdev-linux.c >> @@ -52,6 +52,7 @@ >> #include "dp-packet.h" >> #include "dpif-netlink.h" >> #include "dpif-netdev.h" >> +#include "dpif-offload.h" >> #include "openvswitch/dynamic-string.h" >> #include "fatal-signal.h" >> #include "hash.h" >> @@ -3065,7 +3066,7 @@ netdev_linux_set_policing(struct netdev *netdev_, >> uint32_t kbits_rate, >> COVERAGE_INC(netdev_set_policing); >> >> /* Use matchall for policing when offloadling ovs with tc-flower. */ >> - if (netdev_is_flow_api_enabled()) { >> + if (dpif_offload_is_offload_enabled()) { >> error = tc_del_matchall_policer(netdev_); >> if (kbits_rate || kpkts_rate) { >> error = tc_add_matchall_policer(netdev_, kbits_rate, >> kbits_burst, >> diff --git a/lib/netdev-offload.c b/lib/netdev-offload.c >> index 8a9d36555..01fdadbc3 100644 >> --- a/lib/netdev-offload.c >> +++ b/lib/netdev-offload.c >> @@ -29,6 +29,7 @@ >> #include "cmap.h" >> #include "coverage.h" >> #include "dpif.h" >> +#include "dpif-offload.h" >> #include "dp-packet.h" >> #include "openvswitch/dynamic-string.h" >> #include "fatal-signal.h" >> @@ -59,7 +60,6 @@ VLOG_DEFINE_THIS_MODULE(netdev_offload); >> >> >> static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5); >> -static bool netdev_flow_api_enabled = false; >> >> #define DEFAULT_OFFLOAD_THREAD_NB 1 >> #define MAX_OFFLOAD_THREAD_NB 10 >> @@ -389,7 +389,7 @@ netdev_flow_get_n_flows(struct netdev *netdev, uint64_t >> *n_flows) >> int >> netdev_init_flow_api(struct netdev *netdev) >> { >> - if (!netdev_is_flow_api_enabled()) { >> + if (!dpif_offload_is_offload_enabled()) { >> return EOPNOTSUPP; >> } >> >> @@ -527,12 +527,6 @@ netdev_any_oor(void) >> return oor; >> } >> >> -bool >> -netdev_is_flow_api_enabled(void) >> -{ >> - return netdev_flow_api_enabled; >> -} >> - >> unsigned int >> netdev_offload_thread_nb(void) >> { >> @@ -846,14 +840,6 @@ netdev_ifindex_to_odp_port(int ifindex) >> return ret; >> } >> >> -static bool netdev_offload_rebalance_policy = false; >> - >> -bool >> -netdev_is_offload_rebalance_policy_enabled(void) >> -{ >> - return netdev_offload_rebalance_policy; >> -} >> - >> static void >> netdev_ports_flow_init(void) >> { >> @@ -869,11 +855,10 @@ netdev_ports_flow_init(void) >> void >> netdev_set_flow_api_enabled(const struct smap *ovs_other_config) >> { >> - if (smap_get_bool(ovs_other_config, "hw-offload", false)) { >> + if (dpif_offload_is_offload_enabled()) { >> static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER; >> >> if (ovsthread_once_start(&once)) { >> - netdev_flow_api_enabled = true; >> >> offload_thread_nb = smap_get_ullong(ovs_other_config, >> "n-offload-threads", >> @@ -897,11 +882,6 @@ netdev_set_flow_api_enabled(const struct smap >> *ovs_other_config) >> tc_set_policy(smap_get_def(ovs_other_config, "tc-policy", >> TC_POLICY_DEFAULT)); >> #endif >> - >> - if (smap_get_bool(ovs_other_config, "offload-rebalance", >> false)) { >> - netdev_offload_rebalance_policy = true; >> - } >> - >> netdev_ports_flow_init(); >> >> ovsthread_once_done(&once); >> diff --git a/lib/netdev-offload.h b/lib/netdev-offload.h >> index 7fc30a424..5a18727eb 100644 >> --- a/lib/netdev-offload.h >> +++ b/lib/netdev-offload.h >> @@ -123,9 +123,7 @@ uint32_t netdev_get_block_id(struct netdev *); >> int netdev_get_hw_info(struct netdev *, int); >> void netdev_set_hw_info(struct netdev *, int, int); >> bool netdev_any_oor(void); >> -bool netdev_is_flow_api_enabled(void); >> void netdev_set_flow_api_enabled(const struct smap *ovs_other_config); >> -bool netdev_is_offload_rebalance_policy_enabled(void); >> int netdev_flow_get_n_flows(struct netdev *netdev, uint64_t *n_flows); >> >> struct dpif_port; >> diff --git a/ofproto/ofproto-dpif-upcall.c b/ofproto/ofproto-dpif-upcall.c >> index 9dfa52d82..4273b3ea6 100644 >> --- a/ofproto/ofproto-dpif-upcall.c >> +++ b/ofproto/ofproto-dpif-upcall.c >> @@ -24,6 +24,7 @@ >> #include "cmap.h" >> #include "lib/dpif-provider.h" >> #include "dpif.h" >> +#include "dpif-offload.h" >> #include "openvswitch/dynamic-string.h" >> #include "fail-open.h" >> #include "guarded-list.h" >> @@ -1070,7 +1071,7 @@ udpif_revalidator(void *arg) >> >> dpif_flow_dump_destroy(udpif->dump); >> seq_change(udpif->dump_seq); >> - if (netdev_is_offload_rebalance_policy_enabled()) { >> + if (dpif_offload_is_offload_rebalance_policy_enabled()) { >> udpif_run_flow_rebalance(udpif); >> } >> >> @@ -2963,7 +2964,7 @@ revalidate(struct revalidator *revalidator) >> } >> ukey->dump_seq = dump_seq; >> >> - if (netdev_is_offload_rebalance_policy_enabled() && >> + if (dpif_offload_is_offload_rebalance_policy_enabled() && >> result != UKEY_DELETE) { >> udpif_update_flow_pps(udpif, ukey, f); >> } >> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c >> index e502c2637..7f76c7864 100644 >> --- a/ofproto/ofproto-dpif.c >> +++ b/ofproto/ofproto-dpif.c >> @@ -6757,6 +6757,9 @@ ofproto_unixctl_dpif_offload_show(struct unixctl_conn >> *conn, >> struct json *backers = json_object_create(); >> const struct shash_node *backer; >> >> + json_object_put(backers, "enabled", >> + json_boolean_create(dpif_offload_is_offload_enabled())); >> + >> SHASH_FOR_EACH (backer, &all_dpif_backers) { >> dpif_offload_show_backer_json(backers, backer->data); >> } >> @@ -6765,6 +6768,9 @@ ofproto_unixctl_dpif_offload_show(struct unixctl_conn >> *conn, >> const struct shash_node **backers = shash_sort(&all_dpif_backers); >> struct ds ds = DS_EMPTY_INITIALIZER; >> >> + ds_put_format(&ds, "Globally enabled: %s\nDatapaths:\n", >> + dpif_offload_is_offload_enabled() ? "true" : "false"); >> + >> for (int i = 0; i < shash_count(&all_dpif_backers); i++) { >> dpif_offload_show_backer_text(backers[i]->data, &ds); >> } >> diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at >> index 1d80fc439..fb14d23a3 100644 >> --- a/tests/ofproto-dpif.at >> +++ b/tests/ofproto-dpif.at >> @@ -10109,6 +10109,8 @@ AT_KEYWORDS([dpif-offload]) >> OVS_VSWITCHD_START([add-br br1 -- set bridge br1 datapath-type=dummy]) >> >> AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl >> +Globally enabled: false >> +Datapaths: >> dummy@ovs-dummy: >> dummy >> dummy_x >> @@ -10119,7 +10121,8 @@ AT_CHECK([ovs-appctl --format json --pretty >> dpif/offload/show], [0], [dnl >> "dummy@ovs-dummy": { >> "providers": [[ >> "dummy", >> - "dummy_x"]]}} >> + "dummy_x"]]}, >> + "enabled": false} >> ]) >> >> OVS_VSWITCHD_STOP >> @@ -10144,6 +10147,8 @@ OVS_VSWITCHD_START([add-br br1 -- set bridge br1 >> datapath-type=dummy], [], [], >> [], [-- set Open_vSwitch . >> other_config:hw-offload-priority=dummy_x,dummy]) >> >> AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl >> +Globally enabled: false >> +Datapaths: >> dummy@ovs-dummy: >> dummy_x >> dummy >> @@ -10154,7 +10159,8 @@ AT_CHECK([ovs-appctl --format json --pretty >> dpif/offload/show], [0], [dnl >> "dummy@ovs-dummy": { >> "providers": [[ >> "dummy_x", >> - "dummy"]]}} >> + "dummy"]]}, >> + "enabled": false} >> ]) >> >> OVS_TRAFFIC_VSWITCHD_STOP >> diff --git a/tests/system-dpdk.at b/tests/system-dpdk.at >> index e666a08c7..c1910b756 100644 >> --- a/tests/system-dpdk.at >> +++ b/tests/system-dpdk.at >> @@ -950,12 +950,15 @@ OVS_DPDK_START([--no-pci]) >> AT_CHECK([ovs-vsctl add-br br0 -- set bridge br0 datapath_type=netdev]) >> >> AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl >> +Globally enabled: false >> +Datapaths: >> netdev@ovs-netdev: >> dpdk >> ]) >> >> AT_CHECK([ovs-appctl --format json --pretty dpif/offload/show], [0], [dnl >> { >> + "enabled": false, >> "netdev@ovs-netdev": { >> "providers": [[ >> "dpdk"]]}} >> diff --git a/tests/system-offloads-traffic.at >> b/tests/system-offloads-traffic.at >> index 894306385..92d3523dc 100644 >> --- a/tests/system-offloads-traffic.at >> +++ b/tests/system-offloads-traffic.at >> @@ -1173,12 +1173,15 @@ OVS_TRAFFIC_VSWITCHD_START([], [], >> [-- set Open_vSwitch . other_config:hw-offload=true]) >> >> AT_CHECK([ovs-appctl dpif/offload/show], [0], [dnl >> +Globally enabled: true >> +Datapaths: >> system@ovs-system: >> tc >> ]) >> >> AT_CHECK([ovs-appctl --format json --pretty dpif/offload/show], [0], [dnl >> { >> + "enabled": true, >> "system@ovs-system": { >> "providers": [[ >> "tc"]]}} _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
