Line data Source code
1 : /* 2 : * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved. 3 : */ 4 : 5 : #ifndef vnsw_agent_pkt_packet_buffer_hpp 6 : #define vnsw_agent_pkt_packet_buffer_hpp 7 : 8 : #include <string> 9 : #include <stdint.h> 10 : #include <boost/shared_ptr.hpp> 11 : #include <boost/shared_array.hpp> 12 : #include <base/util.h> 13 : 14 : class PacketBuffer; 15 : class PacketBufferManager; 16 : struct AgentHdr; 17 : class PktHandler; 18 : class PktModule; 19 : 20 : typedef boost::shared_ptr<PacketBuffer> PacketBufferPtr; 21 : class PacketBuffer { 22 : public: 23 : static const uint32_t kDefaultBufferLen = 1024; 24 : virtual ~PacketBuffer(); 25 : 26 : uint8_t *buffer() const { return buffer_.get(); } 27 215 : uint16_t buffer_len() const { return buffer_len_; } 28 : 29 : uint8_t *data() const; 30 : uint16_t data_len() const; 31 : 32 224 : uint32_t module() const { return module_; } 33 22 : void set_module(uint32_t module) { module_ = module; } 34 : 35 : void set_len(uint32_t len); 36 : bool SetOffset(uint16_t offset); 37 : private: 38 : friend class PacketBufferManager; 39 : PacketBuffer(PacketBufferManager *mgr, uint32_t module, uint16_t len, 40 : uint32_t mdata); 41 : 42 : // Create PacketBuffer from existing memory 43 : PacketBuffer(PacketBufferManager *mgr, uint32_t module, uint8_t *buff, 44 : uint16_t len, uint16_t data_offset, uint16_t data_len, 45 : uint32_t mdata); 46 : 47 : boost::shared_array<uint8_t> buffer_; 48 : uint16_t buffer_len_; 49 : 50 : uint8_t *data_; 51 : uint16_t data_len_; 52 : 53 : uint32_t module_; 54 : uint32_t mdata_; 55 : PacketBufferManager *mgr_; 56 : DISALLOW_COPY_AND_ASSIGN(PacketBuffer); 57 : }; 58 : 59 : class PacketBufferManager { 60 : public: 61 : PacketBufferManager(PktModule *pkt_module); 62 : virtual ~PacketBufferManager(); 63 : 64 : PacketBufferPtr Allocate(uint32_t module, uint16_t len, uint32_t mdata); 65 : 66 : PacketBufferPtr Allocate(uint32_t module, uint8_t *buff, uint16_t len, 67 : uint16_t data_offset, uint16_t data_len, 68 : uint32_t mdata); 69 : private: 70 : friend class PacketBuffer; 71 : void FreeIndication(PacketBuffer *); 72 : 73 : uint64_t alloc_; 74 : uint64_t free_; 75 : PktModule *pkt_module_; 76 : 77 : DISALLOW_COPY_AND_ASSIGN(PacketBufferManager); 78 : }; 79 : 80 : #endif // vnsw_agent_pkt_packet_buffer_hpp