14#ifndef SIMICS_SYSTEMC_INJECTION_EXTENSION_INJECT_ETHERNET_COMMON_H
15#define SIMICS_SYSTEMC_INJECTION_EXTENSION_INJECT_ETHERNET_COMMON_H
36template <
typename TPAYLOAD>
42 simics::types::frags_frag_t *frag) {
43 if (!SIM_attr_is_data(*attr)) {
44 parser->reportError(
"fragslist must be data");
47 frag->start = SIM_attr_data(*attr);
48 frag->len = SIM_attr_data_size(*attr);
58 std::vector<attr_value_t> fraglist;
59 if (!p.
lookUp(
"fraglist", &fraglist))
63 parser->
reportError(
"fraglist must not exceed %i elements",
67 frags->
nfrags = fraglist.size();
70 for (
auto &frag_attr : fraglist) {
79 attr_value_t *attr, TPAYLOAD *gp)
override {
83 attr_value_t frame_attr;
84 if (!p.
lookUp(
"frame", &frame_attr))
93 if (!p.
lookUp(
"crc_ok", &crc_ok))
97 ->frame(frame, crc_ok);
104 if (frames_.find(gp) != frames_.end()) {
111 std::map<TPAYLOAD *, simics::types::frags_t *> frames_;
#define ATTR_DICT_PARSER_NAMESPACE(ns)
Definition: attr_dict_parser.h:32
Definition: attr_dict_parser.h:38
void reportError(const char *str,...)
AttrDictParser init(const attr_value_t *attr)
bool lookUp(const std::string &key, T *v)
Definition: attr_dict_parser.h:53
Definition: inject_base.h:43
Definition: extension_setter.h:32
Definition: inject_ethernet_common.h:37
bool extractFrags(AttrDictParser *parser, const attr_value_t *attr, simics::types::frags_t *frags)
Definition: inject_ethernet_common.h:51
void released(TPAYLOAD *gp) override
Definition: inject_ethernet_common.h:103
bool setValue(AttrDictParser *parser, const std::string &key, attr_value_t *attr, TPAYLOAD *gp) override
Definition: inject_ethernet_common.h:78
bool extractFragsFrag(AttrDictParser *parser, const attr_value_t *attr, simics::types::frags_frag_t *frag)
Definition: inject_ethernet_common.h:41
#define MAX_FRAGS_FRAGS
Definition: frags.h:23
size_t len
Definition: frags.h:37
frags_frag_t fraglist[MAX_FRAGS_FRAGS]
Definition: frags.h:39
unsigned nfrags
Definition: frags.h:38