diff --git a/include/odp_packet_io.h b/include/odp_packet_io.h
index cfefac0..96d6039 100644
--- a/include/odp_packet_io.h
+++ b/include/odp_packet_io.h
@@ -40,8 +40,7 @@ typedef uint32_t odp_pktio_t;
  *
  * @return ODP packet IO handle or ODP_PKTIO_INVALID on error
  */
-odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool,
-			   odp_pktio_params_t *params);
+odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool);
 
 /**
  * Close an ODP packet IO instance
diff --git a/platform/linux-generic/source/odp_packet_io.c b/platform/linux-generic/source/odp_packet_io.c
index 33ade10..9067fea 100644
--- a/platform/linux-generic/source/odp_packet_io.c
+++ b/platform/linux-generic/source/odp_packet_io.c
@@ -13,17 +13,14 @@
 #include <odp_spinlock.h>
 #include <odp_shared_memory.h>
 #include <odp_packet_socket.h>
-#ifdef ODP_HAVE_NETMAP
-#include <odp_packet_netmap.h>
-#endif
 #include <odp_hints.h>
 #include <odp_config.h>
 #include <odp_queue_internal.h>
 #include <odp_schedule_internal.h>
 #include <odp_debug.h>
-
 #include <odp_pktio_socket.h>
 #ifdef ODP_HAVE_NETMAP
+#include <odp_packet_netmap.h>
 #include <odp_pktio_netmap.h>
 #endif
 
@@ -112,32 +109,13 @@ static void unlock_entry(pktio_entry_t *entry)
 	odp_spinlock_unlock(&entry->s.lock);
 }
 
-static void init_pktio_entry(pktio_entry_t *entry, odp_pktio_params_t *params)
+static void init_pktio_entry(pktio_entry_t *entry)
 {
 	set_taken(entry);
 	entry->s.inq_default = ODP_QUEUE_INVALID;
-	switch (params->type) {
-	case ODP_PKTIO_TYPE_SOCKET_BASIC:
-	case ODP_PKTIO_TYPE_SOCKET_MMSG:
-	case ODP_PKTIO_TYPE_SOCKET_MMAP:
-		memset(&entry->s.pkt_sock, 0, sizeof(entry->s.pkt_sock));
-		memset(&entry->s.pkt_sock_mmap, 0,
-		      sizeof(entry->s.pkt_sock_mmap));
-		break;
-#ifdef ODP_HAVE_NETMAP
-	case ODP_PKTIO_TYPE_NETMAP:
-		memset(&entry->s.pkt_nm, 0, sizeof(entry->s.pkt_nm));
-		break;
-#endif
-	default:
-		ODP_ERR("Packet I/O type not supported. Please recompile\n");
-		break;
-	}
-	/* Save pktio parameters, type is the most useful */
-	memcpy(&entry->s.params, params, sizeof(*params));
 }
 
