LCOV - code coverage report
Current view: top level - vnsw/agent/pkt - packet_buffer.cc (source / functions) Hit Total Coverage
Test: OpenSDN C/C++ coverage (all TARGET_SET jobs) Lines: 5 45 11.1 %
Date: 2026-06-18 01:51:13 Functions: 3 14 21.4 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2014 Juniper Networks, Inc. All rights reserved.
       3             :  */
       4             : #include <string>
       5             : #include <boost/shared_ptr.hpp>
       6             : #include <pkt/packet_buffer.h>
       7             : #include <pkt/control_interface.h>
       8             : 
       9           1 : PacketBufferManager::PacketBufferManager(PktModule *pkt_module) :
      10           1 :     alloc_(0), free_(0), pkt_module_(pkt_module) {
      11           1 : }
      12             : 
      13           2 : PacketBufferManager::~PacketBufferManager() {
      14           2 : }
      15             : 
      16           0 : PacketBufferPtr PacketBufferManager::Allocate(uint32_t module, uint16_t len,
      17             :                                               uint32_t mdata) {
      18           0 :     PacketBufferPtr ptr(new PacketBuffer(this, module, len, mdata));
      19           0 :     alloc_++;
      20           0 :     return ptr;
      21             : }
      22             : 
      23           0 : PacketBufferPtr PacketBufferManager::Allocate(uint32_t module, uint8_t *buff,
      24             :                                               uint16_t len,
      25             :                                               uint16_t data_offset,
      26             :                                               uint16_t data_len,
      27             :                                               uint32_t mdata) {
      28             :     PacketBufferPtr ptr(new PacketBuffer(this, module, buff, len, data_offset,
      29           0 :                                          data_len, mdata));
      30           0 :     alloc_++;
      31           0 :     return ptr;
      32             : }
      33             : 
      34           0 : void PacketBufferManager::FreeIndication(PacketBuffer *pkt) {
      35           0 :     free_++;
      36           0 : }
      37             : 
      38           0 : PacketBuffer::PacketBuffer(PacketBufferManager *mgr, uint32_t module,
      39           0 :                            uint16_t len, uint32_t mdata) :
      40           0 :     buffer_(new uint8_t[len]), buffer_len_(len), data_(buffer_.get()),
      41           0 :     data_len_(len), module_(module), mdata_(mdata), mgr_(mgr) {
      42           0 : }
      43             : 
      44           0 : PacketBuffer::PacketBuffer(PacketBufferManager *mgr, uint32_t module,
      45             :                            uint8_t *buff, uint16_t len, uint16_t data_offset,
      46           0 :                            uint16_t data_len, uint32_t mdata) :
      47           0 :     buffer_(buff), buffer_len_(len), data_(buffer_.get() + data_offset),
      48           0 :     data_len_(data_len), module_(module), mdata_(mdata), mgr_(mgr) {
      49           0 : }
      50             : 
      51           0 : PacketBuffer::~PacketBuffer() {
      52           0 :     mgr_->FreeIndication(this);
      53           0 :     data_ = NULL;
      54           0 : }
      55             : 
      56           0 : uint8_t *PacketBuffer::data() const {
      57           0 :     return data_;
      58             : }
      59             : 
      60           0 : uint16_t PacketBuffer::data_len() const {
      61           0 :     return data_len_;
      62             : }
      63             : 
      64             : // Move data pointer to offset specified
      65           0 : bool PacketBuffer::SetOffset(uint16_t offset) {
      66           0 :     if (offset > data_len_)
      67           0 :         return false;
      68           0 :     data_ += offset;
      69           0 :     data_len_ -= offset;
      70           0 :     return true;
      71             : }
      72             : 
      73             : // Set data_len in packet buffer
      74           0 : void PacketBuffer::set_len(uint32_t len) {
      75           0 :     uint32_t offset = data_ - buffer_.get();
      76             : 
      77             :     // Check if there is enough space first
      78           0 :     assert((buffer_len_ - offset) >= len);
      79           0 :     data_len_ = len;
      80           0 : }

Generated by: LCOV version 1.14