Skip to content
Snippets Groups Projects
Unverified Commit d69703f5 authored by Mohamed S. Mahmoud's avatar Mohamed S. Mahmoud Committed by GitHub
Browse files

dbg DNS over TCP NA fields (#218)

parent ab9c03c1
Branches
Tags
No related merge requests found
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#define DNS_PORT 53 #define DNS_PORT 53
#define DNS_QR_FLAG 0x8000 #define DNS_QR_FLAG 0x8000
#define UDP_MAXMSG 512 #define UDP_MAXMSG 512
#define EINVAL 22
struct dns_header { struct dns_header {
u16 id; u16 id;
...@@ -64,21 +65,22 @@ static __always_inline u8 calc_dns_header_offset(pkt_info *pkt, void *data_end) ...@@ -64,21 +65,22 @@ static __always_inline u8 calc_dns_header_offset(pkt_info *pkt, void *data_end)
return len; return len;
} }
static __always_inline void track_dns_packet(struct __sk_buff *skb, pkt_info *pkt) { static __always_inline int track_dns_packet(struct __sk_buff *skb, pkt_info *pkt) {
void *data_end = (void *)(long)skb->data_end; void *data_end = (void *)(long)skb->data_end;
if (pkt->id->dst_port == DNS_PORT || pkt->id->src_port == DNS_PORT) { if (pkt->id->dst_port == DNS_PORT || pkt->id->src_port == DNS_PORT) {
dns_flow_id dns_req; dns_flow_id dns_req;
u8 len = calc_dns_header_offset(pkt, data_end); u8 len = calc_dns_header_offset(pkt, data_end);
if (!len) { if (!len) {
return; return EINVAL;
} }
struct dns_header dns; struct dns_header dns;
int ret;
u32 dns_offset = (long)pkt->l4_hdr - (long)skb->data + len; u32 dns_offset = (long)pkt->l4_hdr - (long)skb->data + len;
if (bpf_skb_load_bytes(skb, dns_offset, &dns, sizeof(dns)) < 0) { if ((ret = bpf_skb_load_bytes(skb, dns_offset, &dns, sizeof(dns))) < 0) {
return; return -ret;
} }
u16 dns_id = bpf_ntohs(dns.id); u16 dns_id = bpf_ntohs(dns.id);
...@@ -101,6 +103,7 @@ static __always_inline void track_dns_packet(struct __sk_buff *skb, pkt_info *pk ...@@ -101,6 +103,7 @@ static __always_inline void track_dns_packet(struct __sk_buff *skb, pkt_info *pk
} }
} // end of dns response } // end of dns response
} // end of dns port check } // end of dns port check
return 0;
} }
#endif // __DNS_TRACKER_H__ #endif // __DNS_TRACKER_H__
...@@ -72,9 +72,9 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) { ...@@ -72,9 +72,9 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) {
// This is currently not to be enabled by default. // This is currently not to be enabled by default.
calculate_flow_rtt(&pkt, direction, data_end); calculate_flow_rtt(&pkt, direction, data_end);
} }
int dns_errno = 0;
if (enable_dns_tracking) { if (enable_dns_tracking) {
track_dns_packet(skb, &pkt); dns_errno = track_dns_packet(skb, &pkt);
} }
// TODO: we need to add spinlock here when we deprecate versions prior to 5.1, or provide // TODO: we need to add spinlock here when we deprecate versions prior to 5.1, or provide
// a spinlocked alternative version and use it selectively https://lwn.net/Articles/779120/ // a spinlocked alternative version and use it selectively https://lwn.net/Articles/779120/
...@@ -97,6 +97,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) { ...@@ -97,6 +97,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) {
aggregate_flow->dns_record.id = pkt.dns_id; aggregate_flow->dns_record.id = pkt.dns_id;
aggregate_flow->dns_record.flags = pkt.dns_flags; aggregate_flow->dns_record.flags = pkt.dns_flags;
aggregate_flow->dns_record.latency = pkt.dns_latency; aggregate_flow->dns_record.latency = pkt.dns_latency;
aggregate_flow->dns_record.errno = dns_errno;
long ret = bpf_map_update_elem(&aggregated_flows, &id, aggregate_flow, BPF_ANY); long ret = bpf_map_update_elem(&aggregated_flows, &id, aggregate_flow, BPF_ANY);
if (trace_messages && ret != 0) { if (trace_messages && ret != 0) {
// usually error -16 (-EBUSY) is printed here. // usually error -16 (-EBUSY) is printed here.
...@@ -119,6 +120,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) { ...@@ -119,6 +120,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) {
.dns_record.id = pkt.dns_id, .dns_record.id = pkt.dns_id,
.dns_record.flags = pkt.dns_flags, .dns_record.flags = pkt.dns_flags,
.dns_record.latency = pkt.dns_latency, .dns_record.latency = pkt.dns_latency,
.dns_record.errno = dns_errno,
}; };
// even if we know that the entry is new, another CPU might be concurrently inserting a flow // even if we know that the entry is new, another CPU might be concurrently inserting a flow
......
...@@ -89,6 +89,7 @@ typedef struct flow_metrics_t { ...@@ -89,6 +89,7 @@ typedef struct flow_metrics_t {
u16 id; u16 id;
u16 flags; u16 flags;
u64 latency; u64 latency;
u8 errno;
} __attribute__((packed)) dns_record; } __attribute__((packed)) dns_record;
u64 flow_rtt; u64 flow_rtt;
} __attribute__((packed)) flow_metrics; } __attribute__((packed)) flow_metrics;
......
...@@ -90,11 +90,13 @@ func PBFlowToMap(flow *pbflow.Record) config.GenericMap { ...@@ -90,11 +90,13 @@ func PBFlowToMap(flow *pbflow.Record) config.GenericMap {
} }
} }
out["DnsErrno"] = flow.GetDnsErrno()
if flow.GetDnsId() != 0 { if flow.GetDnsId() != 0 {
out["DnsLatencyMs"] = flow.DnsLatency.AsDuration().Milliseconds() out["DnsLatencyMs"] = flow.DnsLatency.AsDuration().Milliseconds()
out["DnsId"] = flow.GetDnsId() out["DnsId"] = flow.GetDnsId()
out["DnsFlags"] = flow.GetDnsFlags() out["DnsFlags"] = flow.GetDnsFlags()
out["DnsFlagsResponseCode"] = dnsRcodeToStr(flow.GetDnsFlags() & 0xF) out["DnsFlagsResponseCode"] = dnsRcodeToStr(flow.GetDnsFlags() & 0xF)
out["DnsErrno"] = uint32(0)
} }
if flow.GetPktDropLatestDropCause() != 0 { if flow.GetPktDropLatestDropCause() != 0 {
......
...@@ -55,7 +55,8 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -55,7 +55,8 @@ func TestDecodeProtobuf(t *testing.T) {
AgentIp: &pbflow.IP{ AgentIp: &pbflow.IP{
IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807}, IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807},
}, },
Flags: 0x100, Flags: 0x100,
DnsErrno: 0,
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
"FlowDirection": 1, "FlowDirection": 1,
...@@ -76,6 +77,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -76,6 +77,7 @@ func TestDecodeProtobuf(t *testing.T) {
"TimeFlowEndMs": someTime.UnixMilli(), "TimeFlowEndMs": someTime.UnixMilli(),
"Interface": "eth0", "Interface": "eth0",
"AgentIP": "10.9.8.7", "AgentIP": "10.9.8.7",
"DnsErrno": uint32(0),
}, },
}, },
{ {
...@@ -109,6 +111,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -109,6 +111,7 @@ func TestDecodeProtobuf(t *testing.T) {
AgentIp: &pbflow.IP{ AgentIp: &pbflow.IP{
IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807}, IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807},
}, },
DnsErrno: 0,
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
"FlowDirection": 1, "FlowDirection": 1,
...@@ -128,6 +131,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -128,6 +131,7 @@ func TestDecodeProtobuf(t *testing.T) {
"TimeFlowEndMs": someTime.UnixMilli(), "TimeFlowEndMs": someTime.UnixMilli(),
"Interface": "eth0", "Interface": "eth0",
"AgentIP": "10.9.8.7", "AgentIP": "10.9.8.7",
"DnsErrno": uint32(0),
}, },
}, },
{ {
...@@ -161,6 +165,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -161,6 +165,7 @@ func TestDecodeProtobuf(t *testing.T) {
}, },
IcmpType: 8, IcmpType: 8,
IcmpCode: 0, IcmpCode: 0,
DnsErrno: 0,
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
"FlowDirection": 1, "FlowDirection": 1,
...@@ -180,6 +185,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -180,6 +185,7 @@ func TestDecodeProtobuf(t *testing.T) {
"AgentIP": "10.9.8.7", "AgentIP": "10.9.8.7",
"IcmpType": uint32(8), "IcmpType": uint32(8),
"IcmpCode": uint32(0), "IcmpCode": uint32(0),
"DnsErrno": uint32(0),
}, },
}, },
{ {
...@@ -213,6 +219,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -213,6 +219,7 @@ func TestDecodeProtobuf(t *testing.T) {
}, },
IcmpType: 128, IcmpType: 128,
IcmpCode: 0, IcmpCode: 0,
DnsErrno: 0,
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
"FlowDirection": 1, "FlowDirection": 1,
...@@ -232,6 +239,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -232,6 +239,7 @@ func TestDecodeProtobuf(t *testing.T) {
"AgentIP": "101:101:101:101:101:101:101:101", "AgentIP": "101:101:101:101:101:101:101:101",
"IcmpType": uint32(128), "IcmpType": uint32(128),
"IcmpCode": uint32(0), "IcmpCode": uint32(0),
"DnsErrno": uint32(0),
}, },
}, },
{ {
...@@ -264,6 +272,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -264,6 +272,7 @@ func TestDecodeProtobuf(t *testing.T) {
AgentIp: &pbflow.IP{ AgentIp: &pbflow.IP{
IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807}, IpFamily: &pbflow.IP_Ipv4{Ipv4: 0x0a090807},
}, },
DnsErrno: 0,
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
"FlowDirection": 1, "FlowDirection": 1,
...@@ -277,6 +286,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -277,6 +286,7 @@ func TestDecodeProtobuf(t *testing.T) {
"TimeFlowEndMs": someTime.UnixMilli(), "TimeFlowEndMs": someTime.UnixMilli(),
"Interface": "eth0", "Interface": "eth0",
"AgentIP": "10.9.8.7", "AgentIP": "10.9.8.7",
"DnsErrno": uint32(0),
}, },
}, },
{ {
...@@ -319,6 +329,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -319,6 +329,7 @@ func TestDecodeProtobuf(t *testing.T) {
DnsLatency: durationpb.New(someDuration), DnsLatency: durationpb.New(someDuration),
DnsId: 1, DnsId: 1,
DnsFlags: 0x8001, DnsFlags: 0x8001,
DnsErrno: 0,
TimeFlowRtt: durationpb.New(someDuration), TimeFlowRtt: durationpb.New(someDuration),
}, },
expected: &config.GenericMap{ expected: &config.GenericMap{
...@@ -349,6 +360,7 @@ func TestDecodeProtobuf(t *testing.T) { ...@@ -349,6 +360,7 @@ func TestDecodeProtobuf(t *testing.T) {
"DnsId": uint32(1), "DnsId": uint32(1),
"DnsFlags": uint32(0x8001), "DnsFlags": uint32(0x8001),
"DnsFlagsResponseCode": "FormErr", "DnsFlagsResponseCode": "FormErr",
"DnsErrno": uint32(0),
"TimeFlowRttNs": someDuration.Nanoseconds(), "TimeFlowRttNs": someDuration.Nanoseconds(),
}, },
}, },
...@@ -407,6 +419,7 @@ func TestPBFlowToMap(t *testing.T) { ...@@ -407,6 +419,7 @@ func TestPBFlowToMap(t *testing.T) {
DnsLatency: durationpb.New(someDuration), DnsLatency: durationpb.New(someDuration),
DnsId: 1, DnsId: 1,
DnsFlags: 0x80, DnsFlags: 0x80,
DnsErrno: 0,
TimeFlowRtt: durationpb.New(someDuration), TimeFlowRtt: durationpb.New(someDuration),
} }
...@@ -441,6 +454,7 @@ func TestPBFlowToMap(t *testing.T) { ...@@ -441,6 +454,7 @@ func TestPBFlowToMap(t *testing.T) {
"DnsId": uint32(1), "DnsId": uint32(1),
"DnsFlags": uint32(0x80), "DnsFlags": uint32(0x80),
"DnsFlagsResponseCode": "NoError", "DnsFlagsResponseCode": "NoError",
"DnsErrno": uint32(0),
"TimeFlowRttNs": someDuration.Nanoseconds(), "TimeFlowRttNs": someDuration.Nanoseconds(),
}, out) }, out)
......
...@@ -25,6 +25,7 @@ type BpfDnsRecordT struct { ...@@ -25,6 +25,7 @@ type BpfDnsRecordT struct {
Id uint16 Id uint16
Flags uint16 Flags uint16
Latency uint64 Latency uint64
Errno uint8
} }
type BpfFlowId BpfFlowIdT type BpfFlowId BpfFlowIdT
......
No preview for this file type
...@@ -25,6 +25,7 @@ type BpfDnsRecordT struct { ...@@ -25,6 +25,7 @@ type BpfDnsRecordT struct {
Id uint16 Id uint16
Flags uint16 Flags uint16
Latency uint64 Latency uint64
Errno uint8
} }
type BpfFlowId BpfFlowIdT type BpfFlowId BpfFlowIdT
......
No preview for this file type
...@@ -79,6 +79,7 @@ func v4FlowToPB(fr *flow.Record) *pbflow.Record { ...@@ -79,6 +79,7 @@ func v4FlowToPB(fr *flow.Record) *pbflow.Record {
PktDropLatestDropCause: fr.Metrics.PktDrops.LatestDropCause, PktDropLatestDropCause: fr.Metrics.PktDrops.LatestDropCause,
DnsId: uint32(fr.Metrics.DnsRecord.Id), DnsId: uint32(fr.Metrics.DnsRecord.Id),
DnsFlags: uint32(fr.Metrics.DnsRecord.Flags), DnsFlags: uint32(fr.Metrics.DnsRecord.Flags),
DnsErrno: uint32(fr.Metrics.DnsRecord.Errno),
TimeFlowRtt: durationpb.New(fr.TimeFlowRtt), TimeFlowRtt: durationpb.New(fr.TimeFlowRtt),
} }
if fr.Metrics.DnsRecord.Latency != 0 { if fr.Metrics.DnsRecord.Latency != 0 {
...@@ -128,6 +129,7 @@ func v6FlowToPB(fr *flow.Record) *pbflow.Record { ...@@ -128,6 +129,7 @@ func v6FlowToPB(fr *flow.Record) *pbflow.Record {
PktDropLatestDropCause: fr.Metrics.PktDrops.LatestDropCause, PktDropLatestDropCause: fr.Metrics.PktDrops.LatestDropCause,
DnsId: uint32(fr.Metrics.DnsRecord.Id), DnsId: uint32(fr.Metrics.DnsRecord.Id),
DnsFlags: uint32(fr.Metrics.DnsRecord.Flags), DnsFlags: uint32(fr.Metrics.DnsRecord.Flags),
DnsErrno: uint32(fr.Metrics.DnsRecord.Errno),
TimeFlowRtt: durationpb.New(fr.TimeFlowRtt), TimeFlowRtt: durationpb.New(fr.TimeFlowRtt),
} }
if fr.Metrics.DnsRecord.Latency != 0 { if fr.Metrics.DnsRecord.Latency != 0 {
......
...@@ -115,6 +115,10 @@ func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) { ...@@ -115,6 +115,10 @@ func Accumulate(r *ebpf.BpfFlowMetrics, src *ebpf.BpfFlowMetrics) {
if src.Dscp != 0 { if src.Dscp != 0 {
r.Dscp = src.Dscp r.Dscp = src.Dscp
} }
// Accumulate DNSErrno
if src.DnsRecord.Errno != 0 {
r.DnsRecord.Errno = src.DnsRecord.Errno
}
} }
// IP returns the net.IP equivalent object // IP returns the net.IP equivalent object
......
...@@ -43,6 +43,7 @@ func TestRecordBinaryEncoding(t *testing.T) { ...@@ -43,6 +43,7 @@ func TestRecordBinaryEncoding(t *testing.T) {
01, 00, // id 01, 00, // id
0x80, 00, // flags 0x80, 00, // flags
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // latency 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // latency
0x00, // errno
// u64 flow_rtt // u64 flow_rtt
0xad, 0xde, 0xef, 0xbe, 0xef, 0xbe, 0xad, 0xde, 0xad, 0xde, 0xef, 0xbe, 0xef, 0xbe, 0xad, 0xde,
})) }))
...@@ -82,6 +83,7 @@ func TestRecordBinaryEncoding(t *testing.T) { ...@@ -82,6 +83,7 @@ func TestRecordBinaryEncoding(t *testing.T) {
Id: 0x0001, Id: 0x0001,
Flags: 0x0080, Flags: 0x0080,
Latency: 0x1817161514131211, Latency: 0x1817161514131211,
Errno: 0,
}, },
FlowRtt: 0xdeadbeefbeefdead, FlowRtt: 0xdeadbeefbeefdead,
}, },
......
...@@ -191,6 +191,7 @@ type Record struct { ...@@ -191,6 +191,7 @@ type Record struct {
DnsFlags uint32 `protobuf:"varint,22,opt,name=dns_flags,json=dnsFlags,proto3" json:"dns_flags,omitempty"` DnsFlags uint32 `protobuf:"varint,22,opt,name=dns_flags,json=dnsFlags,proto3" json:"dns_flags,omitempty"`
DnsLatency *durationpb.Duration `protobuf:"bytes,23,opt,name=dns_latency,json=dnsLatency,proto3" json:"dns_latency,omitempty"` DnsLatency *durationpb.Duration `protobuf:"bytes,23,opt,name=dns_latency,json=dnsLatency,proto3" json:"dns_latency,omitempty"`
TimeFlowRtt *durationpb.Duration `protobuf:"bytes,24,opt,name=time_flow_rtt,json=timeFlowRtt,proto3" json:"time_flow_rtt,omitempty"` TimeFlowRtt *durationpb.Duration `protobuf:"bytes,24,opt,name=time_flow_rtt,json=timeFlowRtt,proto3" json:"time_flow_rtt,omitempty"`
DnsErrno uint32 `protobuf:"varint,25,opt,name=dns_errno,json=dnsErrno,proto3" json:"dns_errno,omitempty"`
} }
func (x *Record) Reset() { func (x *Record) Reset() {
...@@ -393,6 +394,13 @@ func (x *Record) GetTimeFlowRtt() *durationpb.Duration { ...@@ -393,6 +394,13 @@ func (x *Record) GetTimeFlowRtt() *durationpb.Duration {
return nil return nil
} }
func (x *Record) GetDnsErrno() uint32 {
if x != nil {
return x.DnsErrno
}
return 0
}
type DataLink struct { type DataLink struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
...@@ -670,7 +678,7 @@ var file_proto_flow_proto_rawDesc = []byte{ ...@@ -670,7 +678,7 @@ var file_proto_flow_proto_rawDesc = []byte{
0x07, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72,
0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x66, 0x6c,
0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x6f, 0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69,
0x65, 0x73, 0x22, 0xef, 0x07, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a, 0x65, 0x73, 0x22, 0x8c, 0x08, 0x0a, 0x06, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x21, 0x0a,
0x0c, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x0c, 0x65, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20,
0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x65, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c,
0x12, 0x2f, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x12, 0x2f, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20,
...@@ -733,35 +741,37 @@ var file_proto_flow_proto_rawDesc = []byte{ ...@@ -733,35 +741,37 @@ var file_proto_flow_proto_rawDesc = []byte{
0x6f, 0x77, 0x5f, 0x72, 0x74, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x77, 0x5f, 0x72, 0x74, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44,
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6c, 0x6f, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6c, 0x6f,
0x77, 0x52, 0x74, 0x74, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x6e, 0x6b, 0x77, 0x52, 0x74, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x6e, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6e,
0x12, 0x17, 0x0a, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x6f, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x6e, 0x73, 0x45, 0x72, 0x72, 0x6e,
0x04, 0x52, 0x06, 0x73, 0x72, 0x63, 0x4d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x17, 0x0a,
0x5f, 0x6d, 0x61, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x73, 0x74, 0x4d, 0x07, 0x73, 0x72, 0x63, 0x5f, 0x6d, 0x61, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06,
0x61, 0x63, 0x22, 0x6b, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, 0x0a, 0x73, 0x72, 0x63, 0x4d, 0x61, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x73, 0x74, 0x5f, 0x6d, 0x61,
0x08, 0x73, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x64, 0x73, 0x74, 0x4d, 0x61, 0x63, 0x22,
0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, 0x63, 0x6b, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x25, 0x0a, 0x08, 0x73, 0x72,
0x41, 0x64, 0x64, 0x72, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x63, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52, 0x07, 0x73, 0x72, 0x63, 0x41, 0x64, 0x64,
0x49, 0x50, 0x52, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x72, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20,
0x73, 0x63, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x49, 0x50, 0x52,
0x3d, 0x0a, 0x02, 0x49, 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, 0x20, 0x07, 0x64, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x73, 0x63, 0x70,
0x01, 0x28, 0x07, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x64, 0x73, 0x63, 0x70, 0x22, 0x3d, 0x0a, 0x02,
0x70, 0x76, 0x36, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x49, 0x50, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x34, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07,
0x36, 0x42, 0x0b, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5d, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x34, 0x12, 0x14, 0x0a, 0x04, 0x69, 0x70, 0x76, 0x36,
0x0a, 0x09, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x04, 0x69, 0x70, 0x76, 0x36, 0x42, 0x0b,
0x72, 0x63, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x0a, 0x09, 0x69, 0x70, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x22, 0x5d, 0x0a, 0x09, 0x54,
0x72, 0x63, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x72, 0x63, 0x5f,
0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x73, 0x72, 0x63, 0x50,
0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x6f, 0x72, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18,
0x01, 0x28, 0x0d, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x24, 0x0a, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x73, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1a,
0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d,
0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2a, 0x24, 0x0a, 0x09, 0x44, 0x69,
0x53, 0x10, 0x01, 0x32, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45,
0x12, 0x31, 0x0a, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x53, 0x53, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x45, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01,
0x77, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x32, 0x3e, 0x0a, 0x09, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x31, 0x0a,
0x6f, 0x77, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x04, 0x53, 0x65, 0x6e, 0x64, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e, 0x52,
0x79, 0x22, 0x00, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x2e,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00,
0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2f, 0x70, 0x62, 0x66, 0x6c, 0x6f, 0x77, 0x62, 0x06, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x33,
} }
var ( var (
......
...@@ -53,6 +53,7 @@ message Record { ...@@ -53,6 +53,7 @@ message Record {
uint32 dns_flags = 22; uint32 dns_flags = 22;
google.protobuf.Duration dns_latency = 23; google.protobuf.Duration dns_latency = 23;
google.protobuf.Duration time_flow_rtt = 24; google.protobuf.Duration time_flow_rtt = 24;
uint32 dns_errno = 25;
} }
message DataLink { message DataLink {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment