Exemplo n.º 1
0
static inline lagopus_result_t
bridgeq_mgr_map_to_array(void) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  if (bridgeq_table != NULL) {
    bridgeq_mgr_lock();
    n_bridgeqs = 0;

    if (lagopus_hashmap_size(&bridgeq_table) != 0) {
      /* NOTE:
       *   hashmap_iterate() is very slow.
       */
      ret = lagopus_hashmap_iterate(&bridgeq_table,
                                    iter_to_array,
                                    NULL);
    } else {
      ret = LAGOPUS_RESULT_OK;
    }
    bridgeq_mgr_unlock();
  } else {
    ret = LAGOPUS_RESULT_INVALID_OBJECT;
    lagopus_msg_warning("bridgeq_table is NULL.\n");
  }

  return ret;
}
Exemplo n.º 2
0
static inline lagopus_result_t
s_config_list(testobj_config_t ***list) {
  lagopus_result_t ret = LAGOPUS_RESULT_ANY_FAILURES;

  if (list != NULL) {
    size_t n = (size_t)lagopus_hashmap_size(&s_tbl);
    *list = NULL;
    if (n > 0) {
      testobj_config_t **configs = (testobj_config_t **)
                                   malloc(sizeof(testobj_config_t *) * n);
      if (configs != NULL) {
        testobj_config_iter_ctx_t ctx;
        ctx.m_configs = configs;
        ctx.m_n_configs = 0;
        ctx.m_max = n;
        ret = lagopus_hashmap_iterate(&s_tbl, s_config_iterate,
                                      (void *)&ctx);
        if (ret == LAGOPUS_RESULT_OK) {
          *list = configs;
          ret = (ssize_t)n;
        } else {
          free((void *)configs);
        }
      } else {
        ret = LAGOPUS_RESULT_NO_MEMORY;
      }
    } else {
      ret = LAGOPUS_RESULT_OK;
    }
  } else {
    ret = LAGOPUS_RESULT_INVALID_ARGS;
  }

  return ret;
}
Exemplo n.º 3
0
lagopus_result_t
get_port_desc(lagopus_hashmap_t *hm,
              struct port_desc_list *list,
              struct ofp_error *error) {
  (void) error;

  lagopus_hashmap_iterate(hm, port_do_desc_iterate, list);
  return LAGOPUS_RESULT_OK;
}
Exemplo n.º 4
0
static inline void
s_final_numa_thingies(void) {
  if (s_numa_nodes != NULL) {
    free((void *)s_numa_nodes);

    if (s_tbl != NULL) {
      (void)lagopus_hashmap_iterate(&s_tbl, s_free_all, NULL);
      (void)lagopus_hashmap_destroy(&s_tbl, true);
    }

    lagopus_msg_debug(5, "The NUMA aware memory allocator is finalized.\n");
  }
}
Exemplo n.º 5
0
lagopus_result_t
lagopus_get_port_statistics(lagopus_hashmap_t *hm,
                            struct ofp_port_stats_request *request,
                            struct port_stats_list *list,
                            struct ofp_error *error) {
  struct port *port;

  if (request->port_no == OFPP_ANY) {
    lagopus_hashmap_iterate(hm, port_do_stats_iterate, list);
  } else {
    if (lagopus_hashmap_find(hm, (void *)request->port_no, &port)
        != LAGOPUS_RESULT_OK) {
      error->type = OFPET_BAD_REQUEST;
      error->code = OFPBRC_BAD_PORT;
      lagopus_msg_info("port stats: %d: no such port (%d:%d)\n",
                       request->port_no, error->type, error->code);
      return LAGOPUS_RESULT_OFP_ERROR;
    }
    port_add_stats(port, list);
  }

  return LAGOPUS_RESULT_OK;
}