/
buildpayload.go
64 lines (60 loc) · 1.98 KB
/
buildpayload.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// Unless explicitly stated otherwise all files in this repository are licensed
// under the Apache License Version 2.0.
// This product includes software developed at Datadog (https://www.datadoghq.com/).
// Copyright 2022-present Datadog, Inc.
package flowaggregator
import (
"time"
"github.com/DataDog/datadog-agent/comp/netflow/common"
"github.com/DataDog/datadog-agent/comp/netflow/format"
"github.com/DataDog/datadog-agent/comp/netflow/payload"
)
func buildPayload(aggFlow *common.Flow, hostname string, flushTime time.Time) payload.FlowPayload {
return payload.FlowPayload{
// TODO: Implement Tos
FlushTimestamp: flushTime.UnixMilli(),
FlowType: string(aggFlow.FlowType),
SamplingRate: aggFlow.SamplingRate,
Direction: format.Direction(aggFlow.Direction),
Device: payload.Device{
Namespace: aggFlow.Namespace,
},
Exporter: payload.Exporter{
IP: format.IPAddr(aggFlow.ExporterAddr),
},
Start: aggFlow.StartTimestamp,
End: aggFlow.EndTimestamp,
Bytes: aggFlow.Bytes,
Packets: aggFlow.Packets,
EtherType: format.EtherType(aggFlow.EtherType),
IPProtocol: format.IPProtocol(aggFlow.IPProtocol),
Source: payload.Endpoint{
IP: format.IPAddr(aggFlow.SrcAddr),
Port: format.Port(aggFlow.SrcPort),
Mac: format.MacAddress(aggFlow.SrcMac),
Mask: format.CIDR(aggFlow.SrcAddr, aggFlow.SrcMask),
},
Destination: payload.Endpoint{
IP: format.IPAddr(aggFlow.DstAddr),
Port: format.Port(aggFlow.DstPort),
Mac: format.MacAddress(aggFlow.DstMac),
Mask: format.CIDR(aggFlow.DstAddr, aggFlow.DstMask),
},
Ingress: payload.ObservationPoint{
Interface: payload.Interface{
Index: aggFlow.InputInterface,
},
},
Egress: payload.ObservationPoint{
Interface: payload.Interface{
Index: aggFlow.OutputInterface,
},
},
Host: hostname,
TCPFlags: format.TCPFlags(aggFlow.TCPFlags),
NextHop: payload.NextHop{
IP: format.IPAddr(aggFlow.NextHop),
},
AdditionalFields: aggFlow.AdditionalFields,
}
}