@@ -263,6 +263,14 @@ func addrReplaceCheck(dstAddr *[]byte, v []byte, eType *uint32, ipv6 bool) {
263
263
}
264
264
}
265
265
266
+ func ConvertNTPEpoch (ntpTime uint64 ) uint64 {
267
+ seconds := ntpTime >> 32
268
+ seconds -= 2208988800
269
+
270
+ fraction := float64 (ntpTime & 0xffffffff ) * 1.0e9 / (1 << 32 )
271
+ return seconds * 1e9 + uint64 (fraction )
272
+ }
273
+
266
274
func ConvertNetFlowDataSet (flowMessage * ProtoProducerMessage , version uint16 , baseTime uint32 , uptime uint32 , record []netflow.DataField , mapperNetFlow TemplateMapper , mapperSFlow PacketMapper ) error {
267
275
var time uint64
268
276
baseTimeNs := uint64 (baseTime ) * 1000000000
@@ -575,12 +583,12 @@ func ConvertNetFlowDataSet(flowMessage *ProtoProducerMessage, version uint16, ba
575
583
if err := DecodeUNumber (v , & time ); err != nil {
576
584
return err
577
585
}
578
- flowMessage .TimeFlowStartNs = time * 1000
586
+ flowMessage .TimeFlowStartNs = ConvertNTPEpoch ( time )
579
587
case netflow .IPFIX_FIELD_flowStartNanoseconds :
580
588
if err := DecodeUNumber (v , & time ); err != nil {
581
589
return err
582
590
}
583
- flowMessage .TimeFlowStartNs = time
591
+ flowMessage .TimeFlowStartNs = ConvertNTPEpoch ( time )
584
592
case netflow .IPFIX_FIELD_flowEndSeconds :
585
593
if err := DecodeUNumber (v , & time ); err != nil {
586
594
return err
@@ -595,12 +603,12 @@ func ConvertNetFlowDataSet(flowMessage *ProtoProducerMessage, version uint16, ba
595
603
if err := DecodeUNumber (v , & time ); err != nil {
596
604
return err
597
605
}
598
- flowMessage .TimeFlowEndNs = time * 1000
606
+ flowMessage .TimeFlowEndNs = ConvertNTPEpoch ( time )
599
607
case netflow .IPFIX_FIELD_flowEndNanoseconds :
600
608
if err := DecodeUNumber (v , & time ); err != nil {
601
609
return err
602
610
}
603
- flowMessage .TimeFlowEndNs = time
611
+ flowMessage .TimeFlowEndNs = ConvertNTPEpoch ( time )
604
612
case netflow .IPFIX_FIELD_flowStartDeltaMicroseconds :
605
613
if err := DecodeUNumber (v , & time ); err != nil {
606
614
return err
0 commit comments