libtins 4.5
Loading...
Searching...
No Matches
Tins::LLC Class Reference

Representing a LLC frame. More...

#include <llc.h>

Inheritance diagram for Tins::LLC:
Tins::PDU

Public Types

enum  Format { INFORMATION = 0 , SUPERVISORY = 1 , UNNUMBERED = 3 }
 LLC Format flags.
 
enum  ModifierFunctions {
  UI = 0x00 , XID = 0x1D , TEST = 0x07 , SABME = 0x1E ,
  DISC = 0x02 , UA = 0x06 , DM = 0x18 , FRMR = 0x11
}
 LLC Modifier functions.
 
enum  SupervisoryFunctions { RECEIVE_READY = 0 , REJECT = 2 , RECEIVE_NOT_READY = 1 }
 LLC Supervisory functions.
 
- Public Types inherited from Tins::PDU
enum  endian_type { BE , LE }
 
enum  PDUType {
  RAW , ETHERNET_II , IEEE802_3 , DOT3 = IEEE802_3 ,
  RADIOTAP , DOT11 , DOT11_ACK , DOT11_ASSOC_REQ ,
  DOT11_ASSOC_RESP , DOT11_AUTH , DOT11_BEACON , DOT11_BLOCK_ACK ,
  DOT11_BLOCK_ACK_REQ , DOT11_CF_END , DOT11_DATA , DOT11_CONTROL ,
  DOT11_DEAUTH , DOT11_DIASSOC , DOT11_END_CF_ACK , DOT11_MANAGEMENT ,
  DOT11_PROBE_REQ , DOT11_PROBE_RESP , DOT11_PS_POLL , DOT11_REASSOC_REQ ,
  DOT11_REASSOC_RESP , DOT11_RTS , DOT11_QOS_DATA , LLC ,
  SNAP , IP , ARP , TCP ,
  UDP , ICMP , BOOTP , DHCP ,
  EAPOL , RC4EAPOL , RSNEAPOL , DNS ,
  LOOPBACK , IPv6 , ICMPv6 , SLL ,
  DHCPv6 , DOT1AD , DOT1Q , PPPOE ,
  STP , PPI , IPSEC_AH , IPSEC_ESP ,
  PKTAP , MPLS , DOT11_CONTROL_TA , VXLAN ,
  UNKNOWN = 999 , USER_DEFINED_PDU = 1000
}
 Enum which identifies each type of PDU. More...
 
typedef byte_array serialization_type
 

Public Member Functions

 LLC ()
 Default constructor.
 
 LLC (uint8_t dsap, uint8_t ssap)
 Constructs an instance of LLC, setting the dsap and ssap. The control field is set to 0.
 
 LLC (const uint8_t *buffer, uint32_t total_sz)
 Constructs a LLC object from a buffer and adds all identifiable PDUs found in the buffer as children of this one.
 
void group (bool value)
 Setter for the group destination bit.
 
void dsap (uint8_t new_dsap)
 Setter for the dsap field.
 
void response (bool value)
 Setter for the response bit.
 
void ssap (uint8_t new_ssap)
 Setter for the ssap field.
 
void type (Format type)
 Setter for the LLC frame format type.
 
void send_seq_number (uint8_t seq_number)
 Setter for sender send sequence number. Only applied if format is INFORMATION.
 
void receive_seq_number (uint8_t seq_number)
 Setter for sender receive sequence number. Only applied if format is INFORMATION or SUPERVISORY.
 
void poll_final (bool value)
 Setter for the poll/final flag.
 
void supervisory_function (SupervisoryFunctions new_func)
 Setter for the supervisory function. Only applied if format is SUPERVISORY.
 
void modifier_function (ModifierFunctions mod_func)
 Setter for the modifier function field. Only applied if format is UNNUMBERED.
 
void add_xid_information (uint8_t xid_id, uint8_t llc_type_class, uint8_t receive_window)
 Add a xid information field. Only applied if format is UNNUMBERED and function is XID.
 
bool group ()
 Getter for the group destination bit.
 
uint8_t dsap ()
 Getter for the dsap field.
 
bool response ()
 Getter for the response bit.
 
uint8_t ssap ()
 Getter for the ssap field.
 
uint8_t type ()
 Getter for the LLC frame format type.
 
uint8_t send_seq_number ()
 Getter for sender send sequence number.
 
