aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/pktio/loop.c
diff options
context:
space:
mode:
authorNicolas Morey-Chaisemartin <nmorey@kalray.eu>2015-07-15 18:19:10 +0200
committerMaxim Uvarov <maxim.uvarov@linaro.org>2015-07-16 13:47:53 +0300
commitd13815e4bf303d1fa6b9a62251fd2d849642c66b (patch)
tree4a31df14f87035baa1e8ca4653fb77fc55570778 /platform/linux-generic/pktio/loop.c
parent31f5da88309e9c080600ff49178174a906af85f6 (diff)
linux-generic: packet_io: use generic interface for pktio implementations
Each packet_io type now implements a pktio_if_ops_t structure which serves as the only interface use by odp_packet_io.c. The type of a device is retrieved by calling the pktio_XX open function in order from the global pktio_if_ops struct and by stopping on the first successful order. As a result odp_pktio_type_t has been removed, and implementation can be extended by just adding a new pktio_if_opts_t structure to pktio_if_opts Signed-off-by: Clément Leger <cleger@kalray.eu> Signed-off-by: Nicolas Morey-Chaisemartin <nmorey@kalray.eu> Reviewed-by: Stuart Haslam <stuart.haslam@linaro.org> Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org>
Diffstat (limited to 'platform/linux-generic/pktio/loop.c')
-rw-r--r--platform/linux-generic/pktio/loop.c39
1 files changed, 27 insertions, 12 deletions
diff --git a/platform/linux-generic/pktio/loop.c b/platform/linux-generic/pktio/loop.c
index 421b3c49d..a9bbb01c4 100644
--- a/platform/linux-generic/pktio/loop.c
+++ b/platform/linux-generic/pktio/loop.c
@@ -24,11 +24,14 @@
/* MAC address for the "loop" interface */
static const char pktio_loop_mac[] = {0x02, 0xe9, 0x34, 0x80, 0x73, 0x01};
-int loopback_init(pktio_entry_t *pktio_entry, odp_pktio_t id)
+static int loopback_init(odp_pktio_t id, pktio_entry_t *pktio_entry,
+ const char *devname, odp_pool_t pool ODP_UNUSED)
{
+ if (strcmp(devname, "loop"))
+ return -1;
+
char loopq_name[ODP_QUEUE_NAME_LEN];
- pktio_entry->s.type = ODP_PKTIO_TYPE_LOOPBACK;
snprintf(loopq_name, sizeof(loopq_name), "%" PRIu64 "-pktio_loopq",
odp_pktio_to_u64(id));
pktio_entry->s.loopq = odp_queue_create(loopq_name,
@@ -40,13 +43,13 @@ int loopback_init(pktio_entry_t *pktio_entry, odp_pktio_t id)
return 0;
}
-int loopback_close(pktio_entry_t *pktio_entry)
+static int loopback_close(pktio_entry_t *pktio_entry)
{
return odp_queue_destroy(pktio_entry->s.loopq);
}
-int loopback_recv_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
- unsigned len)
+static int loopback_recv_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
+ unsigned len)
{
int nbr, i;
odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
@@ -63,8 +66,8 @@ int loopback_recv_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkts[],
return nbr;
}
-int loopback_send_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
- unsigned len)
+static int loopback_send_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
+ unsigned len)
{
odp_buffer_hdr_t *hdr_tbl[QUEUE_MULTI_MAX];
queue_entry_t *qentry;
@@ -77,25 +80,37 @@ int loopback_send_pkt(pktio_entry_t *pktio_entry, odp_packet_t pkt_tbl[],
return queue_enq_multi(qentry, hdr_tbl, len);
}
-int loopback_mtu_get(pktio_entry_t *pktio_entry ODP_UNUSED)
+static int loopback_mtu_get(pktio_entry_t *pktio_entry ODP_UNUSED)
{
return PKTIO_LOOP_MTU;
}
-int loopback_mac_addr_get(pktio_entry_t *pktio_entry ODP_UNUSED, void *mac_addr)
+static int loopback_mac_addr_get(pktio_entry_t *pktio_entry ODP_UNUSED,
+ void *mac_addr)
{
memcpy(mac_addr, pktio_loop_mac, ETH_ALEN);
return ETH_ALEN;
}
-int loopback_promisc_mode_set(pktio_entry_t *pktio_entry,
- odp_bool_t enable ODP_UNUSED)
+static int loopback_promisc_mode_set(pktio_entry_t *pktio_entry,
+ odp_bool_t enable)
{
pktio_entry->s.promisc = enable;
return 0;
}
-int loopback_promisc_mode_get(pktio_entry_t *pktio_entry)
+static int loopback_promisc_mode_get(pktio_entry_t *pktio_entry)
{
return pktio_entry->s.promisc ? 1 : 0;
}
+
+const pktio_if_ops_t loopback_pktio_ops = {
+ .open = loopback_init,
+ .close = loopback_close,
+ .recv = loopback_recv_pkt,
+ .send = loopback_send_pkt,
+ .mtu_get = loopback_mtu_get,
+ .promisc_mode_set = loopback_promisc_mode_set,
+ .promisc_mode_get = loopback_promisc_mode_get,
+ .mac_get = loopback_mac_addr_get
+};