@@ -121,11 +121,31 @@ var (
121121 "sourcePodLabels" ,
122122 "destinationPodLabels" ,
123123 }
124+ antreaFlowEndSecondsElementList = []string {
125+ "flowEndSecondsFromSourceNode" ,
126+ "flowEndSecondsFromDestinationNode" ,
127+ }
128+ antreaThroughputElementList = []string {
129+ "throughput" ,
130+ "reverseThroughput" ,
131+ }
132+ antreaSourceThroughputElementList = []string {
133+ "throughputFromSourceNode" ,
134+ "reverseThroughputFromSourceNode" ,
135+ }
136+ antreaDestinationThroughputElementList = []string {
137+ "throughputFromDestinationNode" ,
138+ "reverseThroughputFromDestinationNode" ,
139+ }
124140 aggregationElements = & ipfixintermediate.AggregationElements {
125141 NonStatsElements : nonStatsElementList ,
126142 StatsElements : statsElementList ,
127143 AggregatedSourceStatsElements : antreaSourceStatsElementList ,
128144 AggregatedDestinationStatsElements : antreaDestinationStatsElementList ,
145+ AntreaFlowEndSecondsElements : antreaFlowEndSecondsElementList ,
146+ ThroughputElements : antreaThroughputElementList ,
147+ SourceThroughputElements : antreaSourceThroughputElementList ,
148+ DestinationThroughputElements : antreaDestinationThroughputElementList ,
129149 }
130150
131151 correlateFields = []string {
@@ -289,7 +309,8 @@ func (fa *flowAggregator) InitCollectingProcess() error {
289309 IsEncrypted : false ,
290310 }
291311 }
292- cpInput .NumExtraElements = len (antreaSourceStatsElementList ) + len (antreaDestinationStatsElementList ) + len (antreaLabelsElementList )
312+ cpInput .NumExtraElements = len (antreaSourceStatsElementList ) + len (antreaDestinationStatsElementList ) + len (antreaLabelsElementList ) +
313+ len (antreaFlowEndSecondsElementList ) + len (antreaThroughputElementList ) + len (antreaSourceThroughputElementList ) + len (antreaDestinationThroughputElementList )
293314 var err error
294315 fa .collectingProcess , err = ipfix .NewIPFIXCollectingProcess (cpInput )
295316 return err
@@ -457,7 +478,6 @@ func (fa *flowAggregator) sendFlowKeyRecord(key ipfixintermediate.FlowKey, recor
457478 if err = fa .aggregationProcess .ResetStatElementsInRecord (record .Record ); err != nil {
458479 return err
459480 }
460-
461481 klog .V (4 ).Infof ("Data set sent successfully: %d Bytes sent" , sentBytes )
462482 fa .numRecordsExported = fa .numRecordsExported + 1
463483 return nil
@@ -474,33 +494,21 @@ func (fa *flowAggregator) sendTemplateSet(isIPv6 bool) (int, error) {
474494 templateID = fa .templateIDv6
475495 }
476496 for _ , ie := range ianaInfoElements {
477- element , err := fa .registry .GetInfoElement (ie , ipfixregistry .IANAEnterpriseID )
478- if err != nil {
479- return 0 , fmt .Errorf ("%s not present. returned error: %v" , ie , err )
480- }
481- ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
497+ ie , err := fa .createInfoElementForTemplateSet (ie , ipfixregistry .IANAEnterpriseID )
482498 if err != nil {
483499 return 0 , err
484500 }
485501 elements = append (elements , ie )
486502 }
487503 for _ , ie := range ianaReverseInfoElements {
488- element , err := fa .registry .GetInfoElement (ie , ipfixregistry .IANAReversedEnterpriseID )
489- if err != nil {
490- return 0 , fmt .Errorf ("%s not present. returned error: %v" , ie , err )
491- }
492- ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
504+ ie , err := fa .createInfoElementForTemplateSet (ie , ipfixregistry .IANAReversedEnterpriseID )
493505 if err != nil {
494506 return 0 , err
495507 }
496508 elements = append (elements , ie )
497509 }
498510 for _ , ie := range antreaInfoElements {
499- element , err := fa .registry .GetInfoElement (ie , ipfixregistry .AntreaEnterpriseID )
500- if err != nil {
501- return 0 , fmt .Errorf ("%s not present. returned error: %v" , ie , err )
502- }
503- ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
511+ ie , err := fa .createInfoElementForTemplateSet (ie , ipfixregistry .AntreaEnterpriseID )
504512 if err != nil {
505513 return 0 , err
506514 }
@@ -511,34 +519,52 @@ func (fa *flowAggregator) sendTemplateSet(isIPv6 bool) (int, error) {
511519 for i := range statsElementList {
512520 // Add Antrea source stats fields
513521 ieName := antreaSourceStatsElementList [i ]
514- element , err := fa .registry .GetInfoElement (ieName , ipfixregistry .AntreaEnterpriseID )
515- if err != nil {
516- return 0 , fmt .Errorf ("%s not present. returned error: %v" , ieName , err )
517- }
518- ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
522+ ie , err := fa .createInfoElementForTemplateSet (ieName , ipfixregistry .AntreaEnterpriseID )
519523 if err != nil {
520524 return 0 , err
521525 }
522526 elements = append (elements , ie )
523527 // Add Antrea destination stats fields
524528 ieName = antreaDestinationStatsElementList [i ]
525- element , err = fa .registry . GetInfoElement (ieName , ipfixregistry .AntreaEnterpriseID )
529+ ie , err = fa .createInfoElementForTemplateSet (ieName , ipfixregistry .AntreaEnterpriseID )
526530 if err != nil {
527- return 0 , fmt . Errorf ( "%s not present. returned error: %v" , ieName , err )
531+ return 0 , err
528532 }
529- ie , err = ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
533+ elements = append (elements , ie )
534+ }
535+ for _ , ie := range antreaFlowEndSecondsElementList {
536+ ie , err := fa .createInfoElementForTemplateSet (ie , ipfixregistry .AntreaEnterpriseID )
537+ if err != nil {
538+ return 0 , err
539+ }
540+ elements = append (elements , ie )
541+ }
542+ for i := range antreaThroughputElementList {
543+ // Add common throughput fields
544+ ieName := antreaThroughputElementList [i ]
545+ ie , err := fa .createInfoElementForTemplateSet (ieName , ipfixregistry .AntreaEnterpriseID )
546+ if err != nil {
547+ return 0 , err
548+ }
549+ elements = append (elements , ie )
550+ // Add source node specific throughput fields
551+ ieName = antreaSourceThroughputElementList [i ]
552+ ie , err = fa .createInfoElementForTemplateSet (ieName , ipfixregistry .AntreaEnterpriseID )
553+ if err != nil {
554+ return 0 , err
555+ }
556+ elements = append (elements , ie )
557+ // Add destination node specific throughput fields
558+ ieName = antreaDestinationThroughputElementList [i ]
559+ ie , err = fa .createInfoElementForTemplateSet (ieName , ipfixregistry .AntreaEnterpriseID )
530560 if err != nil {
531561 return 0 , err
532562 }
533563 elements = append (elements , ie )
534564 }
535565 if fa .includePodLabels {
536566 for _ , ie := range antreaLabelsElementList {
537- element , err := fa .registry .GetInfoElement (ie , ipfixregistry .AntreaEnterpriseID )
538- if err != nil {
539- return 0 , fmt .Errorf ("error when getting InformationElement %s from registry: %v" , ie , err )
540- }
541- ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
567+ ie , err := fa .createInfoElementForTemplateSet (ie , ipfixregistry .AntreaEnterpriseID )
542568 if err != nil {
543569 return 0 , err
544570 }
@@ -668,3 +694,15 @@ func (fa *flowAggregator) GetRecordMetrics() querier.Metrics {
668694 NumConnToCollector : fa .collectingProcess .GetNumConnToCollector (),
669695 }
670696}
697+
698+ func (fa * flowAggregator ) createInfoElementForTemplateSet (ieName string , enterpriseID uint32 ) (ipfixentities.InfoElementWithValue , error ) {
699+ element , err := fa .registry .GetInfoElement (ieName , enterpriseID )
700+ if err != nil {
701+ return nil , fmt .Errorf ("%s not present. returned error: %v" , ieName , err )
702+ }
703+ ie , err := ipfixentities .DecodeAndCreateInfoElementWithValue (element , nil )
704+ if err != nil {
705+ return nil , err
706+ }
707+ return ie , nil
708+ }
0 commit comments