-static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params)
+static odp_pktio_t alloc_lock_pktio_entry(void)
 {
 	odp_pktio_t id;
 	pktio_entry_t *entry;
@@ -148,7 +126,7 @@ static odp_pktio_t alloc_lock_pktio_entry(odp_pktio_params_t *params)
 		if (is_free(entry)) {
 			lock_entry(entry);
 			if (is_free(entry)) {
-				init_pktio_entry(entry, params);
+				init_pktio_entry(entry);
 				id = i + 1;
 				return id; /* return with entry locked! */
 			}
@@ -171,35 +149,13 @@ static int free_pktio_entry(odp_pktio_t id)
 	return 0;
 }
 
-odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool,
-			   odp_pktio_params_t *params)
+odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool)
 {
 	odp_pktio_t id;
 	pktio_entry_t *pktio_entry;
 	int res;
 
-	if (params == NULL) {
-		ODP_ERR("Invalid pktio params\n");
-		return ODP_PKTIO_INVALID;
-	}
-
-	switch (params->type) {
-	case ODP_PKTIO_TYPE_SOCKET_BASIC:
-	case ODP_PKTIO_TYPE_SOCKET_MMSG:
-	case ODP_PKTIO_TYPE_SOCKET_MMAP:
-		ODP_DBG("Allocating socket pktio\n");
-		break;
-#ifdef ODP_HAVE_NETMAP
-	case ODP_PKTIO_TYPE_NETMAP:
-		ODP_DBG("Allocating netmap pktio\n");
-		break;
-#endif
-	default:
-		ODP_ERR("Invalid pktio type: %02x\n", params->type);
-		return ODP_PKTIO_INVALID;
-	}
-
-	id = alloc_lock_pktio_entry(params);
+	id = alloc_lock_pktio_entry();
 	if (id == ODP_PKTIO_INVALID) {
 		ODP_ERR("No resources available.\n");
 		return ODP_PKTIO_INVALID;
@@ -208,44 +164,61 @@ odp_pktio_t odp_pktio_open(const char *dev, odp_buffer_pool_t pool,
 
 	pktio_entry = get_entry(id);
 
-	switch (params->type) {
-	case ODP_PKTIO_TYPE_SOCKET_BASIC:
-	case ODP_PKTIO_TYPE_SOCKET_MMSG:
-		res = setup_pkt_sock(&pktio_entry->s.pkt_sock, dev, pool);
-		if (res == -1) {
-			close_pkt_sock(&pktio_entry->s.pkt_sock);
-			free_pktio_entry(id);
-			id = ODP_PKTIO_INVALID;
-		}
-		break;
-	case ODP_PKTIO_TYPE_SOCKET_MMAP:
-		res = setup_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap, dev,
-				pool, params->sock_params.fanout);
-		if (res == -1) {
-			close_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap);
-			free_pktio_entry(id);
-			id = ODP_PKTIO_INVALID;
-		}
-		break;
-#ifdef ODP_HAVE_NETMAP
-	case ODP_PKTIO_TYPE_NETMAP:
+	/* TODO: getenv() got get priority of packet I/O type */
 
-		res = setup_pkt_netmap(&pktio_entry->s.pkt_nm, dev,
-				pool, &params->nm_params);
-		if (res == -1) {
-			close_pkt_netmap(&pktio_entry->s.pkt_nm);
-			free_pktio_entry(id);
-			id = ODP_PKTIO_INVALID;
-		}
-		break;
+	memset(&pktio_entry->s.pkt_sock, 0, sizeof(pktio_entry->s.pkt_sock));
+	memset(&pktio_entry->s.pkt_sock_mmap, 0, sizeof(pktio_entry->s.pkt_sock_mmap));
+#ifdef ODP_HAVE_NETMAP
+	memset(&pktio_entry->s.pkt_nm, 0, sizeof(pktio_entry->s.pkt_nm));
+
+	pktio_entry->s.params.ns_params->type = ODP_PKTIO_TYPE_NETMAP;
+	pktio_entry->s.params.nm_params->netmap_mode = ODP_NETMAP_MODE_SW; /*or ODP_NETMAP_MODE_HW, getenv()?*/
+	pktio_entry->s.params.nm_params->ringid = 0;
+	res = setup_pkt_netmap(&pktio_entry->s.pkt_nm, dev,
+			pool, params.nm_params);
+	if (res != -1) {
+		pktio_entry->s.params.type = pktio_entry->s.params.ns_params.type;
+		goto done;
+	} else
+		close_pkt_netmap(&pktio_entry->s.pkt_nm);
 #endif
-	default:
-		free_pktio_entry(id);
-		id = ODP_PKTIO_INVALID;
-		ODP_ERR("This type of I/O is not supported. Please recompile.\n");
-		break;
-	}
 
+	free_pktio_entry(id);
+	pktio_entry->s.params.sock_params.type = ODP_PKTIO_TYPE_SOCKET_BASIC;
+	pktio_entry->s.params.sock_params.fanout = 1; /* TODO: getenv for this */
+	res = setup_pkt_sock(&pktio_entry->s.pkt_sock, dev, pool);
+	if (res != -1) {
+		pktio_entry->s.params.type = pktio_entry->s.params.sock_params.type;
+		goto done;
+	} else
+		close_pkt_sock(&pktio_entry->s.pkt_sock);
+
+	free_pktio_entry(id);
+	pktio_entry->s.params.sock_params.type = ODP_PKTIO_TYPE_SOCKET_MMAP;
+	pktio_entry->s.params.sock_params.fanout = 1; /* TODO: getenv for this */
+	res = setup_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap, dev,
+			pool, 1); /* 1 fanout, should be from getenv() */
+	if (res != -1) {
+		pktio_entry->s.params.type = pktio_entry->s.params.sock_params.type;
+		goto done;
+	} else
+		close_pkt_sock_mmap(&pktio_entry->s.pkt_sock_mmap);
+
+	free_pktio_entry(id);
+	pktio_entry->s.params.sock_params.type = ODP_PKTIO_TYPE_SOCKET_MMSG;
+	pktio_entry->s.params.sock_params.fanout = 1; /* TODO: getenv for this */
+	res = setup_pkt_sock(&pktio_entry->s.pkt_sock, dev, pool);
+	if (res != -1) {
+		pktio_entry->s.params.type = pktio_entry->s.params.sock_params.type;
+		goto done;
+	} else
+		close_pkt_sock(&pktio_entry->s.pkt_sock);
+
+	free_pktio_entry(id);
+	ODP_ERR("Unable to init any I/O type.\n");
+	return ODP_PKTIO_INVALID;
+
+done:
 	unlock_entry(pktio_entry);
 	return id;
 }
