probe的处理

在eBPF程序中有一种神秘的程序类型, 这种程序类型名字叫做, BPF_PROG_TEST_RUN, 下面就让我们一起来看一下关于这种类型的处理。

//首先设置一个对应的字符串
pb->probe = strdup(pspec->string.data);	
pb->provider = provider_get(pb->probe);
//然后根据之前的字符串找到对应的probe provider
err = pb->provider->probe(pb);

然后就是根据对应的probe类型去创建对应的probe,第一步就是load, 我们看一下吧:

/*
对于prog_type: BPF_PROG_TYPE_RAW_TRACEPOINT
对应指令, 这个好像没有啥好说的
*/
pb->bpf_fd = bpf_prog_load(prog_type, insns, n_insns, vlog, vlog_sz);

然后就是对应的attach这个功能了:

err = bpf_prog_test_run(pb->bpf_fd);
if (err)
	goto err;

/* read buffer for BEGIN trigger */
if (ply->stdbuf) {
	//然后使用, 我们之前介绍的bpf loop
	ret = buffer_loop((struct buffer *)ply->stdbuf->priv, 0);
	if (ret.exit || ret.err)
		return ret;
}

这就是我们大致的流程了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值