免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1958 | 回复: 0
打印 上一主题 下一主题

[其他] ubuntu 14.04 eat crab eBPF (for mark) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-06-15 22:47 |只看该作者 |倒序浏览
1. update kernel -> 4.10.8

2. make samples/bpf

3. ulimit -l 1024

4. try:
./tracex2 or ./sock_example

5. see jit result code:
sysctl net/core/bpf_jit_enable=2
dmesg ---> sock_example.txt


static int test_sock(void)
{
        int sock = -1, map_fd, prog_fd, i, key;
        long long value = 0, tcp_cnt, udp_cnt, icmp_cnt;

        map_fd = bpf_create_map(BPF_MAP_TYPE_ARRAY, sizeof(key), sizeof(value),
                                256, 0);
        if (map_fd < 0) {
                printf("failed to create map '%s'\n", strerror(errno));
                goto cleanup;
        }

        struct bpf_insn prog[] = {
                BPF_MOV64_REG(BPF_REG_6, BPF_REG_1),
                BPF_LD_ABS(BPF_B, ETH_HLEN + offsetof(struct iphdr, protocol) /* R0 = ip->proto */),
                BPF_STX_MEM(BPF_W, BPF_REG_10, BPF_REG_0, -4), /* *(u32 *)(fp - 4) = r0 */
                BPF_MOV64_REG(BPF_REG_2, BPF_REG_10),
                BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* r2 = fp - 4 */
                BPF_LD_MAP_FD(BPF_REG_1, map_fd),
                BPF_RAW_INSN(BPF_JMP | BPF_CALL, 0, 0, 0, BPF_FUNC_map_lookup_elem),
                BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 2),
                BPF_MOV64_IMM(BPF_REG_1, 1), /* r1 = 1 */
                BPF_RAW_INSN(BPF_STX | BPF_XADD | BPF_DW, BPF_REG_0, BPF_REG_1, 0, 0), /* xadd r0 += r1 */
                BPF_MOV64_IMM(BPF_REG_0, 0), /* r0 = 0 */
                BPF_EXIT_INSN(),
        };
        size_t insns_cnt = sizeof(prog) / sizeof(struct bpf_insn);

        prog_fd = bpf_load_program(BPF_PROG_TYPE_SOCKET_FILTER, prog, insns_cnt,
                                   "GPL", 0, bpf_log_buf, BPF_LOG_BUF_SIZE);



make tools/net
tools/net# ./bpf_jit_disasm sock_example.txt
163 bytes emitted from JIT compiler (pass:4, flen:13)
ffffffffc01fa69a + <x>:
   0:    push   %rbp
   1:    mov    %rsp,%rbp
   4:    sub    $0x228,%rsp
   b:    mov    %rbx,-0x228(%rbp)
  12:    mov    %r13,-0x220(%rbp)
  19:    mov    %r14,-0x218(%rbp)
  20:    mov    %r15,-0x210(%rbp)
  27:    xor    %eax,%eax
  29:    mov    %rax,-0x208(%rbp)
  30:    mov    0x80(%rdi),%r9d
  37:    sub    0x84(%rdi),%r9d
  3e:    mov    0xd8(%rdi),%r10
  45:    mov    %rdi,%rbx
  48:    mov    $0x17,%esi
  4d:    callq  0xffffffffc3085283
  52:    mov    %eax,-0x4(%rbp)
  55:    mov    %rbp,%rsi
  58:    add    $0xfffffffffffffffc,%rsi
  5c:    movabs $0xffff8f38c9c1c000,%rdi
  66:    push   %r10
  68:    push   %r9
  6a:    callq  0xffffffffc31941e6
  6f:    pop    %r9
  71:    pop    %r10
  73:    cmp    $0x0,%rax
  77:    je     0x0000000000000083
  79:    mov    $0x1,%edi
  7e:    lock add %rdi,0x0(%rax)
  83:    xor    %eax,%eax
  85:    mov    -0x228(%rbp),%rbx
  8c:    mov    -0x220(%rbp),%r13
  93:    mov    -0x218(%rbp),%r14
  9a:    mov    -0x210(%rbp),%r15
  a1:    leaveq
  a2:    retq   


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP