@@ -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