struct iface_delete_queues_cbdata {
struct netdev *netdev;
- const int64_t *queue_ids;
- size_t n_queue_ids;
+ const struct ovsdb_datum *queues;
};
static bool
-queue_ids_include(const int64_t *ids, size_t n, int64_t target)
+queue_ids_include(const struct ovsdb_datum *queues, int64_t target)
{
- size_t low = 0;
- size_t high = n;
-
- while (low < high) {
- size_t mid = low + (high - low) / 2;
- if (target > ids[mid]) {
- high = mid;
- } else if (target < ids[mid]) {
- low = mid + 1;
- } else {
- return true;
- }
- }
- return false;
+ union ovsdb_atom atom;
+
+ atom.integer = target;
+ return ovsdb_datum_find_key(queues, &atom, OVSDB_TYPE_INTEGER) != UINT_MAX;
}
static void
{
struct iface_delete_queues_cbdata *cbdata = cbdata_;
- if (!queue_ids_include(cbdata->queue_ids, cbdata->n_queue_ids, queue_id)) {
+ if (!queue_ids_include(cbdata->queues, queue_id)) {
netdev_delete_queue(cbdata->netdev, queue_id);
}
}
/* Deconfigure queues that were deleted. */
cbdata.netdev = iface->netdev;
- cbdata.queue_ids = qos->key_queues;
- cbdata.n_queue_ids = qos->n_queues;
+ cbdata.queues = ovsrec_qos_get_queues(qos, OVSDB_TYPE_INTEGER,
+ OVSDB_TYPE_UUID);
netdev_dump_queues(iface->netdev, iface_delete_queues, &cbdata);
/* Configure queues for 'iface'. */