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 27, 2023
1 parent 0891b34 commit e986454
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 1 deletion.
10 changes: 9 additions & 1 deletion bpf/dns_tracker.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#define DNS_PORT 53
#define DNS_QR_FLAG 0x8000
#define UDP_MAXMSG 512
#define EINVAL 22

struct dns_header {
u16 id;
Expand Down Expand Up @@ -71,13 +72,19 @@ 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;
pkt->dns_offset = dns_offset;
pkt->dns_tcp_len = len;
pkt->dns_skb_len = skb->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) {
pkt->dns_errno = -ret;
return;
}

Expand All @@ -97,6 +104,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
8 changes: 8 additions & 0 deletions bpf/flows.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ 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;
aggregate_flow->dns_record.offset = pkt.dns_offset;
aggregate_flow->dns_record.tcp_len = pkt.dns_tcp_len;
aggregate_flow->dns_record.skb_len = pkt.dns_skb_len;
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 +123,10 @@ 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,
.dns_record.offset = pkt.dns_offset,
.dns_record.tcp_len = pkt.dns_tcp_len,
.dns_record.skb_len = pkt.dns_skb_len,
};

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

// Structure for payload metadata
Expand Down
4 changes: 4 additions & 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.
4 changes: 4 additions & 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.
8 changes: 8 additions & 0 deletions pkg/flow/record_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,10 @@ func TestRecordBinaryEncoding(t *testing.T) {
01, 00, // id
0x80, 00, // flags
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, // latency
0x00, // errno
0, 0, 0, 0, // dns offset
0, 0, 0, 0, // tcp len
0, 0, 0, 0, // skb len
// u64 flow_rtt
0xad, 0xde, 0xef, 0xbe, 0xef, 0xbe, 0xad, 0xde,
}))
Expand Down Expand Up @@ -82,6 +86,10 @@ func TestRecordBinaryEncoding(t *testing.T) {
Id: 0x0001,
Flags: 0x0080,
Latency: 0x1817161514131211,
Errno: 0,
Offset: 0,
TcpLen: 0,
SkbLen: 0,
},
FlowRtt: 0xdeadbeefbeefdead,
},
Expand Down

0 comments on commit e986454

Please sign in to comment.