diff options
author | Hanoh Haim <hhaim@cisco.com> | 2015-06-24 14:03:29 +0300 |
---|---|---|
committer | Hanoh Haim <hhaim@cisco.com> | 2015-06-24 14:03:29 +0300 |
commit | 8b52a31ed2c299b759f330c4f976b9c70f5765f4 (patch) | |
tree | 9d6da5438b5b56b1d2d57e6c13494b4e65d000e7 /src/pal/linux_dpdk/CRing.h |
first version
Diffstat (limited to 'src/pal/linux_dpdk/CRing.h')
-rwxr-xr-x | src/pal/linux_dpdk/CRing.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/pal/linux_dpdk/CRing.h b/src/pal/linux_dpdk/CRing.h new file mode 100755 index 00000000..8325c1b6 --- /dev/null +++ b/src/pal/linux_dpdk/CRing.h @@ -0,0 +1,89 @@ +#ifndef C_RING_H +#define C_RING_H +/* + Hanoh Haim + Cisco Systems, Inc. +*/ + +/* +Copyright (c) 2015-2015 Cisco Systems, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + + +#include <assert.h> +#include <stdint.h> +#include <string> +#include <rte_ring.h> + + + +class CRingSp { +public: + CRingSp(){ + m_ring=0; + } + + bool Create(std::string name, + uint16_t cnt, + int socket_id){ + m_ring=rte_ring_create((char *)name.c_str(), + cnt, + socket_id, + RING_F_SP_ENQ | RING_F_SC_DEQ); + assert(m_ring); + return(true); + } + + void Delete(void){ + // can't free the memory of DPDK, it is from reserve memory + } + + int Enqueue(void *obj){ + return (rte_ring_sp_enqueue(m_ring,obj)); + } + + int Dequeue(void * & obj){ + return(rte_ring_mc_dequeue(m_ring,(void **)&obj)); + } + + bool isFull(void){ + return ( rte_ring_full(m_ring)?true:false ); + } + + bool isEmpty(void){ + return ( rte_ring_empty(m_ring)?true:false ); + } + +private: + struct rte_ring * m_ring; +}; + +template <class T> +class CTRingSp : public CRingSp { +public: + int Enqueue(T *obj){ + return ( CRingSp::Enqueue((void*)obj) ); + } + + int Dequeue(T * & obj){ + return (CRingSp::Dequeue(*((void **)&obj))); + } +}; + + + + +#endif + |