root/tools/testing/selftests/bpf/test_queue_stack_map.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. SEC

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 // Copyright (c) 2018 Politecnico di Torino
   3 #include <stddef.h>
   4 #include <string.h>
   5 #include <linux/bpf.h>
   6 #include <linux/if_ether.h>
   7 #include <linux/ip.h>
   8 #include <linux/pkt_cls.h>
   9 #include "bpf_helpers.h"
  10 
  11 int _version SEC("version") = 1;
  12 
  13 struct {
  14         __uint(type, MAP_TYPE);
  15         __uint(max_entries, 32);
  16         __uint(map_flags, 0);
  17         __uint(key_size, 0);
  18         __uint(value_size, sizeof(__u32));
  19 } map_in SEC(".maps");
  20 
  21 struct {
  22         __uint(type, MAP_TYPE);
  23         __uint(max_entries, 32);
  24         __uint(map_flags, 0);
  25         __uint(key_size, 0);
  26         __uint(value_size, sizeof(__u32));
  27 } map_out SEC(".maps");
  28 
  29 SEC("test")
  30 int _test(struct __sk_buff *skb)
  31 {
  32         void *data_end = (void *)(long)skb->data_end;
  33         void *data = (void *)(long)skb->data;
  34         struct ethhdr *eth = (struct ethhdr *)(data);
  35         __u32 value;
  36         int err;
  37 
  38         if (eth + 1 > data_end)
  39                 return TC_ACT_SHOT;
  40 
  41         struct iphdr *iph = (struct iphdr *)(eth + 1);
  42 
  43         if (iph + 1 > data_end)
  44                 return TC_ACT_SHOT;
  45 
  46         err = bpf_map_pop_elem(&map_in, &value);
  47         if (err)
  48                 return TC_ACT_SHOT;
  49 
  50         iph->daddr = value;
  51 
  52         err = bpf_map_push_elem(&map_out, &iph->saddr, 0);
  53         if (err)
  54                 return TC_ACT_SHOT;
  55 
  56         return TC_ACT_OK;
  57 }
  58 
  59 char _license[] SEC("license") = "GPL";

/* [<][>][^][v][top][bottom][index][help] */