diff --git a/platform/linux-generic/include/odp_pktio_ops_subsystem.h b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
index 415b8365f..369d722f0 100644
--- a/platform/linux-generic/include/odp_pktio_ops_subsystem.h
+++ b/platform/linux-generic/include/odp_pktio_ops_subsystem.h
@@ -82,7 +82,6 @@ typedef ODP_MODULE_CLASS(pktio_ops) {
 #include <odp_pktio_ops_ipc.h>
 #include <odp_pktio_ops_netmap.h>
 #include <odp_pktio_ops_pcap.h>
-#include <odp_pktio_ops_socket.h>
 #include <odp_pktio_ops_tap.h>
 
 /* Per implementation private data
@@ -93,8 +92,6 @@ typedef union {
 	pktio_ops_ipc_data_t ipc;
 	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_tap_data_t tap;
 } pktio_ops_data_t;
 
diff --git a/platform/linux-generic/pktio/socket.c b/platform/linux-generic/pktio/socket.c
index f4939ce13..997156b60 100644
--- a/platform/linux-generic/pktio/socket.c
+++ b/platform/linux-generic/pktio/socket.c
@@ -41,6 +41,7 @@
 #include <odp_classification_inlines.h>
 #include <odp_classification_internal.h>
 #include <odp/api/hints.h>
+#include <odp_pktio_ops_socket.h>
 #include <pktio/common.h>
 #include <pktio/ethtool.h>
 
@@ -105,7 +106,7 @@ int sendmmsg(int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags)
 static int sock_close(pktio_entry_t *pktio_entry)
 {
 	pktio_ops_socket_data_t *pkt_sock =
-		&pktio_entry->ops_data(socket);
+		odp_ops_data(pktio_entry, socket);
 
 	if (pkt_sock->sockfd != -1 && close(pkt_sock->sockfd) != 0) {
 		__odp_errno = errno;
@@ -129,7 +130,7 @@ static int sock_setup_pkt(pktio_entry_t *pktio_entry, const char *netdev,
 	struct sockaddr_ll sa_ll;
 	char shm_name[ODP_SHM_NAME_LEN];
 	pktio_ops_socket_data_t *pkt_sock =
-		&pktio_entry->ops_data(socket);
+		odp_ops_data(pktio_entry, socket);
 	odp_pktio_stats_t cur_stats;
 
 	/* Init pktio entry */
@@ -254,7 +255,7 @@ static int sock_mmsg_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  odp_packet_t pkt_table[], int len)
 {
 	pktio_ops_socket_data_t *pkt_sock =
-		&pktio_entry->ops_data(socket);
+		odp_ops_data(pktio_entry, socket);
 	odp_pool_t pool = pkt_sock->pool;
 	odp_time_t ts_val;
 	odp_time_t *ts = NULL;
@@ -370,7 +371,7 @@ static int sock_mmsg_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  const odp_packet_t pkt_table[], int len)
 {
 	pktio_ops_socket_data_t *pkt_sock =
-		&pktio_entry->ops_data(socket);
+		odp_ops_data(pktio_entry, socket);
 	struct mmsghdr msgvec[len];
 	struct iovec iovecs[len][MAX_SEGS];
 	int ret;
@@ -416,7 +417,10 @@ 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->ops_data(socket).mtu;
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
+	return pkt_sock->mtu;
 }
 
 /*
@@ -425,7 +429,10 @@ 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->ops_data(socket).if_mac, ETH_ALEN);
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
+	memcpy(mac_addr, pkt_sock->if_mac, ETH_ALEN);
 	return ETH_ALEN;
 }
 
@@ -435,7 +442,10 @@ 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->ops_data(socket).sockfd,
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
+	return promisc_mode_set_fd(pkt_sock->sockfd,
 				   pktio_entry->s.name, enable);
 }
 
@@ -444,13 +454,19 @@ 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->ops_data(socket).sockfd,
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
+	return promisc_mode_get_fd(pkt_sock->sockfd,
 				   pktio_entry->s.name);
 }
 
 static int sock_link_status(pktio_entry_t *pktio_entry)
 {
-	return link_status_fd(pktio_entry->ops_data(socket).sockfd,
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
+	return link_status_fd(pkt_sock->sockfd,
 			      pktio_entry->s.name);
 }
 
@@ -472,26 +488,29 @@ static int sock_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
 static int sock_stats(pktio_entry_t *pktio_entry,
 		      odp_pktio_stats_t *stats)
 {
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
 	if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) {
 		memset(stats, 0, sizeof(*stats));
 		return 0;
 	}
 
-	return sock_stats_fd(pktio_entry,
-			     stats,
-			     pktio_entry->ops_data(socket).sockfd);
+	return sock_stats_fd(pktio_entry, stats, pkt_sock->sockfd);
 }
 
 static int sock_stats_reset(pktio_entry_t *pktio_entry)
 {
+	pktio_ops_socket_data_t *pkt_sock =
+		odp_ops_data(pktio_entry, socket);
+
 	if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) {
 		memset(&pktio_entry->s.stats, 0,
 		       sizeof(odp_pktio_stats_t));
 		return 0;
 	}
 
-	return sock_stats_reset_fd(pktio_entry,
-				   pktio_entry->ops_data(socket).sockfd);
+	return sock_stats_reset_fd(pktio_entry, pkt_sock->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 2bb51c4bb..cd6bfc41f 100644
--- a/platform/linux-generic/pktio/socket_mmap.c
+++ b/platform/linux-generic/pktio/socket_mmap.c
@@ -30,6 +30,7 @@
 #include <odp_classification_inlines.h>
 #include <odp_classification_internal.h>
 #include <odp/api/hints.h>
+#include <odp_pktio_ops_socket.h>
 #include <pktio/common.h>
 #include <pktio/ethtool.h>
 
@@ -489,7 +490,7 @@ static int mmap_bind_sock(pktio_ops_socket_mmap_data_t *pkt_sock,
 static int sock_mmap_close(pktio_entry_t *entry)
 {
 	pktio_ops_socket_mmap_data_t
-		*const pkt_sock = &entry->ops_data(mmap);
+		*const pkt_sock = odp_ops_data(entry, socket_mmap);
 	int ret;
 
 	ret = mmap_unmap_sock(pkt_sock);
@@ -519,7 +520,7 @@ static int sock_mmap_open(odp_pktio_t id ODP_UNUSED,
 		return -1;
 
 	pktio_ops_socket_mmap_data_t
-		*const pkt_sock = &pktio_entry->ops_data(mmap);
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
 	int fanout = 1;
 
 	/* Init pktio entry */
