12 #include "../endian_conversion.h"
17 #include "../fframe.h"
18 #include "../caddress.h"
19 #include "rofl/datapath/pipeline/common/large_types.h"
46 } __attribute__((packed));
60 fframe((uint8_t*)hdr, hdrlen),
61 exthdr((
struct ipv6_ext_hdr_t*)
soframe())
68 fipv6ext(uint8_t* hdr,
size_t hdrlen)
throw (eIPv6FrameInval) :
70 exthdr((
struct ipv6_ext_hdr_t*)
soframe())
73 throw eIPv6FrameInval();
85 fipv6ext& operator= (fipv6ext
const& ipv6ext) {
89 exthdr = (
struct ipv6_ext_hdr_t*)
soframe();
96 info.assign(vas(
"[IPv6-ext-hdr(%p): nxthdr:%d hdrextlen:%d block-cnt:%d bytes-len:%d]",
97 exthdr, exthdr->nxthdr, exthdr->len, (exthdr->len + 1), (exthdr->len + 1) * 8));
119 #define IPV6_ADDR_LEN 16
120 #define IPV6_VERSION 6
134 uint8_t src[IPV6_ADDR_LEN];
135 uint8_t dst[IPV6_ADDR_LEN];
137 } __attribute__((packed));
140 IPPROTO_IPV6_HOPOPT = 0,
145 IPPROTO_IPV6_ROUTE = 43,
146 IPPROTO_IPV6_FRAG = 44,
147 IPPROTO_IPV6_ICMP = 58,
148 IPPROTO_IPV6_NONXT = 59,
149 IPPROTO_IPV6_OPTS = 60,
150 IPPROTO_IPV6_MIPV6 = 135,
156 struct ipv6_hdr_t *ipv6_hdr;
159 std::map<enum ipv6_ext_t, fipv6ext> ipv6exts;
190 get_ext_hdr(
enum ipv6_ext_t type)
210 validate(uint16_t total_len = 0)
const;
242 set_version(uint8_t version = 0x06);
252 set_traffic_class(uint8_t tc);
257 set_dscp(uint8_t dscp);
262 set_ecn(uint8_t ecn);
267 get_traffic_class() const;
282 set_flow_label(uint32_t flabel);
287 get_flow_label() const;
292 set_payload_length(uint16_t len);
297 get_payload_length() const;
302 set_next_header(uint8_t nxthdr);
312 set_hop_limit(uint8_t hops);
327 set_ipv6_src(uint8_t *somem,
size_t memlen) throw (eIPv6FrameInval);
342 get_ipv6_src() const;
347 set_ipv6_dst(uint8_t *somen,
size_t memlen) throw (eIPv6FrameInval);
362 get_ipv6_dst() const;
373 operator<< (std::ostream& os,
fipv6frame const& ipv6) {
374 os << dynamic_cast<fframe const&>( ipv6 );
375 os <<
indent(2) <<
"<fipv6frame: ";
376 os <<
"dst:" << ipv6.get_ipv6_dst() <<
" ";
377 os <<
"src:" << ipv6.get_ipv6_src() <<
" ";
378 os <<
"tc:" << (
unsigned int)ipv6.get_traffic_class() <<
" ";
379 os <<
"flowlabel:" << (
unsigned int)ipv6.get_flow_label() <<
" ";
380 os <<
">" << std::endl;
virtual void payload_insert(uint8_t *data, size_t datalen)
Definition: fipv6frame.cc:138
fipv6frame(uint8_t *data, size_t datalen)
Definition: fipv6frame.cc:9
Definition: caddress.h:589
Definition: fipv6frame.h:29
fframe & operator=(const fframe &frame)
Definition: fframe.cc:79
virtual uint8_t * payload() const
Definition: fipv6frame.cc:147
void ipv6_calc_checksum()
Definition: fipv6frame.cc:177
virtual void initialize()
Definition: fipv6frame.cc:42
Definition: fipv6frame.h:28
fframe(uint8_t *_data=NULL, size_t _datalen=0)
Definition: fframe.cc:9
Definition: fipv6frame.h:129
Definition: fipv6frame.h:34
virtual size_t framelen() const
Definition: fframe.h:202
Definition: fipv6frame.h:42
Definition: fipv6frame.h:26
virtual size_t need_bytes() const
Definition: fipv6frame.cc:120
virtual ~fipv6frame()
Definition: fipv6frame.cc:23
void set_ipv6_dst(uint8_t *somen, size_t memlen)
Definition: fipv6frame.cc:383
virtual void validate(uint16_t total_len=0) const
Definition: fipv6frame.cc:166
C++ abstraction for malloc'ed memory areas.
Definition: cmemory.h:44
virtual uint8_t * soframe() const
Definition: fframe.h:192
Definition: fipv6frame.h:30
void set_ipv6_src(uint8_t *somem, size_t memlen)
Definition: fipv6frame.cc:339
Definition: fipv6frame.h:111
virtual bool complete() const
Definition: fipv6frame.cc:106
virtual size_t payloadlen() const
Definition: fipv6frame.cc:156