diff --git a/platform/linux-dpdk/Makefile.am b/platform/linux-dpdk/Makefile.am
index 9ebf2ea1..9d32defd 100644
--- a/platform/linux-dpdk/Makefile.am
+++ b/platform/linux-dpdk/Makefile.am
@@ -191,12 +191,12 @@ noinst_HEADERS = \
 		  ${srcdir}/include/odp_packet_internal.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_pktio_ops_ipc.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_pktio_ops_subsystem.h \
+		  ${top_srcdir}/platform/linux-generic/include/odp_pktio_ops_socket.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_pktio_ops_loopback.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_name_table_internal.h \
 		  ${srcdir}/include/odp_packet_io_internal.h \
 		  ${srcdir}/include/odp_errno_define.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_packet_io_ring_internal.h \
-		  ${top_srcdir}/platform/linux-generic/include/odp_packet_socket.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_pkt_queue_internal.h \
 		  ${srcdir}/include/odp_pool_internal.h \
 		  ${top_srcdir}/platform/linux-generic/include/odp_pool_subsystem.h \
diff --git a/platform/linux-generic/Makefile.am b/platform/linux-generic/Makefile.am
index 78283c01..b3ee86c6 100644
--- a/platform/linux-generic/Makefile.am
+++ b/platform/linux-generic/Makefile.am
@@ -187,12 +187,12 @@ noinst_HEADERS = \
 		  ${srcdir}/include/odp_packet_io_internal.h \
 		  ${srcdir}/include/odp_packet_io_ring_internal.h \
 		  ${srcdir}/include/odp_packet_dpdk.h \
-		  ${srcdir}/include/odp_packet_socket.h \
 		  ${srcdir}/include/odp_packet_tap.h \
 		  ${srcdir}/include/odp_pktio_ops_ipc.h \
 		  ${srcdir}/include/odp_pktio_ops_loopback.h \
 		  ${srcdir}/include/odp_pktio_ops_netmap.h \
 		  ${srcdir}/include/odp_pktio_ops_pcap.h \
+		  ${srcdir}/include/odp_pktio_ops_socket.h \
 		  ${srcdir}/include/odp_pktio_ops_subsystem.h \
 		  ${srcdir}/include/odp_pkt_queue_internal.h \
 		  ${srcdir}/include/odp_pool_internal.h \
