Skip to content

Commit 5fa4452

Browse files
author
lec-bit
committed
metric
Signed-off-by: lec-bit <glfhzmy@126.com>
1 parent c7449b9 commit 5fa4452

File tree

68 files changed

+2966
-481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+2966
-481
lines changed

bpf/include/bpf_common.h

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323
192 /* this value should be \
2424
small that make compile success */
2525

26+
#define RINGBUF_SIZE (1 << 12)
27+
#define MAP_SIZE_OF_DSTINFO 8192
28+
2629
struct manager_key {
2730
union {
2831
__u64 netns_cookie;
@@ -46,6 +49,8 @@ struct sock_storage_data {
4649
__u64 connect_ns;
4750
__u8 direction;
4851
__u8 connect_success;
52+
__u32 pid_tgid;
53+
char dst_svc_name[BPF_DATA_MAX_LEN];
4954
};
5055

5156
struct {
@@ -87,6 +92,14 @@ struct {
8792
__uint(map_flags, BPF_F_NO_PREALLOC);
8893
} kmesh_map1600 SEC(".maps");
8994

95+
struct {
96+
__uint(type, BPF_MAP_TYPE_HASH);
97+
__type(key, __u64);
98+
__type(value, struct bpf_sock_tuple);
99+
__uint(max_entries, MAP_SIZE_OF_DSTINFO);
100+
__uint(map_flags, BPF_F_NO_PREALLOC);
101+
} map_of_orig_dst SEC(".maps");
102+
90103
/*
91104
* From v5.4, bpf_get_netns_cookie can be called for bpf cgroup hooks, from v5.15, it can be called for bpf sockops
92105
* hook. Therefore, ensure that function is correctly used.
@@ -305,4 +318,24 @@ static inline bool is_managed_by_kmesh(struct bpf_sock_ops *skops)
305318
return (*value == 0);
306319
}
307320

308-
#endif
321+
static inline char *bpf_strncpy(char *dst, int n, const char *src)
322+
{
323+
int isEnd = 0;
324+
if (src == NULL)
325+
return 0;
326+
327+
#pragma unroll
328+
for (int i = 0; i < BPF_DATA_MAX_LEN; i++) {
329+
if (src[i] == '\0')
330+
isEnd = 1;
331+
if (isEnd == 1)
332+
dst[i] = '\0';
333+
else
334+
dst[i] = src[i];
335+
if (i == n - 1)
336+
break;
337+
}
338+
return dst;
339+
}
340+
341+
#endif

bpf/include/map_config.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@
1010
#define tmp_buf km_tmpbuf
1111
#define kmesh_log_events km_log_event
1212
#define map_of_nodeinfo km_nodeinfo
13+
#define map_of_tcp_probe km_tcp_probe
14+
#define map_of_orig_dst km_orig_dst
1315

1416
#endif // _MAP_CONFIG_H_

bpf/kmesh/ads/cgroup_sock.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#include "filter.h"
1212
#include "cluster.h"
1313
#include "bpf_common.h"
14+
#include "probe.h"
15+
#include "config.h"
1416

1517
#if ENHANCED_KERNEL
1618
#include "route_config.h"
@@ -54,7 +56,6 @@ static inline int sock4_traffic_control(struct bpf_sock_addr *ctx)
5456
if (ret != 0) {
5557
BPF_LOG(ERR, KMESH, "listener_manager failed, ret %d\n", ret);
5658
}
57-
5859
return 0;
5960
}
6061

@@ -70,7 +71,9 @@ int cgroup_connect4_prog(struct bpf_sock_addr *ctx)
7071
if (handle_kmesh_manage_process(&kmesh_ctx) || !is_kmesh_enabled(ctx)) {
7172
return CGROUP_SOCK_OK;
7273
}
74+
observe_on_pre_connect(ctx->sk);
7375
int ret = sock4_traffic_control(ctx);
76+
7477
return CGROUP_SOCK_OK;
7578
}
7679

bpf/kmesh/ads/include/cluster.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "cluster/cluster.pb-c.h"
1111
#include "endpoint/endpoint.pb-c.h"
1212
#include "circuit_breaker.h"
13+
#include "probe.h"
1314

1415
#define CLUSTER_NAME_MAX_LEN BPF_DATA_MAX_LEN
1516
#define MAGLEV_TABLE_SIZE 16381
@@ -310,7 +311,7 @@ static inline int cluster_handle_loadbalance(Cluster__Cluster *cluster, address_
310311
BPF_LOG(ERR, CLUSTER, "ep get sock addr failed, %ld\n", (__s64)ep_identity);
311312
return -EAGAIN;
312313
}
313-
314+
observe_on_connect(ctx->sk, name);
314315
BPF_LOG(
315316
INFO,
316317
CLUSTER,

bpf/kmesh/ads/include/kmesh_common.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -51,26 +51,6 @@ static inline int bpf__strncmp(const char *dst, int n, const char *src)
5151
return 0;
5252
};
5353

54-
static inline char *bpf_strncpy(char *dst, int n, const char *src)
55-
{
56-
int isEnd = 0;
57-
if (src == NULL)
58-
return 0;
59-
60-
#pragma unroll
61-
for (int i = 0; i < BPF_DATA_MAX_LEN; i++) {
62-
if (src[i] == '\0')
63-
isEnd = 1;
64-
if (isEnd == 1)
65-
dst[i] = '\0';
66-
else
67-
dst[i] = src[i];
68-
if (i == n - 1)
69-
break;
70-
}
71-
return dst;
72-
}
73-
7454
typedef Core__SocketAddress address_t;
7555

7656
// bpf return value

bpf/kmesh/ads/sockops.c

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "bpf_log.h"
66
#include "ctx/sock_ops.h"
77
#include "circuit_breaker.h"
8+
#include "probe.h"
89

910
#if KMESH_ENABLE_IPV4
1011
#if KMESH_ENABLE_HTTP
@@ -17,7 +18,6 @@ int sockops_prog(struct bpf_sock_ops *skops)
1718

1819
if (skops->family != AF_INET)
1920
return BPF_OK;
20-
2121
switch (skops->op) {
2222
case BPF_SOCK_OPS_TCP_CONNECT_CB:
2323
skops_handle_kmesh_managed_process(skops);
@@ -31,13 +31,24 @@ int sockops_prog(struct bpf_sock_ops *skops)
3131
} else {
3232
on_cluster_sock_connect(skops);
3333
}
34+
observe_on_connect_established(skops->sk, OUTBOUND);
35+
break;
36+
case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
37+
if (!is_managed_by_kmesh(skops))
38+
break;
39+
40+
observe_on_connect_established(skops->sk, INBOUND);
41+
if (bpf_sock_ops_cb_flags_set(skops, BPF_SOCK_OPS_STATE_CB_FLAG) != 0)
42+
BPF_LOG(ERR, SOCKOPS, "set sockops cb failed!\n");
3443
break;
3544
case BPF_SOCK_OPS_STATE_CB:
3645
if (skops->args[1] == BPF_TCP_CLOSE) {
46+
observe_on_close(skops->sk);
3747
on_cluster_sock_close(skops);
3848
}
3949
break;
4050
}
51+
4152
return BPF_OK;
4253
}
4354

bpf/kmesh/bpf2go/bpf2go.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,18 @@
1818
package bpf2go
1919

2020
// go run github.com/cilium/ebpf/cmd/bpf2go --help
21-
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSock ../ads/cgroup_sock.c -- -I../ads/include -I../../include -I../../../api/v2-c -DCGROUP_SOCK_MANAGE -DKERNEL_VERSION_HIGHER_5_13_0=1
21+
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSock ../ads/cgroup_sock.c -- -I../ads/include -I../../include -I../../../api/v2-c -I../probes -DCGROUP_SOCK_MANAGE -DKERNEL_VERSION_HIGHER_5_13_0=1
2222
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSockWorkload ../workload/cgroup_sock.c -- -I../workload/include -I../../include -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=1
23-
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockops ../ads/sockops.c -- -I../ads/include -I../../include -I../../../api/v2-c -DKERNEL_VERSION_HIGHER_5_13_0=1
23+
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockops ../ads/sockops.c -- -I../ads/include -I../../include -I../../../api/v2-c -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=1
2424
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockopsWorkload ../workload/sockops.c -- -I../workload/include -I../../include -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=1
2525
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshXDPAuth ../workload/xdp.c -- -I../workload/include -I../../include -I../../../api/v2-c -DKERNEL_VERSION_HIGHER_5_13_0=1
2626
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSendmsg ../workload/sendmsg.c -- -I../workload/include -I../../include -DKERNEL_VERSION_HIGHER_5_13_0=1
2727
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir general --go-package general -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshTcMarkEncrypt ../general/tc_mark_encrypt.c -- -I../general/include -I../../include -DKERNEL_VERSION_HIGHER_5_13_0=1
2828
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir general --go-package general -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshTcMarkDecrypt ../general/tc_mark_decrypt.c -- -I../general/include -I../../include -DKERNEL_VERSION_HIGHER_5_13_0=1
2929

30-
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSockCompat ../ads/cgroup_sock.c -- -I../ads/include -I../../include -I../../../api/v2-c -DCGROUP_SOCK_MANAGE -DKERNEL_VERSION_HIGHER_5_13_0=0
30+
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSockCompat ../ads/cgroup_sock.c -- -I../ads/include -I../../include -I../../../api/v2-c -I../probes -DCGROUP_SOCK_MANAGE -DKERNEL_VERSION_HIGHER_5_13_0=0
3131
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshCgroupSockWorkloadCompat ../workload/cgroup_sock.c -- -I../workload/include -I../../include -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=0
32-
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockopsCompat ../ads/sockops.c -- -I../ads/include -I../../include -I../../../api/v2-c -DKERNEL_VERSION_HIGHER_5_13_0=0
32+
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir kernelnative/$ENHANCED_KERNEL --go-package $ENHANCED_KERNEL -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockopsCompat ../ads/sockops.c -- -I../ads/include -I../../include -I../../../api/v2-c -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=0
3333
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSockopsWorkloadCompat ../workload/sockops.c -- -I../workload/include -I../../include -I../probes -DKERNEL_VERSION_HIGHER_5_13_0=0
3434
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshXDPAuthCompat ../workload/xdp.c -- -I../workload/include -I../../include -I../../../api/v2-c -DKERNEL_VERSION_HIGHER_5_13_0=0
3535
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go --output-dir dualengine --go-package dualengine -cc clang --cflags $EXTRA_CFLAGS --cflags $EXTRA_CDEFINE KmeshSendmsgCompat ../workload/sendmsg.c -- -I../workload/include -I../../include -DKERNEL_VERSION_HIGHER_5_13_0=0

bpf/kmesh/bpf2go/dualengine/kmeshcgroupsockworkload_bpfeb.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bpf/kmesh/bpf2go/dualengine/kmeshcgroupsockworkload_bpfel.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bpf/kmesh/bpf2go/dualengine/kmeshcgroupsockworkloadcompat_bpfeb.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)