Skip to content

Commit 743d680

Browse files
author
lec-bit
committed
adapt 6.6
Signed-off-by: lec-bit <glfhzmy@126.com>
1 parent 44b2525 commit 743d680

24 files changed

+1240
-117
lines changed

bpf/include/common.h

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#define _COMMON_H_
66

77
#include "../../config/kmesh_marcos_def.h"
8+
#include <linux/in.h>
89
#include <stddef.h>
910
#include <stdbool.h>
1011
#include <stdint.h>
@@ -16,8 +17,60 @@
1617

1718
#include "errno.h"
1819

20+
struct bpf_mem_ptr {
21+
void *ptr;
22+
__u32 size;
23+
};
24+
1925
#if ENHANCED_KERNEL
26+
#if KERNEL_KFUNC
27+
extern int bpf_parse_header_msg_func(void *src, int src__sz) __ksym;
28+
extern int bpf_km_header_strnstr_func(void *ctx, int ctx__sz, const char *key, int key__sz, const char *subptr) __ksym;
29+
extern int bpf_km_header_strncmp_func(const char *key, int key__sz, const char *target, int target__sz, int opt) __ksym;
30+
extern int bpf_setsockopt_func(void *bpf_mem, int bpf_mem__sz, int optname, const char *optval, int optval__sz) __ksym;
31+
extern int bpf_getsockopt_func(void *bpf_mem, int bpf_mem__sz, int optname, char *optval, int optval__sz) __ksym;
32+
33+
#define bpf_km_header_strncmp bpf_km_header_strncmp_func
34+
35+
int bpf_km_header_strnstr(void *ctx, const char *key, int key__sz, const char *subptr, int subptr__sz)
36+
{
37+
struct bpf_mem_ptr msg_tmp = {.ptr = ctx, .size = sizeof(struct bpf_sock_addr)};
38+
return bpf_km_header_strnstr_func(&msg_tmp, sizeof(struct bpf_mem_ptr), key, key__sz, subptr);
39+
}
40+
41+
int bpf_parse_header_msg(struct bpf_sock_addr *ctx)
42+
{
43+
struct bpf_mem_ptr msg_tmp = {.ptr = ctx, .size = sizeof(struct bpf_sock_addr)};
44+
return bpf_parse_header_msg_func(&msg_tmp, sizeof(struct bpf_mem_ptr));
45+
}
46+
47+
// Due to the limitation of bpf verifier, optval and optval__sz are required to correspond.
48+
// The strnlen function cannot be used here, so the string is redefined.
49+
int bpf_km_setsockopt(struct bpf_sock_addr *ctx, int level, int optname, const char *optval, int optval__sz)
50+
{
51+
const char kmesh_module_name[] = "kmesh_defer";
52+
if (level != IPPROTO_TCP || optval__sz != sizeof(kmesh_module_name))
53+
return -1;
54+
55+
struct bpf_mem_ptr msg_tmp = {.ptr = ctx, .size = sizeof(struct bpf_sock_addr)};
56+
return bpf_setsockopt_func(
57+
&msg_tmp, sizeof(struct bpf_mem_ptr), optname, (void *)kmesh_module_name, sizeof(kmesh_module_name));
58+
}
59+
60+
int bpf_km_getsockopt(struct bpf_sock_addr *ctx, int level, int optname, char *optval, int optval__sz)
61+
{
62+
if (level != IPPROTO_TCP) {
63+
return -1;
64+
}
65+
struct bpf_mem_ptr msg_tmp = {.ptr = ctx, .size = sizeof(struct bpf_sock_addr)};
66+
return bpf_getsockopt_func(&msg_tmp, sizeof(struct bpf_mem_ptr), optname, (void *)optval, optval__sz);
67+
}
68+
69+
#else
2070
#include <bpf_helper_defs_ext.h>
71+
#define bpf_km_setsockopt bpf_setsockopt
72+
#define bpf_km_getsockopt bpf_getsockopt
73+
#endif
2174
#endif
2275

2376
#define bpf_unused __attribute__((__unused__))
@@ -113,14 +166,8 @@ static inline bool is_ipv4_mapped_addr(__u32 ip6[4])
113166
(dst)[3] = (src)[3]; \
114167
} while (0)
115168

