Skip to content

Commit ab5e8d9

Browse files
committed
UniRec output: basicList to unirec array conversion fix
1 parent a075dbc commit ab5e8d9

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

extra_plugins/output/unirec/src/translator.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,7 @@ translator_table_fill_rec(translator_t *trans, const struct map_rec *map_rec,
13501350
tr_ipfix->sem = ipfix->def->data_semantic;
13511351
if (ipfix->next) {
13521352
tr_ipfix->next = malloc(sizeof(struct tr_ipfix_s));
1353+
tr_ipfix = tr_ipfix->next;
13531354
} else {
13541355
tr_ipfix->next = NULL;
13551356
}
@@ -1647,12 +1648,29 @@ translator_translate(translator_t *trans, struct fds_drec *ipfix_rec, uint16_t f
16471648
// First, call special internal conversion functions, if enabled
16481649
int converted_fields = translator_call_internals(trans);
16491650

1651+
struct tr_ipfix_s ipx_list_elem;
16501652
// Try to convert all IPFIX fields
16511653
while (fds_drec_iter_next(&it) != FDS_EOC) {
16521654
// Find the conversion function
16531655
const struct fds_tfield *info = it.field.info;
16541656
key.ipfix.id = info->id;
16551657
key.ipfix.pen = info->en;
1658+
key.ipfix.next = NULL;
1659+
1660+
if (info->def && info->def->data_type == FDS_ET_BASIC_LIST) {
1661+
struct fds_blist_iter list_it;
1662+
1663+
fds_blist_iter_init(&list_it, &it.field, NULL);
1664+
if (fds_blist_iter_next(&list_it) != FDS_OK) {
1665+
continue;
1666+
}
1667+
const struct fds_tfield *tmp = list_it.field.info;
1668+
ipx_list_elem.id = tmp->id;
1669+
ipx_list_elem.pen = tmp->en;
1670+
ipx_list_elem.next = NULL;
1671+
1672+
key.ipfix.next = &ipx_list_elem;
1673+
}
16561674

16571675
def = bsearch(&key, trans->table.recs, table_rec_cnt, table_rec_size, translator_cmp);
16581676
if (!def) {

0 commit comments

Comments
 (0)