Skip to content

Commit bebaf18

Browse files
authored
Merge pull request #1273 from lec-bit/new_kernel
adapt bpf2go files in new kernel
2 parents e84e265 + 4b98e44 commit bebaf18

File tree

16 files changed

+1000
-130
lines changed

16 files changed

+1000
-130
lines changed

Makefile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,7 @@ ifeq ($(TAG),)
8282
$(error "TAG cannot be empty")
8383
endif
8484

85-
TMP_FILES := bpf/kmesh/bpf2go/bpf2go.go \
86-
config/kmesh_marcos_def.h \
85+
TMP_FILES := config/kmesh_marcos_def.h \
8786
mk/api-v2-c.pc \
8887
mk/bpf.pc \
8988
bpf/include/bpf_helper_defs_ext.h \

bpf/include/bpf_common.h

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,86 @@ static inline void *get_ptr_val_from_map(void *map, __u8 map_type, const void *p
223223
val_tmp; \
224224
})
225225

226+
static inline void record_kmesh_managed_ip(__u32 family, __u32 ip4, __u32 *ip6)
227+
{
228+
int err;
229+
__u32 value = 0;
230+
struct manager_key key = {0};
231+
if (family == AF_INET)
232+
key.addr.ip4 = ip4;
233+
if (family == AF_INET6 && ip6)
234+
IP6_COPY(key.addr.ip6, ip6);
235+
236+
err = bpf_map_update_elem(&map_of_manager, &key, &value, BPF_ANY);
237+
if (err)
238+
BPF_LOG(ERR, KMESH, "record ip failed, err is %d\n", err);
239+
}
240+
241+
static inline void remove_kmesh_managed_ip(__u32 family, __u32 ip4, __u32 *ip6)
242+
{
243+
struct manager_key key = {0};
244+
if (family == AF_INET)
245+
key.addr.ip4 = ip4;
246+
if (family == AF_INET6 && ip6)
247+
IP6_COPY(key.addr.ip6, ip6);
248+
249+
int err = bpf_map_delete_elem(&map_of_manager, &key);
250+
if (err && err != -ENOENT)
251+
BPF_LOG(ERR, KMESH, "remove ip failed, err is %d\n", err);
252+
}
253+
254+
static inline bool conn_from_sim(struct bpf_sock_ops *skops, __u32 ip, __u16 port)
255+
{
256+
__u16 remote_port = GET_SKOPS_REMOTE_PORT(skops);
257+
if (bpf_ntohs(remote_port) != port)
258+
return false;
259+
260+
if (skops->family == AF_INET)
261+
return (bpf_ntohl(skops->remote_ip4) == ip);
262+
263+
return (
264+
skops->remote_ip6[0] == 0 && skops->remote_ip6[1] == 0 && skops->remote_ip6[2] == 0
265+
&& bpf_ntohl(skops->remote_ip6[3]) == ip);
266+
}
267+
268+
static inline bool skops_conn_from_cni_sim_add(struct bpf_sock_ops *skops)
269+
{
270+
// cni sim connect CONTROL_CMD_IP:929(0x3a1)
271+
// 0x3a1 is the specific port handled by the cni to enable Kmesh
272+
return conn_from_sim(skops, CONTROL_CMD_IP, ENABLE_KMESH_PORT);
273+
}
274+
275+
static inline bool skops_conn_from_cni_sim_delete(struct bpf_sock_ops *skops)
276+
{
277+
// cni sim connect CONTROL_CMD_IP:930(0x3a2)
278+
// 0x3a2 is the specific port handled by the cni to disable Kmesh
279+
return conn_from_sim(skops, CONTROL_CMD_IP, DISABLE_KMESH_PORT);
280+
}
281+
282+
static inline void skops_handle_kmesh_managed_process(struct bpf_sock_ops *skops)
283+
{
284+
if (skops_conn_from_cni_sim_add(skops))
285+
record_kmesh_managed_ip(skops->family, skops->local_ip4, skops->local_ip6);
286+
if (skops_conn_from_cni_sim_delete(skops))
287+
remove_kmesh_managed_ip(skops->family, skops->local_ip4, skops->local_ip6);
288+
}
289+
290+
static inline bool is_managed_by_kmesh(struct bpf_sock_ops *skops)
291+
{
292+
struct manager_key key = {0};
293+
if (skops->family == AF_INET)
294+
key.addr.ip4 = skops->local_ip4;
295+
if (skops->family == AF_INET6) {
296+
if (is_ipv4_mapped_addr(skops->local_ip6))
297+
key.addr.ip4 = skops->local_ip6[3];
298+
else
299+
IP6_COPY(key.addr.ip6, skops->local_ip6);
300+
}
301+
302+
int *value = bpf_map_lookup_elem(&map_of_manager, &key);
303+
if (!value)
304+
return false;
305+
return (*value == 0);
306+
}
307+
226308
#endif

bpf/kmesh/ads/sockops.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ int sockops_prog(struct bpf_sock_ops *skops)
1919
return BPF_OK;
2020

2121
switch (skops->op) {
22+
case BPF_SOCK_OPS_TCP_CONNECT_CB:
23+
skops_handle_kmesh_managed_process(skops);
24+
break;
2225
case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
26+
if (!is_managed_by_kmesh(skops))
27+
break;
28+
2329
if (bpf_sock_ops_cb_flags_set(skops, BPF_SOCK_OPS_STATE_CB_FLAG) != 0) {
2430
BPF_LOG(ERR, SOCKOPS, "set sockops cb failed!\n");
2531
} else {

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/normal --go-package normal -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 -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 --go-package enhanced -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 -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/normal --go-package normal -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 -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 --go-package enhanced -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 -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/kernelnative/normal/kmeshsockops_bpfeb.go

Lines changed: 189 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)