diff --git a/test/generator/odp_generator.c b/test/generator/odp_generator.c
index ca84e4c..c386418 100644
--- a/test/generator/odp_generator.c
+++ b/test/generator/odp_generator.c
@@ -294,17 +294,13 @@ static void *gen_send_thread(void *arg)
 	odp_pktio_t pktio;
 	thread_args_t *thr_args;
 	odp_queue_t outq_def;
-	odp_pktio_params_t params;
-	socket_params_t *sock_params = &params.sock_params;
-
 	odp_buffer_t buf;
 
 	thr = odp_thread_id();
 	thr_args = arg;
 
 	/* Open a packet IO instance for this thread */
-	sock_params->type = 1;
-	pktio = odp_pktio_open(thr_args->pktio_dev, thr_args->pool, &params);
+	pktio = odp_pktio_open(thr_args->pktio_dev, thr_args->pool);
 	if (pktio == ODP_PKTIO_INVALID) {
 		ODP_ERR("  [%02i] Error: pktio create failed\n", thr);
 		return NULL;
@@ -459,10 +455,8 @@ static void *gen_recv_thread(void *arg)
 	odp_pktio_t pktio;
 	thread_args_t *thr_args;
 	odp_queue_t inq_def;
-	odp_pktio_params_t params;
 	char inq_name[ODP_QUEUE_NAME_LEN];
 	odp_queue_param_t qparam;
-	socket_params_t *sock_params = &params.sock_params;
 
 	odp_packet_t pkt;
 	odp_buffer_t buf;
@@ -471,8 +465,7 @@ static void *gen_recv_thread(void *arg)
 	thr_args = arg;
 
 	/* Open a packet IO instance for this thread */
-	sock_params->type = 1;
-	pktio = odp_pktio_open(thr_args->pktio_dev, thr_args->pool, &params);
+	pktio = odp_pktio_open(thr_args->pktio_dev, thr_args->pool);
 	if (pktio == ODP_PKTIO_INVALID) {
 		ODP_ERR("  [%02i] Error: pktio create failed\n", thr);
 		return NULL;
diff --git a/test/packet/odp_example_pktio.c b/test/packet/odp_example_pktio.c
index 3acb1fb..14b4140 100644
--- a/test/packet/odp_example_pktio.c
+++ b/test/packet/odp_example_pktio.c
@@ -98,8 +98,6 @@ static void *pktio_queue_thread(void *arg)
 	int ret;
 	unsigned long pkt_cnt = 0;
 	unsigned long err_cnt = 0;
-	odp_pktio_params_t params;
-	socket_params_t *sock_params = &params.sock_params;
 
 	thr = odp_thread_id();
 	thr_args = arg;
@@ -115,9 +113,7 @@ static void *pktio_queue_thread(void *arg)
 	}
 
 	/* Open a packet IO instance for this thread */
-	sock_params->type = thr_args->type;
-	sock_params->fanout = thr_args->fanout;
-	pktio = odp_pktio_open(thr_args->pktio_dev, pkt_pool, &params);
+	pktio = odp_pktio_open(thr_args->pktio_dev, pkt_pool);
 	if (pktio == ODP_PKTIO_INVALID) {
 		ODP_ERR("  [%02i] Error: pktio create failed\n", thr);
 		return NULL;
@@ -211,8 +207,6 @@ static void *pktio_ifburst_thread(void *arg)
 	unsigned long pkt_cnt = 0;
 	unsigned long err_cnt = 0;
 	unsigned long tmp = 0;
-	odp_pktio_params_t params;
-	socket_params_t *sock_params = &params.sock_params;
 
 	thr = odp_thread_id();
 	thr_args = arg;
@@ -228,9 +222,7 @@ static void *pktio_ifburst_thread(void *arg)
 	}
 
 	/* Open a packet IO instance for this thread */
-	sock_params->type = thr_args->type;
-	sock_params->fanout = thr_args->fanout;
-	pktio = odp_pktio_open(thr_args->pktio_dev, pkt_pool, &params);
+	pktio = odp_pktio_open(thr_args->pktio_dev, pkt_pool);
 	if (pktio == ODP_PKTIO_INVALID) {
 		ODP_ERR("  [%02i] Error: pktio create failed.\n", thr);
 		return NULL;
@@ -543,14 +535,6 @@ static void parse_args(int argc, char *argv[], appl_args_t *appl_args)
 				appl_args->mode = APPL_MODE_PKT_QUEUE;
 			break;
 
-		case 't':
-			appl_args->type = atoi(optarg);
-			break;
-
-		case 'f':
-			appl_args->fanout = atoi(optarg);
-			break;
-
 		case 'h':
 			usage(argv[0]);
 			exit(EXIT_SUCCESS);
@@ -620,12 +604,6 @@ static void usage(char *progname)
 	       "  -i, --interface Eth interfaces (comma-separated, no spaces)\n"
 	       "  -m, --mode      0: Burst send&receive packets (no queues)\n"
 	       "                  1: Send&receive packets through ODP queues.\n"
-	       " -t, --type   1: ODP_PKTIO_TYPE_SOCKET_BASIC\n"
-	       "	      2: ODP_PKTIO_TYPE_SOCKET_MMSG\n"
-	       "	      3: ODP_PKTIO_TYPE_SOCKET_MMAP\n"
-	       "	      4: ODP_PKTIO_TYPE_NETMAP\n"
-	       "	 Default: 3: ODP_PKTIO_TYPE_SOCKET_MMAP\n"
-	       " -f, --fanout 0: off 1: on (Default 1: on)\n"
 	       "\n"
 	       "Optional OPTIONS\n"
 	       "  -c, --count <number> Core count.\n"
diff --git a/test/packet_netmap/odp_example_pktio_netmap.c b/test/packet_netmap/odp_example_pktio_netmap.c
index f50f764..acabd0b 100644
--- a/test/packet_netmap/odp_example_pktio_netmap.c
+++ b/test/packet_netmap/odp_example_pktio_netmap.c
@@ -248,8 +248,6 @@ int main(int argc, char *argv[])
 	odp_buffer_pool_print(pool);
 
 	for (i = 0; i < 2 * args->appl.if_count; ++i) {
-		odp_pktio_params_t params;
-		netmap_params_t *nm_params = &params.nm_params;
 		char inq_name[ODP_QUEUE_NAME_LEN];
 		odp_queue_t inq_def;
 		odp_queue_param_t qparam;
@@ -260,18 +258,8 @@ int main(int argc, char *argv[])
 		 * the software ring associated with the physical interface
 		 */
 
-		args->pktios[i].pktio_dev = args->appl.ifs[i / 2].if_name;
-		memset(nm_params, 0, sizeof(*nm_params));
-		nm_params->type = ODP_PKTIO_TYPE_NETMAP;
-		if (i % 2) {
-			nm_params->netmap_mode = ODP_NETMAP_MODE_SW;
-			nm_params->ringid = 0;
-		} else {
-			nm_params->netmap_mode = ODP_NETMAP_MODE_HW;
-			nm_params->ringid = 0;
-		}
 		pktio = odp_pktio_open(args->pktios[i].pktio_dev,
-				       pool, &params);
+				       pool);
 		/* Open a packet IO instance for this thread */
 		if (pktio == ODP_PKTIO_INVALID) {
 			ODP_ERR("  [%02i] Err: pktio create\n", i);
@@ -280,7 +268,6 @@ int main(int argc, char *argv[])
 
 		args->pktios[i].pktio = pktio;
 		args->pktios[i].pool = pool;
-		args->pktios[i].netmap_mode = nm_params->netmap_mode;
 		/* Save pktio_info in the lookup table */
 		args->pktio_lt[pktio] = &args->pktios[i];
 		/*
