PcapPlusPlus  Next
pcpp::BgpUpdateMessageLayer Class Reference

#include <BgpLayer.h>

Inheritance diagram for pcpp::BgpUpdateMessageLayer:
pcpp::BgpLayer pcpp::Layer pcpp::IDataContainer

Classes

struct  path_attribute
 
struct  prefix_and_ip
 

Public Member Functions

 BgpUpdateMessageLayer (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 
 BgpUpdateMessageLayer (const std::vector< prefix_and_ip > &withdrawnRoutes=std::vector< prefix_and_ip >(), const std::vector< path_attribute > &pathAttributes=std::vector< path_attribute >(), const std::vector< prefix_and_ip > &nlri=std::vector< prefix_and_ip >())
 
bgp_common_headergetBasicMsgHeader () const
 
size_t getWithdrawnRoutesLength () const
 
void getWithdrawnRoutes (std::vector< prefix_and_ip > &withdrawnRoutes)
 
bool setWithdrawnRoutes (const std::vector< prefix_and_ip > &withdrawnRoutes)
 
bool clearWithdrawnRoutes ()
 
size_t getPathAttributesLength () const
 
void getPathAttributes (std::vector< path_attribute > &pathAttributes)
 
bool setPathAttributes (const std::vector< path_attribute > &pathAttributes)
 
bool clearPathAttributes ()
 
size_t getNetworkLayerReachabilityInfoLength () const
 
void getNetworkLayerReachabilityInfo (std::vector< prefix_and_ip > &nlri)
 
bool setNetworkLayerReachabilityInfo (const std::vector< prefix_and_ip > &nlri)
 
bool clearNetworkLayerReachabilityInfo ()
 
BgpMessageType getBgpMessageType () const override
 
- Public Member Functions inherited from pcpp::BgpLayer
std::string getMessageTypeAsString () const
 
size_t getHeaderLen () const override
 
void parseNextLayer () override
 
std::string toString () const override
 
OsiModelLayer getOsiModelLayer () const override
 
void computeCalculateFields () override
 
- Public Member Functions inherited from pcpp::Layer
 ~Layer () override
 
LayergetNextLayer () const
 
LayergetPrevLayer () const
 
ProtocolType getProtocol () const
 
bool isMemberOfProtocolFamily (ProtocolTypeFamily protocolTypeFamily) const
 
uint8_t * getData () const
 
size_t getDataLen () const
 
uint8_t * getLayerPayload () const
 
size_t getLayerPayloadSize () const
 
bool isAllocatedToPacket () const
 
void copyData (uint8_t *toArr) const
 
uint8_t * getDataPtr (size_t offset=0) const override
 

Static Public Member Functions

static bool isDataValid (const uint8_t *data, size_t dataSize)
 
- Static Public Member Functions inherited from pcpp::BgpLayer
static bool isBgpPort (uint16_t portSrc, uint16_t portDst)
 
static BgpLayerparseBgpLayer (uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
 

Additional Inherited Members

- Public Types inherited from pcpp::BgpLayer
enum  BgpMessageType {
  Open = 1 , Update = 2 , Notification = 3 , Keepalive = 4 ,
  RouteRefresh = 5
}
 

Detailed Description

Represents a BGP v4 UPDATE message

Constructor & Destructor Documentation

◆ BgpUpdateMessageLayer() [1/2]

pcpp::BgpUpdateMessageLayer::BgpUpdateMessageLayer ( uint8_t *  data,
size_t  dataLen,
Layer prevLayer,
Packet packet 
)
inline

A constructor that creates the layer from an existing packet raw data

Parameters
[in]dataA pointer to the raw data
[in]dataLenSize of the data in bytes
[in]prevLayerA pointer to the previous layer
[in]packetA pointer to the Packet instance where layer will be stored in

◆ BgpUpdateMessageLayer() [2/2]

pcpp::BgpUpdateMessageLayer::BgpUpdateMessageLayer ( const std::vector< prefix_and_ip > &  withdrawnRoutes = std::vector< prefix_and_ip >(),
const std::vector< path_attribute > &  pathAttributes = std::vector< path_attribute >(),
const std::vector< prefix_and_ip > &  nlri = std::vector< prefix_and_ip >() 
)
explicit

A c'tor that creates a new BGP UPDATE message

Parameters
[in]withdrawnRoutesA vector of withdrawn routes data. If left empty (which is the default value) no withdrawn route information will be written to the message
[in]pathAttributesA vector of path attributes data. If left empty (which is the default value) no path attribute information will be written to the message
[in]nlriA vector of network layer reachability data. If left empty (which is the default value) no reachability information will be written to the message

Member Function Documentation

◆ clearNetworkLayerReachabilityInfo()

bool pcpp::BgpUpdateMessageLayer::clearNetworkLayerReachabilityInfo ( )

Clear all NLRI data currently in the message. This is equivalent to calling setNetworkLayerReachabilityInfo() with an empty vector as a parameter

Returns
True if all NLRI were successfully cleared or false otherwise. In case of an error an appropriate message will be printed to log

◆ clearPathAttributes()

bool pcpp::BgpUpdateMessageLayer::clearPathAttributes ( )

Clear all Path Attributes data currently in the message. This is equivalent to calling setPathAttributes() with an empty vector as a parameter

Returns
True if all Path Attributes were successfully cleared or false otherwise. In case of an error an appropriate message will be printed to log

◆ clearWithdrawnRoutes()

bool pcpp::BgpUpdateMessageLayer::clearWithdrawnRoutes ( )

Clear all Withdrawn Routes data currently in the message. This is equivalent to calling setWithdrawnRoutes() with an empty vector as a parameter

Returns
True if all Withdrawn Routes were successfully cleared or false otherwise. In case of an error an appropriate message will be printed to log

◆ getBasicMsgHeader()

bgp_common_header* pcpp::BgpUpdateMessageLayer::getBasicMsgHeader ( ) const
inline

Get a pointer to the basic BGP message data. Notice this points directly to the data, so any change will modify the actual packet data

Returns
A pointer to a bgp_common_header structure containing the data

◆ getBgpMessageType()

BgpMessageType pcpp::BgpUpdateMessageLayer::getBgpMessageType ( ) const
inlineoverridevirtual
Returns
BGP message type

Implements pcpp::BgpLayer.

◆ getNetworkLayerReachabilityInfo()

void pcpp::BgpUpdateMessageLayer::getNetworkLayerReachabilityInfo ( std::vector< prefix_and_ip > &  nlri)

Get a vector of the Network Layer Reachability Info currently in the message

Parameters
[out]nlriA reference to a vector the NLRI data will be written to

◆ getNetworkLayerReachabilityInfoLength()

size_t pcpp::BgpUpdateMessageLayer::getNetworkLayerReachabilityInfoLength ( ) const
Returns
The size in [bytes] of the Network Layer Reachability Info

◆ getPathAttributes()

void pcpp::BgpUpdateMessageLayer::getPathAttributes ( std::vector< path_attribute > &  pathAttributes)

Get a vector of the Path Attributes currently in the message

Parameters
[out]pathAttributesA reference to a vector the Path Attributes data will be written to

◆ getPathAttributesLength()

size_t pcpp::BgpUpdateMessageLayer::getPathAttributesLength ( ) const
Returns
The size in [bytes] of the Path Attributes data

◆ getWithdrawnRoutes()

void pcpp::BgpUpdateMessageLayer::getWithdrawnRoutes ( std::vector< prefix_and_ip > &  withdrawnRoutes)

Get a vector of the Withdrawn Routes currently in the message

Parameters
[out]withdrawnRoutesA reference to a vector the Withdrawn Routes data will be written to

◆ getWithdrawnRoutesLength()

size_t pcpp::BgpUpdateMessageLayer::getWithdrawnRoutesLength ( ) const
Returns
The size in [bytes] of the Withdrawn Routes data

◆ isDataValid()

static bool pcpp::BgpUpdateMessageLayer::isDataValid ( const uint8_t *  data,
size_t  dataSize 
)
static

A static method that takes a byte array and detects whether it is a BgpUpdateMessage

Parameters
[in]dataA byte array
[in]dataSizeThe byte array size (in bytes)
Returns
True if the data looks like a valid BgpUpdateMessage layer

◆ setNetworkLayerReachabilityInfo()

bool pcpp::BgpUpdateMessageLayer::setNetworkLayerReachabilityInfo ( const std::vector< prefix_and_ip > &  nlri)

Set NLRI data in this message. This method will override any existing NLRI data in the message. If the input is an empty vector all NLRI data will be removed. This method automatically sets the bgp_common_header::length field in the message

Parameters
[in]nlriNew NLRI data to set in the message
Returns
True if all NLRI data was set successfully or false otherwise. In case of an error an appropriate message will be printed to log

◆ setPathAttributes()

bool pcpp::BgpUpdateMessageLayer::setPathAttributes ( const std::vector< path_attribute > &  pathAttributes)

Set Path Attributes in this message. This method will override any existing Path Attributes in the message. If the input is an empty vector all Path Attributes will be removed. This method automatically sets the bgp_common_header::length and the Path Attributes length fields in the message

Parameters
[in]pathAttributesNew Path Attributes to set in the message
Returns
True if all Path Attributes were set successfully or false otherwise. In case of an error an appropriate message will be printed to log

◆ setWithdrawnRoutes()

bool pcpp::BgpUpdateMessageLayer::setWithdrawnRoutes ( const std::vector< prefix_and_ip > &  withdrawnRoutes)

Set Withdrawn Routes in this message. This method will override any existing Withdrawn Routes in the message. If the input is an empty vector all Withdrawn Routes will be removed. This method automatically sets the bgp_common_header::length and the Withdrawn Routes length fields in the message

Parameters
[in]withdrawnRoutesNew Withdrawn Routes to set in the message
Returns
True if all Withdrawn Routes were set successfully or false otherwise. In case of an error an appropriate message will be printed to log