diff --git a/platform/linux-generic/include/odp_packet_io_internal.h b/platform/linux-generic/include/odp_packet_io_internal.h
index a3890091..f58ef872 100644
--- a/platform/linux-generic/include/odp_packet_io_internal.h
+++ b/platform/linux-generic/include/odp_packet_io_internal.h
@@ -31,7 +31,6 @@ extern "C" {
 #include <net/if.h>
 
 #define PKTIO_MAX_QUEUES 64
-#include <odp_packet_socket.h>
 #include <odp_packet_tap.h>
 #include <odp_packet_dpdk.h>
 
@@ -59,9 +58,6 @@ struct pktio_entry {
 	int cls_enabled;		/**< is classifier enabled */
 	odp_pktio_t handle;		/**< pktio handle */
 	union {
-		pkt_sock_t pkt_sock;		/**< using socket API for IO */
-		pkt_sock_mmap_t pkt_sock_mmap;	/**< using socket mmap
-						 *   API for IO */
 		pkt_dpdk_t pkt_dpdk;		/**< using DPDK for IO */
 		pkt_tap_t pkt_tap;		/**< using TAP for IO */
 	};
diff --git a/platform/linux-generic/include/odp_packet_socket.h b/platform/linux-generic/include/odp_pktio_ops_socket.h
similarity index 96%
rename from platform/linux-generic/include/odp_packet_socket.h
rename to platform/linux-generic/include/odp_pktio_ops_socket.h
index 0e61f6f0..32c49c08 100644
--- a/platform/linux-generic/include/odp_packet_socket.h
+++ b/platform/linux-generic/include/odp_pktio_ops_socket.h
@@ -5,8 +5,8 @@
  * SPDX-License-Identifier:     BSD-3-Clause
  */
 
-#ifndef ODP_PACKET_SOCKET_H
-#define ODP_PACKET_SOCKET_H
+#ifndef ODP_PKTIO_OPS_SOCKET_H_
+#define ODP_PKTIO_OPS_SOCKET_H_
 
 #include <linux/if_packet.h>
 #include <linux/if_ether.h>
@@ -42,7 +42,7 @@ typedef struct {
 	odp_pool_t pool; /**< pool to alloc packets from */
 	uint32_t mtu;    /**< maximum transmission unit */
 	unsigned char if_mac[ETH_ALEN];	/**< IF eth mac addr */
-} pkt_sock_t;
+} pktio_ops_socket_data_t;
 
 /** packet mmap ring */
 struct ring {
@@ -79,7 +79,7 @@ typedef struct {
 	unsigned char if_mac[ETH_ALEN];
 	struct sockaddr_ll ll;
 	int fanout;
-} pkt_sock_mmap_t;
+} pktio_ops_socket_mmap_data_t;
 
 static inline void
 ethaddr_copy(unsigned char mac_dst[], unsigned char mac_src[])
diff --git a/platform/linux-generic/include/odp_pktio_ops_subsystem.h b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
index fc461be7..952d9be5 100644
--- a/platform/linux-generic/include/odp_pktio_ops_subsystem.h
+++ b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
@@ -83,6 +83,7 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
 #include <odp_pktio_ops_loopback.h>
 #include <odp_pktio_ops_netmap.h>
 #include <odp_pktio_ops_pcap.h>
+#include <odp_pktio_ops_socket.h>
 
 /* Per implementation private data
  * TODO: refactory each implementation to hide it internally
@@ -92,6 +93,8 @@ typedef union {
 	pktio_ops_loopback_data_t loopback;
 	pktio_ops_netmap_data_t netmap;
 	pktio_ops_pcap_data_t pcap;
+	pktio_ops_socket_data_t socket;
+	pktio_ops_socket_mmap_data_t mmap;
 } pktio_ops_data_t;
 
 /* Extract pktio ops data from pktio entry structure */
diff --git a/platform/linux-generic/odp_packet_io.c b/platform/linux-generic/odp_packet_io.c
index 6a19394a..e023df13 100644
--- a/platform/linux-generic/odp_packet_io.c
+++ b/platform/linux-generic/odp_packet_io.c
@@ -13,7 +13,6 @@
 #include <odp/api/spinlock.h>
 #include <odp/api/ticketlock.h>
 #include <odp/api/shared_memory.h>
-#include <odp_packet_socket.h>
 #include <odp_config_internal.h>
 #include <odp_queue_if.h>
 #include <odp_schedule_if.h>
diff --git a/platform/linux-generic/pktio/ethtool.c b/platform/linux-generic/pktio/ethtool.c
index d8f9e12c..ed2875c5 100644
--- a/platform/linux-generic/pktio/ethtool.c
+++ b/platform/linux-generic/pktio/ethtool.c
@@ -13,8 +13,8 @@
 #include <net/if.h>
 
 #include <odp_api.h>
-#include <odp_packet_socket.h>
 #include <odp_debug_internal.h>
+#include <odp_packet_io_internal.h>
 
 static struct ethtool_gstrings *get_stringset(int fd, struct ifreq *ifr)
 {
diff --git a/platform/linux-generic/pktio/netmap.c b/platform/linux-generic/pktio/netmap.c
index accac61c..07d6d9e9 100644
--- a/platform/linux-generic/pktio/netmap.c
+++ b/platform/linux-generic/pktio/netmap.c
@@ -12,7 +12,6 @@
 #include <odp/api/packet.h>
 
 #include <odp_packet_io_internal.h>
-#include <odp_packet_socket.h>
 #include <odp_debug_internal.h>
 #include <protocols/eth.h>
 
diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c
index 8b8ccf03..c7c3c5a8 100644
--- a/platform/linux-generic/pktio/socket.c
+++ b/platform/linux-generic/pktio/socket.c
@@ -33,7 +33,6 @@
 #include <linux/sockios.h>
 
 #include <odp_api.h>
-#include <odp_packet_socket.h>
 #include <odp_packet_internal.h>
 #include <odp_packet_io_internal.h>
 #include <odp_align_internal.h>
@@ -455,7 +454,9 @@ void rss_conf_print(const odp_pktin_hash_proto_t *hash_proto)
  */
 static int sock_close(pktio_entry_t *pktio_entry)
 {
-	pkt_sock_t *pkt_sock = &pktio_entry->s.pkt_sock;
+	pktio_ops_socket_data_t *pkt_sock =
+		&pktio_entry->ops_data(socket);
+
 	if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
 		__odp_errno = errno;
 		ODP_ERR("close(sockfd): %s\n", strerror(errno));
@@ -477,7 +478,8 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev,
 	struct ifreq ethreq;
 	struct sockaddr_ll sa_ll;
 	char shm_name[ODP_SHM_NAME_LEN];
-	pkt_sock_t *pkt_sock = &pktio_entry->s.pkt_sock;
+	pktio_ops_socket_data_t *pkt_sock =
+		&pktio_entry->ops_data(socket);
 	odp_pktio_stats_t cur_stats;
 
 	/* Init pktio entry */
@@ -530,7 +532,7 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev,
 		goto error;
 	}
 
-	err = ethtool_stats_get_fd(pktio_entry->s.pkt_sock.sockfd,
+	err = ethtool_stats_get_fd(pkt_sock->sockfd,
 				   pktio_entry->s.name,
 				   &cur_stats);
 	if (err != 0) {
@@ -601,7 +603,8 @@ static uint32_t _rx_pkt_to_iovec(odp_packet_t pkt,
 static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  odp_packet_t pkt_table[], int len)
 {
-	pkt_sock_t *pkt_sock = &pktio_entry->s.pkt_sock;
+	pktio_ops_socket_data_t *pkt_sock =
+		&pktio_entry->ops_data(socket);
 	odp_pool_t pool = pkt_sock->pool;
 	odp_time_t ts_val;
 	odp_time_t *ts = NULL;
@@ -716,7 +719,8 @@ static uint32_t _tx_pkt_to_iovec(odp_packet_t pkt,
 static int sock_mmsg_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  const odp_packet_t pkt_table[], int len)
 {
-	pkt_sock_t *pkt_sock = &pktio_entry->s.pkt_sock;
+	pktio_ops_socket_data_t *pkt_sock =
+		&pktio_entry->ops_data(socket);
 	struct mmsghdr msgvec[len];
 	struct iovec iovecs[len][MAX_SEGS];
 	int ret;
@@ -762,7 +766,7 @@ static int sock_mmsg_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
  */
 static uint32_t sock_mtu_get(pktio_entry_t *pktio_entry)
 {
-	return pktio_entry->s.pkt_sock.mtu;
+	return pktio_entry->ops_data(socket).mtu;
 }
 
 /*
@@ -771,7 +775,7 @@ static uint32_t sock_mtu_get(pktio_entry_t *pktio_entry)
 static int sock_mac_addr_get(pktio_entry_t *pktio_entry,
 			     void *mac_addr)
 {
-	memcpy(mac_addr, pktio_entry->s.pkt_sock.if_mac, ETH_ALEN);
+	memcpy(mac_addr, pktio_entry->ops_data(socket).if_mac, ETH_ALEN);
 	return ETH_ALEN;
 }
 
@@ -781,7 +785,7 @@ static int sock_mac_addr_get(pktio_entry_t *pktio_entry,
 static int sock_promisc_mode_set(pktio_entry_t *pktio_entry,
 				 odp_bool_t enable)
 {
-	return promisc_mode_set_fd(pktio_entry->s.pkt_sock.sockfd,
+	return promisc_mode_set_fd(pktio_entry->ops_data(socket).sockfd,
 				   pktio_entry->s.name, enable);
 }
 
@@ -790,13 +794,13 @@ static int sock_promisc_mode_set(pktio_entry_t *pktio_entry,
  */
 static int sock_promisc_mode_get(pktio_entry_t *pktio_entry)
 {
-	return promisc_mode_get_fd(pktio_entry->s.pkt_sock.sockfd,
+	return promisc_mode_get_fd(pktio_entry->ops_data(socket).sockfd,
 				   pktio_entry->s.name);
 }
 
 static int sock_link_status(pktio_entry_t *pktio_entry)
 {
-	return link_status_fd(pktio_entry->s.pkt_sock.sockfd,
+	return link_status_fd(pktio_entry->ops_data(socket).sockfd,
 			      pktio_entry->s.name);
 }
 
@@ -825,7 +829,7 @@ static int sock_stats(pktio_entry_t *pktio_entry,
 
 	return sock_stats_fd(pktio_entry,
 			     stats,
-			     pktio_entry->s.pkt_sock.sockfd);
+			     pktio_entry->ops_data(socket).sockfd);
 }
 
 static int sock_stats_reset(pktio_entry_t *pktio_entry)
@@ -837,7 +841,7 @@ static int sock_stats_reset(pktio_entry_t *pktio_entry)
 	}
 
 	return sock_stats_reset_fd(pktio_entry,
-				   pktio_entry->s.pkt_sock.sockfd);
+				   pktio_entry->ops_data(socket).sockfd);
 }
 
 static int sock_init_global(void)
diff --git a/platform/linux-generic/pktio/socket_mmap.c b/platform/linux-generic/pktio/socket_mmap.c
index 0a27316f..9054a835 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -23,7 +23,6 @@
 #include <errno.h>
 
 #include <odp_api.h>
-#include <odp_packet_socket.h>
 #include <odp_packet_internal.h>
 #include <odp_packet_io_internal.h>
 #include <odp_debug_internal.h>
@@ -37,8 +36,8 @@
 
 static int disable_pktio; /** !0 this pktio disabled, 0 enabled */
 
-static int set_pkt_sock_fanout_mmap(pkt_sock_mmap_t *const pkt_sock,
-				    int sock_group_idx)
+static int set_pkt_sock_fanout_mmap(
+	pktio_ops_socket_mmap_data_t *const pkt_sock, int sock_group_idx)
 {
 	int sockfd = pkt_sock->sockfd;
 	int val;
@@ -144,7 +143,7 @@ static uint8_t *pkt_mmap_vlan_insert(uint8_t *l2_hdr_ptr,
 }
 
 static inline unsigned pkt_mmap_v2_rx(pktio_entry_t *pktio_entry,
-				      pkt_sock_mmap_t *pkt_sock,
+				      pktio_ops_socket_mmap_data_t *pkt_sock,
 				      odp_packet_t pkt_table[], unsigned len,
 				      unsigned char if_mac[])
 {
@@ -411,7 +410,7 @@ static int mmap_setup_ring(int sock, struct ring *ring, int type,
 	return 0;
 }
 
-static int mmap_sock(pkt_sock_mmap_t *pkt_sock)
+static int mmap_sock(pktio_ops_socket_mmap_data_t *pkt_sock)
 {
 	int i;
 	int sock = pkt_sock->sockfd;
@@ -455,14 +454,15 @@ static int mmap_sock(pkt_sock_mmap_t *pkt_sock)
 	return 0;
 }
 
-static int mmap_unmap_sock(pkt_sock_mmap_t *pkt_sock)
+static int mmap_unmap_sock(pktio_ops_socket_mmap_data_t *pkt_sock)
 {
 	free(pkt_sock->rx_ring.rd);
 	free(pkt_sock->tx_ring.rd);
 	return munmap(pkt_sock->mmap_base, pkt_sock->mmap_len);
 }
 
-static int mmap_bind_sock(pkt_sock_mmap_t *pkt_sock, const char *netdev)
+static int mmap_bind_sock(pktio_ops_socket_mmap_data_t *pkt_sock,
+			  const char *netdev)
 {
 	int ret;
 
@@ -486,7 +486,8 @@ static int mmap_bind_sock(pkt_sock_mmap_t *pkt_sock, const char *netdev)
 
 static int sock_mmap_close(pktio_entry_t *entry)
 {
-	pkt_sock_mmap_t *const pkt_sock = &entry->s.pkt_sock_mmap;
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = &entry->ops_data(mmap);
 	int ret;
 
 	ret = mmap_unmap_sock(pkt_sock);
@@ -515,7 +516,8 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 	if (disable_pktio)
 		return -1;
 
-	pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap;
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = &pktio_entry->ops_data(mmap);
 	int fanout = 1;
 
 	/* Init pktio entry */
@@ -570,7 +572,7 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 			goto error;
 	}
 
-	ret = ethtool_stats_get_fd(pktio_entry->s.pkt_sock_mmap.sockfd,
+	ret = ethtool_stats_get_fd(pkt_sock->sockfd,
 				   pktio_entry->s.name,
 				   &cur_stats);
 	if (ret != 0) {
@@ -586,8 +588,7 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 		pktio_entry->s.stats_type = STATS_ETHTOOL;
 	}
 
-	ret = sock_stats_reset_fd(pktio_entry,
-				  pktio_entry->s.pkt_sock_mmap.sockfd);
+	ret = sock_stats_reset_fd(pktio_entry, pkt_sock->sockfd);
 	if (ret != 0)
 		goto error;
 
@@ -601,7 +602,8 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 static int sock_mmap_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  odp_packet_t pkt_table[], int len)
 {
-	pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap;
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = &pktio_entry->ops_data(mmap);
 	int ret;
 
 	odp_ticketlock_lock(&pktio_entry->s.rxl);
@@ -616,7 +618,8 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  const odp_packet_t pkt_table[], int len)
 {
 	int ret;
-	pkt_sock_mmap_t *const pkt_sock = &pktio_entry->s.pkt_sock_mmap;
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = &pktio_entry->ops_data(mmap);
 
 	odp_ticketlock_lock(&pktio_entry->s.txl);
 	ret = pkt_mmap_v2_tx(pkt_sock->tx_ring.sock, &pkt_sock->tx_ring,
@@ -628,32 +631,32 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 
 static uint32_t sock_mmap_mtu_get(pktio_entry_t *pktio_entry)
 {
-	return mtu_get_fd(pktio_entry->s.pkt_sock_mmap.sockfd,
+	return mtu_get_fd(pktio_entry->ops_data(mmap).sockfd,
 			  pktio_entry->s.name);
 }
 
 static int sock_mmap_mac_addr_get(pktio_entry_t *pktio_entry, void *mac_addr)
 {
-	memcpy(mac_addr, pktio_entry->s.pkt_sock_mmap.if_mac, ETH_ALEN);
+	memcpy(mac_addr, pktio_entry->ops_data(mmap).if_mac, ETH_ALEN);
 	return ETH_ALEN;
 }
 
 static int sock_mmap_promisc_mode_set(pktio_entry_t *pktio_entry,
 				      odp_bool_t enable)
 {
-	return promisc_mode_set_fd(pktio_entry->s.pkt_sock_mmap.sockfd,
+	return promisc_mode_set_fd(pktio_entry->ops_data(mmap).sockfd,
 				   pktio_entry->s.name, enable);
 }
 
 static int sock_mmap_promisc_mode_get(pktio_entry_t *pktio_entry)
 {
-	return promisc_mode_get_fd(pktio_entry->s.pkt_sock_mmap.sockfd,
+	return promisc_mode_get_fd(pktio_entry->ops_data(mmap).sockfd,
 				   pktio_entry->s.name);
 }
 
 static int sock_mmap_link_status(pktio_entry_t *pktio_entry)
 {
-	return link_status_fd(pktio_entry->s.pkt_sock_mmap.sockfd,
+	return link_status_fd(pktio_entry->ops_data(mmap).sockfd,
 			      pktio_entry->s.name);
 }
 
@@ -682,7 +685,7 @@ static int sock_mmap_stats(pktio_entry_t *pktio_entry,
 
 	return sock_stats_fd(pktio_entry,
 			     stats,
-			     pktio_entry->s.pkt_sock_mmap.sockfd);
+			     pktio_entry->ops_data(mmap).sockfd);
 }
 
 static int sock_mmap_stats_reset(pktio_entry_t *pktio_entry)
@@ -694,7 +697,7 @@ static int sock_mmap_stats_reset(pktio_entry_t *pktio_entry)
 	}
 
 	return sock_stats_reset_fd(pktio_entry,
-				   pktio_entry->s.pkt_sock_mmap.sockfd);
+				   pktio_entry->ops_data(mmap).sockfd);
 }
 
 static int sock_mmap_init_global(void)
diff --git a/platform/linux-generic/pktio/tap.c b/platform/linux-generic/pktio/tap.c
index bfe41239..a5c15e11 100644
--- a/platform/linux-generic/pktio/tap.c
+++ b/platform/linux-generic/pktio/tap.c
@@ -40,7 +40,6 @@
 #include <linux/if_tun.h>
 
 #include <odp_api.h>
-#include <odp_packet_socket.h>
 #include <odp_packet_internal.h>
 #include <odp_packet_io_internal.h>
 #include <odp_classification_internal.h>
