linux/tools/testing/selftests/bpf/sockmap_parse_prog.c
<<
>>
Prefs
   1#include <linux/bpf.h>
   2#include "bpf_helpers.h"
   3#include "bpf_util.h"
   4#include "bpf_endian.h"
   5
   6int _version SEC("version") = 1;
   7
   8#define bpf_printk(fmt, ...)                                    \
   9({                                                              \
  10               char ____fmt[] = fmt;                            \
  11               bpf_trace_printk(____fmt, sizeof(____fmt),       \
  12                                ##__VA_ARGS__);                 \
  13})
  14
  15SEC("sk_skb1")
  16int bpf_prog1(struct __sk_buff *skb)
  17{
  18        void *data_end = (void *)(long) skb->data_end;
  19        void *data = (void *)(long) skb->data;
  20        __u32 lport = skb->local_port;
  21        __u32 rport = skb->remote_port;
  22        __u8 *d = data;
  23
  24        if (data + 10 > data_end)
  25                return skb->len;
  26
  27        /* This write/read is a bit pointless but tests the verifier and
  28         * strparser handler for read/write pkt data and access into sk
  29         * fields.
  30         */
  31        d[7] = 1;
  32
  33        bpf_printk("parse: data[0] = (%u): local_port %i remote %i\n",
  34                   d[0], lport, bpf_ntohl(rport));
  35        return skb->len;
  36}
  37
  38char _license[] SEC("license") = "GPL";
  39