libtins
4.5
Toggle main menu visibility
Loading...
Searching...
No Matches
include
tins
snap.h
1
/*
2
* Copyright (c) 2017, Matias Fontanini
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are
7
* met:
8
*
9
* * Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* * Redistributions in binary form must reproduce the above
12
* copyright notice, this list of conditions and the following disclaimer
13
* in the documentation and/or other materials provided with the
14
* distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*
28
*/
29
30
#ifndef TINS_SNAP_H
31
#define TINS_SNAP_H
32
33
#include <stdint.h>
34
#include <tins/pdu.h>
35
#include <tins/macros.h>
36
#include <tins/endianness.h>
37
#include <tins/small_uint.h>
38
39
namespace
Tins
{
40
48
class
TINS_API
SNAP
:
public
PDU
{
49
public
:
53
static
const
PDU::PDUType
pdu_flag
= PDU::SNAP;
54
60
SNAP
();
61
74
SNAP
(
const
uint8_t* buffer, uint32_t total_sz);
75
76
/* Setters */
77
82
void
control
(uint8_t new_control);
83
88
void
org_code
(
small_uint<24>
new_org);
89
94
void
eth_type
(uint16_t new_eth);
95
96
/* Getters */
97
102
uint8_t
dsap
()
const
{
103
return
snap_.dsap;
104
}
105
110
uint8_t
ssap
()
const
{
111
return
snap_.ssap;
112
}
113
118
uint8_t
control
()
const
{
119
#if TINS_IS_LITTLE_ENDIAN
120
return
(snap_.control_org) & 0xff;
121
#else
122
return
(snap_.control_org >> 24) & 0xff;
123
#endif
124
}
125
130
small_uint<24>
org_code
()
const
{
131
#if TINS_IS_LITTLE_ENDIAN
132
return
Endian::be_to_host<uint32_t>(snap_.control_org & 0xffffff00);
133
#else
134
return
snap_.control_org & 0xffffff;
135
#endif
136
}
137
142
uint16_t
eth_type
()
const
{
143
return
Endian::be_to_host(snap_.eth_type);
144
}
145
152
uint32_t header_size()
const
;
153
158
PDUType
pdu_type
()
const
{
159
return
pdu_flag
;
160
}
161
167
SNAP
*
clone
()
const
{
168
return
new
SNAP
(*
this
);
169
}
170
private
:
171
TINS_BEGIN_PACK
172
struct
snap_header {
173
uint8_t dsap;
174
uint8_t ssap;
175
uint32_t control_org;
176
uint16_t eth_type;
177
} TINS_END_PACK;
178
179
void
write_serialization(uint8_t* buffer, uint32_t total_sz);
180
181
snap_header snap_;
182
};
183
184
}
// Tins
185
186
#endif
// TINS_SNAP_H
Tins::PDU::PDU
PDU()
Default constructor.
Definition
pdu.cpp:50
Tins::PDU::PDUType
PDUType
Enum which identifies each type of PDU.
Definition
pdu.h:127
Tins::SNAP::eth_type
uint16_t eth_type() const
Getter for the Ethernet Type field.
Definition
snap.h:142
Tins::SNAP::SNAP
SNAP()
Creates an instance of SNAP This constructor sets the dsap and ssap fields to 0xaa,...
Definition
snap.cpp:46
Tins::SNAP::control
void control(uint8_t new_control)
Setter for the Control field.
Definition
snap.cpp:66
Tins::SNAP::org_code
small_uint< 24 > org_code() const
Getter for the Organization Code field.
Definition
snap.h:130
Tins::SNAP::pdu_flag
static const PDU::PDUType pdu_flag
This PDU's flag.
Definition
snap.h:53
Tins::SNAP::ssap
uint8_t ssap() const
Getter for the SSAP field.
Definition
snap.h:110
Tins::SNAP::eth_type
void eth_type(uint16_t new_eth)
Setter for the Ethernet Type field.
Definition
snap.cpp:82
Tins::SNAP::control
uint8_t control() const
Getter for the Control field.
Definition
snap.h:118
Tins::SNAP::pdu_type
PDUType pdu_type() const
Getter for the PDU's type.
Definition
snap.h:158
Tins::SNAP::org_code
void org_code(small_uint< 24 > new_org)
Setter for the Organization Code field.
Definition
snap.cpp:74
Tins::SNAP::clone
SNAP * clone() const
Clones this PDU.
Definition
snap.h:167
Tins::SNAP::dsap
uint8_t dsap() const
Getter for the DSAP field.
Definition
snap.h:102
Tins::small_uint
Represents a field of n bits.
Definition
small_uint.h:52
Tins
The Tins namespace.
Definition
address_range.h:38
Generated on
for libtins by
1.17.0