@@ -605,7 +606,7 @@ static int sock_mmap_recv(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 			  odp_packet_t pkt_table[], int len)
 {
 	pktio_ops_socket_mmap_data_t
-		*const pkt_sock = &pktio_entry->ops_data(mmap);
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
 	int ret;
 
 	odp_ticketlock_lock(&pktio_entry->s.rxl);
@@ -621,7 +622,7 @@ static int sock_mmap_send(pktio_entry_t *pktio_entry, int index ODP_UNUSED,
 {
 	int ret;
 	pktio_ops_socket_mmap_data_t
-		*const pkt_sock = &pktio_entry->ops_data(mmap);
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
 
 	odp_ticketlock_lock(&pktio_entry->s.txl);
 	ret = pkt_mmap_v2_tx(pkt_sock->tx_ring.sock, &pkt_sock->tx_ring,
@@ -633,33 +634,46 @@ 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->ops_data(mmap).sockfd,
-			  pktio_entry->s.name);
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
+	return mtu_get_fd(pkt_sock->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->ops_data(mmap).if_mac, ETH_ALEN);
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
+	memcpy(mac_addr, pkt_sock->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->ops_data(mmap).sockfd,
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
+	return promisc_mode_set_fd(pkt_sock->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->ops_data(mmap).sockfd,
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
+	return promisc_mode_get_fd(pkt_sock->sockfd,
 				   pktio_entry->s.name);
 }
 
 static int sock_mmap_link_status(pktio_entry_t *pktio_entry)
 {
-	return link_status_fd(pktio_entry->ops_data(mmap).sockfd,
-			      pktio_entry->s.name);
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
+	return link_status_fd(pkt_sock->sockfd, pktio_entry->s.name);
 }
 
 static int sock_mmap_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
@@ -680,26 +694,30 @@ static int sock_mmap_capability(pktio_entry_t *pktio_entry ODP_UNUSED,
 static int sock_mmap_stats(pktio_entry_t *pktio_entry,
 			   odp_pktio_stats_t *stats)
 {
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
 	if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) {
 		memset(stats, 0, sizeof(*stats));
 		return 0;
 	}
 
 	return sock_stats_fd(pktio_entry,
-			     stats,
-			     pktio_entry->ops_data(mmap).sockfd);
+			     stats, pkt_sock->sockfd);
 }
 
 static int sock_mmap_stats_reset(pktio_entry_t *pktio_entry)
 {
+	pktio_ops_socket_mmap_data_t
+		*const pkt_sock = odp_ops_data(pktio_entry, socket_mmap);
+
 	if (pktio_entry->s.stats_type == STATS_UNSUPPORTED) {
 		memset(&pktio_entry->s.stats, 0,
 		       sizeof(odp_pktio_stats_t));
 		return 0;
 	}
 
-	return sock_stats_reset_fd(pktio_entry,
-				   pktio_entry->ops_data(mmap).sockfd);
+	return sock_stats_reset_fd(pktio_entry, pkt_sock->sockfd);
 }
 
 static int sock_mmap_init_global(void)
