diff options
author | Nicolas Morey-Chaisemartin <nmorey@kalray.eu> | 2015-07-15 18:19:10 +0200 |
---|---|---|
committer | Maxim Uvarov <maxim.uvarov@linaro.org> | 2015-07-16 13:47:53 +0300 |
commit | d13815e4bf303d1fa6b9a62251fd2d849642c66b (patch) | |
tree | 4a31df14f87035baa1e8ca4653fb77fc55570778 /platform/linux-generic/pktio/loop.c | |
parent | 31f5da88309e9c080600ff49178174a906af85f6 (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.c | 39 |
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 +}; |