116-
#if OE_23_03
117-
#define bpf__strncmp bpf_strncmp
118-
#define GET_SKOPS_REMOTE_PORT(sk_ops) (__u16)((sk_ops)->remote_port)
119-
#else
120169
#define GET_SKOPS_REMOTE_PORT(sk_ops) (__u16)((sk_ops)->remote_port >> 16)
121-
#endif
122-
123-
#define GET_SKOPS_LOCAL_PORT(sk_ops) (__u16)((sk_ops)->local_port)
170+
#define GET_SKOPS_LOCAL_PORT(sk_ops) (__u16)((sk_ops)->local_port)
124171

125172
#define MAX_BUF_LEN 100
126173
#define MAX_IP4_LEN 16

bpf/kmesh/ads/cgroup_sock.c

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,10 @@
1919
#if KMESH_ENABLE_HTTP
2020

2121
static const char kmesh_module_name[] = "kmesh_defer";
22-
static char kmesh_module_name_get[KMESH_MODULE_NAME_LEN] = "";
2322
static inline int sock4_traffic_control(struct bpf_sock_addr *ctx)
2423
{
2524
int ret;
26-
25+
char kmesh_module_name_get[KMESH_MODULE_NAME_LEN] = "";
2726
Listener__Listener *listener = NULL;
2827

2928
if (ctx->protocol != IPPROTO_TCP)
@@ -42,9 +41,9 @@ static inline int sock4_traffic_control(struct bpf_sock_addr *ctx)
4241
BPF_LOG(DEBUG, KMESH, "bpf find listener addr=[%s:%u]\n", ip2str(&ip, 1), bpf_ntohs(ctx->user_port));
4342

4443
#if ENHANCED_KERNEL
45-
ret = bpf_getsockopt(ctx, IPPROTO_TCP, TCP_ULP, (void *)kmesh_module_name_get, KMESH_MODULE_NAME_LEN);
44+
ret = bpf_km_getsockopt(ctx, IPPROTO_TCP, TCP_ULP, kmesh_module_name_get, KMESH_MODULE_NAME_LEN);
4645
if (CHECK_MODULE_NAME_NULL(ret) || bpf__strncmp(kmesh_module_name_get, KMESH_MODULE_NAME_LEN, kmesh_module_name)) {
47-
ret = bpf_setsockopt(ctx, IPPROTO_TCP, TCP_ULP, (void *)kmesh_module_name, sizeof(kmesh_module_name));
46+
ret = bpf_km_setsockopt(ctx, IPPROTO_TCP, TCP_ULP, kmesh_module_name, sizeof(kmesh_module_name));
4847
if (ret)
4948
BPF_LOG(ERR, KMESH, "bpf set sockopt failed! ret %d\n", ret);
5049
return 0;

bpf/kmesh/ads/include/ctx/sock_ops.h

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,6 @@ typedef struct bpf_sock_ops ctx_buff_t;
2222
name.ipv4 = (ctx)->remote_ip4; \
2323
name.port = (ctx)->remote_port
2424

25-
#if OE_23_03
26-
#define SET_CTX_ADDRESS(ctx, address) \
27-
(ctx)->remote_ip4 = (address)->ipv4; \
28-
(ctx)->remote_port = (address)->port
29-
30-
#define MARK_REJECTED(ctx) \
31-
BPF_LOG(DEBUG, KMESH, "mark reject\n"); \
32-
(ctx)->remote_ip4 = 0; \
33-
(ctx)->remote_port = 0
34-
#else
3525
#define SET_CTX_ADDRESS(ctx, address) \
3626
(ctx)->replylong[2] = (address)->ipv4; \
3727
(ctx)->replylong[3] = (address)->port
@@ -40,6 +30,5 @@ typedef struct bpf_sock_ops ctx_buff_t;
4030
BPF_LOG(DEBUG, KMESH, "mark reject\n"); \
4131
(ctx)->replylong[2] = 0; \
4232
(ctx)->replylong[3] = 0
43-
#endif
4433

4534
#endif //__BPF_CTX_SOCK_OPS_H

bpf/kmesh/ads/include/kmesh_common.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,6 @@
3131
val; \
3232
})
3333

34-
struct bpf_mem_ptr {
35-
void *ptr;
36-
__u32 size;
37-
};
38-
3934
static inline int bpf__strncmp(const char *dst, int n, const char *src)
4035
{
4136
if (dst == NULL || src == NULL)

bpf/kmesh/bpf2go/kernelnative/enhanced/kmeshcgroupsock_bpfeb.go

Lines changed: 225 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)