Skip to content
This repository was archived by the owner on Jul 26, 2024. It is now read-only.

Commit

Permalink
fix: send toa option after syncack.
Browse files Browse the repository at this point in the history
  • Loading branch information
Daniel Ding committed May 14, 2024
1 parent 3a5ab5f commit db53f62
Showing 1 changed file with 22 additions and 26 deletions.
48 changes: 22 additions & 26 deletions bpf/tcp_set_toa_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,61 +26,57 @@ struct {

SEC("sockops")
int set_toa_tcp_bs(struct bpf_sock_ops *skops) {
int rv = 7;
int rv = -1;
int option_len = 0;
int op = (int) skops->op;
struct bpf_sock *sk = skops->sk;
struct tcp_toa_option opt;
struct tcp_toa_option *data = NULL;

if (!sk)
return 1;

struct tcp_toa_option *data = NULL;
goto RET;

data = bpf_sk_storage_get(&toa_conn_store, sk, NULL, 0);
if (!data)
return 1;
goto RET;

switch (op) {
case BPF_SOCK_OPS_TCP_CONNECT_CB:
case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
bpf_sock_ops_cb_flags_set(skops,
skops->bpf_sock_ops_cb_flags |
BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG);
break;

case BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB:
bpf_sock_ops_cb_flags_set(skops,
skops->bpf_sock_ops_cb_flags &
~BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG);
break;

case BPF_SOCK_OPS_HDR_OPT_LEN_CB: {
int option_len = TCP_TOA_OPTLEN_IPV4;
case BPF_SOCK_OPS_HDR_OPT_LEN_CB:
rv = 0;
option_len = TCP_TOA_OPTLEN_IPV4;

if (skops->args[1] + option_len <= 40) {
rv = option_len;
} else {
rv = 0;
}

bpf_reserve_hdr_opt(skops, rv, 0);
break;
}
case BPF_SOCK_OPS_WRITE_HDR_OPT_CB: {
struct tcp_toa_option opt = {
.kind = data->kind,
.len = TCP_TOA_OPTLEN_IPV4,
.port = data->port,
.addr = data->addr,
};

int ret = bpf_store_hdr_opt(skops, &opt, sizeof(opt), 0);
case BPF_SOCK_OPS_WRITE_HDR_OPT_CB:
opt.kind = data->kind;
opt.len = TCP_TOA_OPTLEN_IPV4;
opt.port = data->port;
opt.addr = data->addr;

bpf_printk("set_toa_tcp_bs port=%d\n", opt.port);
bpf_store_hdr_opt(skops, &opt, sizeof(opt), 0);

bpf_sock_ops_cb_flags_set(skops,
skops->bpf_sock_ops_cb_flags &
~BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG);
break;
}

default:
rv = -1;
}

RET:
skops->reply = rv;

return 1;
Expand Down

0 comments on commit db53f62

Please sign in to comment.