github.com/datadog/cilium@v1.6.12/bpf/lib/signal.h (about)

     1  /*
     2   *  Copyright (C) 2019 Authors of Cilium
     3   *
     4   *  This program is free software; you can redistribute it and/or modify
     5   *  it under the terms of the GNU General Public License as published by
     6   *  the Free Software Foundation; either version 2 of the License, or
     7   *  (at your option) any later version.
     8   *
     9   *  This program is distributed in the hope that it will be useful,
    10   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    11   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12   *  GNU General Public License for more details.
    13   *
    14   *  You should have received a copy of the GNU General Public License
    15   *  along with this program; if not, write to the Free Software
    16   *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    17   */
    18  #ifndef __LIB_SIGNAL_H_
    19  #define __LIB_SIGNAL_H_
    20  
    21  #include <bpf/api.h>
    22  
    23  struct bpf_elf_map __section_maps SIGNAL_MAP = {
    24  	.type		= BPF_MAP_TYPE_PERF_EVENT_ARRAY,
    25  	.size_key	= sizeof(__u32),
    26  	.size_value	= sizeof(__u32),
    27  	.pinning	= PIN_GLOBAL_NS,
    28  	.max_elem	= __NR_CPUS__,
    29  };
    30  
    31  enum {
    32  	SIGNAL_NAT_FILL_UP = 0,
    33  };
    34  
    35  enum {
    36  	SIGNAL_NAT_PROTO_V4 = 0,
    37  	SIGNAL_NAT_PROTO_V6,
    38  };
    39  
    40  struct signal_msg {
    41  	__u32 signal_nr;
    42  	union {
    43  		struct {
    44  			__u32 proto;
    45  		};
    46  	};
    47  };
    48  
    49  static inline void send_signal(struct __sk_buff *skb, struct signal_msg *msg)
    50  {
    51  	skb_event_output(skb, &SIGNAL_MAP, BPF_F_CURRENT_CPU,
    52  			 msg, sizeof(*msg));
    53  }
    54  
    55  static inline void send_signal_nat_fill_up(struct __sk_buff *skb, __u32 proto)
    56  {
    57  	struct signal_msg msg = {
    58  		.signal_nr	= SIGNAL_NAT_FILL_UP,
    59  		.proto		= proto,
    60  	};
    61  
    62  	send_signal(skb, &msg);
    63  }
    64  
    65  #endif /* __LIB_SIGNAL_H_ */