uint8_t receive_seq_number ()
 Getter for sender receive sequence number.
 
bool poll_final ()
 Getter for the poll/final flag.
 
uint8_t supervisory_function ()
 Getter for the supervisory function.
 
uint8_t modifier_function ()
 Getter for the modifier function field.
 
uint32_t header_size () const
 Returns the LLC frame's header length.
 
PDUType pdu_type () const
 Getter for the PDU's type.
 
void clear_information_fields ()
 Delete all the information fields added.
 
LLCclone () const
 Clones this PDU.
 
- Public Member Functions inherited from Tins::PDU
 PDU ()
 Default constructor.
 
 PDU (PDU &&rhs) TINS_NOEXCEPT
 Move constructor.
 
PDUoperator= (PDU &&rhs) TINS_NOEXCEPT
 Move assignment operator.
 
virtual ~PDU ()
 PDU destructor.
 
virtual uint32_t trailer_size () const
 Trailer's size.
 
uint32_t size () const
 The whole chain of PDU's size, including this one.
 
virtual uint32_t advertised_size () const
 The whole chain of PDU's advertised size, including this one.
 
PDUinner_pdu () const
 Getter for the inner PDU.
 
PDUparent_pdu () const
 
PDUrelease_inner_pdu ()
 Releases the inner PDU.
 
void inner_pdu (PDU *next_pdu)
 Sets the child PDU.
 
void inner_pdu (const PDU &next_pdu)
 Sets the child PDU.
 
serialization_type serialize ()
 Serializes the whole chain of PDU's, including this one.
 
template<typename T >
T * find_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag.
 
template<typename T >
const T * find_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag.
 
template<typename T >
T & rfind_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag.
 
template<typename T >
const T & rfind_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag.
 
virtual void send (PacketSender &sender, const NetworkInterface &iface)
 Send the stack of PDUs through a PacketSender.
 
virtual PDUrecv_response (PacketSender &sender, const NetworkInterface &iface)
 Receives a matching response for this packet.
 
virtual bool matches_response (const uint8_t *ptr, uint32_t total_sz) const
 Check whether ptr points to a valid response for this PDU.
 
virtual bool matches_flag (PDUType flag) const
 Check whether this PDU matches the specified flag.
 

Static Public Attributes

static const PDU::PDUType pdu_flag = PDU::LLC
 This PDU's flag.
 
static const uint8_t GLOBAL_DSAP_ADDR = 0xFF
 Represents the LLC global DSAP address.
 
static const uint8_t NULL_ADDR = 0x00
 Represents the LLC NULL address.
 
- Static Public Attributes inherited from Tins::PDU
static const endian_type endianness = BE
 

Additional Inherited Members

- Protected Member Functions inherited from Tins::PDU
 PDU (const PDU &other)
 Copy constructor.
 
PDUoperator= (const PDU &other)
 Copy assignment operator.
 
void copy_inner_pdu (const PDU &pdu)
 Copy other PDU's inner PDU(if any).
 
virtual void prepare_for_serialize ()
 Prepares this PDU for serialization.
 
void serialize (uint8_t *buffer, uint32_t total_sz)
 Serializes this PDU and propagates this action to child PDUs.
 

Detailed Description

Representing a LLC frame.

This PDU follows the standard LLC frame described in the IEEE 802.2 specs.

Constructor & Destructor Documentation

◆ LLC() [1/2]

Tins::LLC::LLC ( uint8_t dsap,
uint8_t ssap )

Constructs an instance of LLC, setting the dsap and ssap. The control field is set to 0.

Parameters
dsapThe dsap value to be set.
ssapThe ssap value to be set.

◆ LLC() [2/2]

Tins::LLC::LLC ( const uint8_t * buffer,
uint32_t total_sz )

Constructs a LLC object from a buffer and adds all identifiable PDUs found in the buffer as children of this one.

If there is not enough size for a LLC header, a malformed_packet exception is thrown.

Parameters
bufferThe buffer from which this PDU will be constructed.
total_szThe total size of the buffer.

Member Function Documentation

◆ add_xid_information()

void Tins::LLC::add_xid_information ( uint8_t xid_id,
uint8_t llc_type_class,
uint8_t receive_window )

Add a xid information field. Only applied if format is UNNUMBERED and function is XID.

Parameters
xid_idXID information of the MAC sublayer.
llc_type_classValue to set the llc_type_class field.
receive_windowXID sender's receive window size.

