Skip to content

Commit

Permalink
WIP: dbg DNS over TCP NA fields
Browse files Browse the repository at this point in the history
Signed-off-by: Mohamed Mahmoud <[email protected]>
  • Loading branch information
msherif1234 committed Oct 26, 2023
1 parent 0891b34 commit 3d702de
Show file tree
Hide file tree
Showing 8 changed files with 19 additions and 1 deletion.
12 changes: 11 additions & 1 deletion bpf/dns_tracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
#define DNS_PORT 53
#define DNS_QR_FLAG 0x8000
#define UDP_MAXMSG 512
#define EINVAL 22
#define E2BIG 7

struct dns_header {
u16 id;
Expand Down Expand Up @@ -71,13 +73,20 @@ static __always_inline void track_dns_packet(struct __sk_buff *skb, pkt_info *pk

u8 len = calc_dns_header_offset(pkt, data_end);
if (!len) {
pkt->dns_errno = EINVAL;
return;
}

struct dns_header dns;
int ret;
u32 dns_offset = (long)pkt->l4_hdr - (long)skb->data + len;

if (bpf_skb_load_bytes(skb, dns_offset, &dns, sizeof(dns)) < 0) {
if (dns_offset > skb->len - sizeof(dns)) {
pkt->dns_errno = E2BIG;
return;
}
if ((ret = bpf_skb_load_bytes(skb, dns_offset, &dns, sizeof(dns))) < 0) {
pkt->dns_errno = -ret;
return;
}

Expand All @@ -97,6 +106,7 @@ static __always_inline void track_dns_packet(struct __sk_buff *skb, pkt_info *pk
pkt->dns_latency = ts - *value;
pkt->dns_id = dns_id;
pkt->dns_flags = flags;
pkt->dns_errno = -ret;
bpf_map_delete_elem(&dns_flows, &dns_req);
}
} // end of dns response
Expand Down
2 changes: 2 additions & 0 deletions bpf/flows.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.flags = pkt.dns_flags;
aggregate_flow->dns_record.latency = pkt.dns_latency;
aggregate_flow->dns_record.errno = pkt.dns_errno;
long ret = bpf_map_update_elem(&aggregated_flows, &id, aggregate_flow, BPF_ANY);
if (trace_messages && ret != 0) {
// usually error -16 (-EBUSY) is printed here.
Expand All @@ -119,6 +120,7 @@ static inline int flow_monitor(struct __sk_buff *skb, u8 direction) {
.dns_record.id = pkt.dns_id,
.dns_record.flags = pkt.dns_flags,
.dns_record.latency = pkt.dns_latency,
.dns_record.errno = pkt.dns_errno,
};

// even if we know that the entry is new, another CPU might be concurrently inserting a flow
Expand Down
2 changes: 2 additions & 0 deletions bpf/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ typedef struct flow_metrics_t {
u16 id;
u16 flags;
u64 latency;
u8 errno;
} __attribute__((packed)) dns_record;
u64 flow_rtt;
} __attribute__((packed)) flow_metrics;
Expand Down Expand Up @@ -162,6 +163,7 @@ typedef struct pkt_info_t {
u16 dns_id;
u16 dns_flags;
u64 dns_latency;
u8 dns_errno;
} pkt_info;

// Structure for payload metadata
Expand Down
1 change: 1 addition & 0 deletions pkg/ebpf/bpf_bpfeb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified pkg/ebpf/bpf_bpfeb.o
Binary file not shown.
1 change: 1 addition & 0 deletions pkg/ebpf/bpf_bpfel.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file modified pkg/ebpf/bpf_bpfel.o
Binary file not shown.
2 changes: 2 additions & 0 deletions pkg/flow/record_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ func TestRecordBinaryEncoding(t *testing.T) {
01, 00, // id
0x80, 00, // flags
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // latency
0x00, // errno
// u64 flow_rtt
0xad, 0xde, 0xef, 0xbe, 0xef, 0xbe, 0xad, 0xde,
}))
Expand Down Expand Up @@ -82,6 +83,7 @@ func TestRecordBinaryEncoding(t *testing.T) {
Id: 0x0001,
Flags: 0x0080,
Latency: 0x1817161514131211,
Errno: 0,
},
FlowRtt: 0xdeadbeefbeefdead,
},
Expand Down

0 comments on commit 3d702de

Please sign in to comment.