+ return MEMIF_ERR_SUCCESS;
+}
+
+int
+memif_init_regions_and_queues (memif_connection_t * conn)
+{
+ memif_region_t *r;
+ libmemif_main_t *lm = &libmemif_main;
+
+ /* region 0. rings */
+ memif_add_region (lm, conn, /* has_buffers */ 0);
+
+ /* region 1. buffers */
+ if (lm->add_external_region)
+ {
+ r =
+ (memif_region_t *) lm->realloc (conn->regions,
+ sizeof (memif_region_t) *
+ ++conn->regions_num);
+ if (r == NULL)
+ return MEMIF_ERR_NOMEM;
+ conn->regions = r;
+
+ conn->regions[1].region_size =
+ conn->run_args.buffer_size * (1 << conn->run_args.log2_ring_size) *
+ (conn->run_args.num_s2m_rings + conn->run_args.num_m2s_rings);
+ conn->regions[1].buffer_offset = 0;
+ lm->add_external_region (&conn->regions[1].addr,
+ conn->regions[1].region_size,
+ &conn->regions[1].fd, conn->private_ctx);
+ conn->regions[1].is_external = 1;
+ }
+ else
+ {
+ memif_add_region (lm, conn, 1);
+ }
+
+ memif_init_queues (lm, conn);
+