Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion bpf/include/bpf_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
192 /* this value should be \
small that make compile success */

#define RINGBUF_SIZE (1 << 12)
#define MAP_SIZE_OF_DSTINFO 8192

struct manager_key {
union {
__u64 netns_cookie;
Expand All @@ -46,6 +49,8 @@ struct sock_storage_data {
__u64 connect_ns;
__u8 direction;
__u8 connect_success;
__u32 pid_tgid;
char dst_svc_name[BPF_DATA_MAX_LEN];
};

struct {
Expand Down Expand Up @@ -87,6 +92,14 @@ struct {
__uint(map_flags, BPF_F_NO_PREALLOC);
} kmesh_map1600 SEC(".maps");

struct {
__uint(type, BPF_MAP_TYPE_HASH);
__type(key, __u64);
__type(value, struct bpf_sock_tuple);
__uint(max_entries, MAP_SIZE_OF_DSTINFO);
__uint(map_flags, BPF_F_NO_PREALLOC);
} map_of_orig_dst SEC(".maps");

/*
* From v5.4, bpf_get_netns_cookie can be called for bpf cgroup hooks, from v5.15, it can be called for bpf sockops
* hook. Therefore, ensure that function is correctly used.
Expand Down Expand Up @@ -305,4 +318,24 @@ static inline bool is_managed_by_kmesh(struct bpf_sock_ops *skops)
return (*value == 0);
}

#endif
static inline char *bpf_strncpy(char *dst, int n, const char *src)
{
int isEnd = 0;
if (src == NULL)
return 0;

#pragma unroll
for (int i = 0; i < BPF_DATA_MAX_LEN; i++) {
if (src[i] == '\0')
isEnd = 1;
if (isEnd == 1)
dst[i] = '\0';
else
dst[i] = src[i];
if (i == n - 1)
break;
}
return dst;
}

#endif
2 changes: 2 additions & 0 deletions bpf/include/map_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@
#define tmp_buf km_tmpbuf
#define kmesh_log_events km_log_event
#define map_of_nodeinfo km_nodeinfo
#define map_of_tcp_probe km_tcp_probe
#define map_of_orig_dst km_orig_dst

#endif // _MAP_CONFIG_H_
5 changes: 4 additions & 1 deletion bpf/kmesh/ads/cgroup_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
#include "filter.h"
#include "cluster.h"
#include "bpf_common.h"
#include "probe.h"
#include "config.h"

#if ENHANCED_KERNEL
#include "route_config.h"
Expand Down Expand Up @@ -54,7 +56,6 @@ static inline int sock4_traffic_control(struct bpf_sock_addr *ctx)
if (ret != 0) {
BPF_LOG(ERR, KMESH, "listener_manager failed, ret %d\n", ret);
}

return 0;
}

Expand All @@ -70,7 +71,9 @@ int cgroup_connect4_prog(struct bpf_sock_addr *ctx)
if (handle_kmesh_manage_process(&kmesh_ctx) || !is_kmesh_enabled(ctx)) {
return CGROUP_SOCK_OK;
}
observe_on_pre_connect(ctx->sk);
int ret = sock4_traffic_control(ctx);

return CGROUP_SOCK_OK;
}

Expand Down
3 changes: 2 additions & 1 deletion bpf/kmesh/ads/include/cluster.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#include "cluster/cluster.pb-c.h"
#include "endpoint/endpoint.pb-c.h"
#include "circuit_breaker.h"
#include "probe.h"

#define CLUSTER_NAME_MAX_LEN BPF_DATA_MAX_LEN
#define MAGLEV_TABLE_SIZE 16381
Expand Down Expand Up @@ -310,7 +311,7 @@ static inline int cluster_handle_loadbalance(Cluster__Cluster *cluster, address_
BPF_LOG(ERR, CLUSTER, "ep get sock addr failed, %ld\n", (__s64)ep_identity);
return -EAGAIN;
}

observe_on_connect(ctx->sk, name);
BPF_LOG(
INFO,
CLUSTER,
Expand Down
20 changes: 0 additions & 20 deletions bpf/kmesh/ads/include/kmesh_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,26 +51,6 @@ static inline int bpf__strncmp(const char *dst, int n, const char *src)
return 0;
};

static inline char *bpf_strncpy(char *dst, int n, const char *src)
{
int isEnd = 0;
if (src == NULL)
return 0;

#pragma unroll
for (int i = 0; i < BPF_DATA_MAX_LEN; i++) {
if (src[i] == '\0')
isEnd = 1;
if (isEnd == 1)
dst[i] = '\0';
else
dst[i] = src[i];
if (i == n - 1)
break;
}
return dst;
}

typedef Core__SocketAddress address_t;

// bpf return value
Expand Down
13 changes: 12 additions & 1 deletion bpf/kmesh/ads/sockops.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "bpf_log.h"
#include "ctx/sock_ops.h"
#include "circuit_breaker.h"
#include "probe.h"

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

if (skops->family != AF_INET)
return BPF_OK;

switch (skops->op) {
case BPF_SOCK_OPS_TCP_CONNECT_CB:
skops_handle_kmesh_managed_process(skops);
Expand All @@ -31,13 +31,24 @@ int sockops_prog(struct bpf_sock_ops *skops)
} else {
on_cluster_sock_connect(skops);
}
observe_on_connect_established(skops->sk, OUTBOUND);
break;
case BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB:
if (!is_managed_by_kmesh(skops))
break;

observe_on_connect_established(skops->sk, INBOUND);
if (bpf_sock_ops_cb_flags_set(skops, BPF_SOCK_OPS_STATE_CB_FLAG) != 0)
BPF_LOG(ERR, SOCKOPS, "set sockops cb failed!\n");
break;
case BPF_SOCK_OPS_STATE_CB:
if (skops->args[1] == BPF_TCP_CLOSE) {
observe_on_close(skops->sk);
on_cluster_sock_close(skops);
}
break;
}

return BPF_OK;
}

Expand Down
8 changes: 4 additions & 4 deletions bpf/kmesh/bpf2go/bpf2go.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,18 @@
package bpf2go

// go run github.com/cilium/ebpf/cmd/bpf2go --help
//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
//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
//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
//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
//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
//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
//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
//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
//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
//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

//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
//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
//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
//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
//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
//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
//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
//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
Expand Down
4 changes: 3 additions & 1 deletion bpf/kmesh/bpf2go/dualengine/kmeshcgroupsockworkload_bpfeb.go

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

4 changes: 3 additions & 1 deletion bpf/kmesh/bpf2go/dualengine/kmeshcgroupsockworkload_bpfel.go

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

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

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

44 changes: 38 additions & 6 deletions bpf/kmesh/bpf2go/dualengine/kmeshsendmsg_bpfeb.go

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

44 changes: 38 additions & 6 deletions bpf/kmesh/bpf2go/dualengine/kmeshsendmsg_bpfel.go

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

Loading
Loading