1e5e7a8f2SAlexei Starovoitov // SPDX-License-Identifier: GPL-2.0 2e5e7a8f2SAlexei Starovoitov // Copyright (c) 2019 Facebook 3e5e7a8f2SAlexei Starovoitov #include <linux/bpf.h> 43e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h> 5e5e7a8f2SAlexei Starovoitov #define ATTR __attribute__((noinline)) 6e5e7a8f2SAlexei Starovoitov #include "test_jhash.h" 7e5e7a8f2SAlexei Starovoitov 8*cf060c2cSAndrii Nakryiko SEC("tc") balancer_ingress(struct __sk_buff * ctx)9e5e7a8f2SAlexei Starovoitovint balancer_ingress(struct __sk_buff *ctx) 10e5e7a8f2SAlexei Starovoitov { 11e5e7a8f2SAlexei Starovoitov void *data_end = (void *)(long)ctx->data_end; 12e5e7a8f2SAlexei Starovoitov void *data = (void *)(long)ctx->data; 13e5e7a8f2SAlexei Starovoitov void *ptr; 14e5e7a8f2SAlexei Starovoitov int nh_off, i = 0; 15e5e7a8f2SAlexei Starovoitov 16e5e7a8f2SAlexei Starovoitov nh_off = 14; 17e5e7a8f2SAlexei Starovoitov 18e5e7a8f2SAlexei Starovoitov /* pragma unroll doesn't work on large loops */ 19e5e7a8f2SAlexei Starovoitov 20e5e7a8f2SAlexei Starovoitov #define C do { \ 21e5e7a8f2SAlexei Starovoitov ptr = data + i; \ 22e5e7a8f2SAlexei Starovoitov if (ptr + nh_off > data_end) \ 23e5e7a8f2SAlexei Starovoitov break; \ 24e5e7a8f2SAlexei Starovoitov ctx->tc_index = jhash(ptr, nh_off, ctx->cb[0] + i++); \ 25e5e7a8f2SAlexei Starovoitov } while (0); 26e5e7a8f2SAlexei Starovoitov #define C30 C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C; 27e5e7a8f2SAlexei Starovoitov C30;C30;C30; /* 90 calls */ 28e5e7a8f2SAlexei Starovoitov return 0; 29e5e7a8f2SAlexei Starovoitov } 30e5e7a8f2SAlexei Starovoitov char _license[] SEC("license") = "GPL"; 31