@@ -142,8 +142,8 @@ static int StorePcapFlow(flowParam_t *flowParam, struct FlowNode *Node) {
142142 if (flowParam -> extendedFlow ) {
143143 UpdateRecordSize (EXipInfoSize );
144144 PushExtension (recordHeader , EXipInfo , ipInfo );
145- ipInfo -> minTTL = Node -> hotNode .minTTL ;
146- ipInfo -> maxTTL = Node -> hotNode .maxTTL ;
145+ ipInfo -> minTTL = Node -> coldNode .minTTL ;
146+ ipInfo -> maxTTL = Node -> coldNode .maxTTL ;
147147 ipInfo -> fragmentFlags = Node -> coldNode .fragmentFlags ;
148148
149149 if (Node -> coldNode .vlanID ) {
@@ -358,37 +358,44 @@ __attribute__((noreturn)) void *flow_thread(void *thread_data) {
358358 // init flow source
359359 fs -> dataBlock = WriteBlock (fs -> nffile , NULL );
360360 fs -> bad_packets = 0 ;
361- while (1 ) {
361+ int done = 0 ;
362+ while (!done ) {
362363 struct FlowNode * Node = Pop_Node (flowParam -> NodeList );
363- if (Node -> hotNode .signal == SIGNAL_SYNC ) {
364- // Flush Exporter Stat to file
365- FlushExporterStats (fs );
366- // flush current block and close file
367- fs -> dataBlock = WriteBlock (fs -> nffile , fs -> dataBlock );
368- CloseFlowFile (flowParam , Node -> timestamp );
369- fs -> nffile = OpenNewFile (SetUniqueTmpName (fs -> tmpFileName ), CREATOR_NFPCAPD , compress , NOT_ENCRYPTED );
370- if (!fs -> nffile ) {
371- LogError ("Fatal: OpenNewFile() failed for ident: %s" , fs -> Ident );
372- pthread_kill (flowParam -> parent , SIGUSR1 );
364+ switch (Node -> nodeType ) {
365+ case FLOW_NODE :
366+ StorePcapFlow (flowParam , Node );
373367 break ;
374- }
375- SetIdent (fs -> nffile , fs -> Ident );
376-
377- // Dump all exporters to the buffer for new file
378- FlushStdRecords (fs );
379-
380- } else if (Node -> hotNode .signal == SIGNAL_DONE ) {
381- // Flush Exporter Stat to file
382- FlushExporterStats (fs );
383- // flush current block and close file
384- FlushBlock (fs -> nffile , fs -> dataBlock );
385- CloseFlowFile (flowParam , Node -> timestamp );
386- break ;
387- } else if (Node -> hotNode .nodeType == FLOW_NODE ) {
388- StorePcapFlow (flowParam , Node );
389- } else {
390- // skip this node
368+ case SIGNAL_NODE_SYNC :
369+ dbg_printf ("Received signal_node_sync\n" );
370+ // Flush Exporter Stat to file
371+ FlushExporterStats (fs );
372+ // flush current block and close file
373+ fs -> dataBlock = WriteBlock (fs -> nffile , fs -> dataBlock );
374+ CloseFlowFile (flowParam , Node -> timestamp );
375+ fs -> nffile = OpenNewFile (SetUniqueTmpName (fs -> tmpFileName ), CREATOR_NFPCAPD , compress , NOT_ENCRYPTED );
376+ if (!fs -> nffile ) {
377+ LogError ("Fatal: OpenNewFile() failed for ident: %s" , fs -> Ident );
378+ pthread_kill (flowParam -> parent , SIGUSR1 );
379+ break ;
380+ }
381+ SetIdent (fs -> nffile , fs -> Ident );
382+
383+ // Dump all exporters to the buffer for new file
384+ FlushStdRecords (fs );
385+ break ;
386+ case SIGNAL_NODE_DONE :
387+ dbg_printf ("Received signal_node_done\n" );
388+ // Flush Exporter Stat to file
389+ FlushExporterStats (fs );
390+ // flush current block and close file
391+ FlushBlock (fs -> nffile , fs -> dataBlock );
392+ CloseFlowFile (flowParam , Node -> timestamp );
393+ done = 1 ;
394+ break ;
395+ default :
396+ LogError ("Unknown node type: %u\n" , Node -> nodeType );
391397 }
398+
392399 Free_Node (Node );
393400 }
394401
0 commit comments