◆ clone()

LLC * Tins::LLC::clone ( ) const
inlinevirtual

Clones this PDU.

See also
PDU::clone

Implements Tins::PDU.

◆ dsap() [1/2]

uint8_t Tins::LLC::dsap ( )
inline

Getter for the dsap field.

Returns
The dsap field value

◆ dsap() [2/2]

void Tins::LLC::dsap ( uint8_t new_dsap)

Setter for the dsap field.

Parameters
new_dsapThe new dsap field.

◆ group() [1/2]

bool Tins::LLC::group ( )
inline

Getter for the group destination bit.

Returns
Whether the group bit is set or not.

◆ group() [2/2]

void Tins::LLC::group ( bool value)

Setter for the group destination bit.

Parameters
valueThe value to be set.

◆ header_size()

uint32_t Tins::LLC::header_size ( ) const
virtual

Returns the LLC frame's header length.

Returns
The header's size.
See also
PDU::header_size()

Implements Tins::PDU.

◆ modifier_function() [1/2]

uint8_t Tins::LLC::modifier_function ( )
inline

Getter for the modifier function field.

Returns
The modifier function if format is UNNUMBERED else 0.

◆ modifier_function() [2/2]

void Tins::LLC::modifier_function ( LLC::ModifierFunctions mod_func)

Setter for the modifier function field. Only applied if format is UNNUMBERED.

Parameters
modifier_funcValue to set on the modifier function field.

◆ pdu_type()

PDUType Tins::LLC::pdu_type ( ) const
inlinevirtual

Getter for the PDU's type.

See also
PDU::pdu_type

Implements Tins::PDU.

◆ poll_final() [1/2]

bool Tins::LLC::poll_final ( )
inline

Getter for the poll/final flag.

Returns
Whether the poll/final flag is set.

◆ poll_final() [2/2]

void Tins::LLC::poll_final ( bool value)

Setter for the poll/final flag.

Parameters
valueBool indicating the value of the flag.

◆ receive_seq_number() [1/2]

uint8_t Tins::LLC::receive_seq_number ( )
inline

Getter for sender receive sequence number.

Returns
The sender receive sequence number if format is INFORMATION or SUPERVISORY else 0.

◆ receive_seq_number() [2/2]

void Tins::LLC::receive_seq_number ( uint8_t seq_number)

Setter for sender receive sequence number. Only applied if format is INFORMATION or SUPERVISORY.

Parameters
seq_numberNew sender receive sequence number to be set.

◆ response() [1/2]

bool Tins::LLC::response ( )
inline

Getter for the response bit.

Returns
Whether the response bit is set or not.

◆ response() [2/2]

void Tins::LLC::response ( bool value)

Setter for the response bit.

Parameters
valueThe value to be set.

◆ send_seq_number() [1/2]

uint8_t Tins::LLC::send_seq_number ( )
inline

Getter for sender send sequence number.

Returns
The sender send sequence number if format is INFORMATION else 0.

◆ send_seq_number() [2/2]

void Tins::LLC::send_seq_number ( uint8_t seq_number)

Setter for sender send sequence number. Only applied if format is INFORMATION.

Parameters
seq_numberNew sender send sequence number to be set.

◆ ssap() [1/2]

uint8_t Tins::LLC::ssap ( )
inline

Getter for the ssap field.

Returns
The ssap field.

◆ ssap() [2/2]

void Tins::LLC::ssap ( uint8_t new_ssap)

Setter for the ssap field.

Parameters
new_ssapThe new ssap field.

◆ supervisory_function() [1/2]

uint8_t Tins::LLC::supervisory_function ( )
inline

Getter for the supervisory function.

Returns
The supervisory function if format is SUPERVISORY else 0.

◆ supervisory_function() [2/2]

void Tins::LLC::supervisory_function ( LLC::SupervisoryFunctions new_func)

Setter for the supervisory function. Only applied if format is SUPERVISORY.

Parameters
new_funcValue to set on the supervisory function field.

◆ type() [1/2]

uint8_t Tins::LLC::type ( )
inline

Getter for the LLC frame format type.

Returns
The LLC frame format.

◆ type() [2/2]

void Tins::LLC::type ( LLC::Format type)

Setter for the LLC frame format type.

Parameters
typeThe LLC frame format to set.

The documentation for this class was generated from the following files: