github.com/cilium/cilium@v1.16.2/bpf/tests/lib/ipcache.h (about)

     1  /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
     2  /* Copyright Authors of Cilium */
     3  
     4  static __always_inline void
     5  __ipcache_v4_add_entry(__be32 addr, __u8 cluster_id, __u32 sec_identity,
     6  		       __u32 tunnel_ep, __u8 spi, bool flag_skip_tunnel, __u32 mask_size)
     7  {
     8  	struct ipcache_key key = {
     9  		.lpm_key.prefixlen = IPCACHE_PREFIX_LEN(mask_size),
    10  		.cluster_id = cluster_id,
    11  		.family = ENDPOINT_KEY_IPV4,
    12  		.ip4 = addr,
    13  	};
    14  	struct remote_endpoint_info value = {};
    15  
    16  	value.sec_identity = sec_identity;
    17  	value.tunnel_endpoint = tunnel_ep;
    18  	value.key = spi;
    19  	value.flag_skip_tunnel = flag_skip_tunnel;
    20  
    21  	map_update_elem(&IPCACHE_MAP, &key, &value, BPF_ANY);
    22  }
    23  
    24  static __always_inline void
    25  ipcache_v4_add_entry(__be32 addr, __u8 cluster_id, __u32 sec_identity,
    26  		     __u32 tunnel_ep, __u8 spi)
    27  {
    28  	__ipcache_v4_add_entry(addr, cluster_id, sec_identity, tunnel_ep, spi, false,
    29  			       V4_CACHE_KEY_LEN);
    30  }
    31  
    32  static __always_inline void
    33  ipcache_v4_add_entry_with_flags(__be32 addr, __u8 cluster_id, __u32 sec_identity,
    34  				__u32 tunnel_ep, __u8 spi, bool flag_skip_tunnel)
    35  {
    36  	__ipcache_v4_add_entry(addr, cluster_id, sec_identity, tunnel_ep, spi, flag_skip_tunnel,
    37  			       V4_CACHE_KEY_LEN);
    38  }
    39  
    40  static __always_inline void
    41  ipcache_v4_add_entry_with_mask_size(__be32 addr, __u8 cluster_id, __u32 sec_identity,
    42  				    __u32 tunnel_ep, __u8 spi, __u32 mask_size)
    43  {
    44  	__ipcache_v4_add_entry(addr, cluster_id, sec_identity, tunnel_ep, spi, false, mask_size);
    45  }
    46  
    47  static __always_inline void
    48  __ipcache_v6_add_entry(const union v6addr *addr, __u8 cluster_id, __u32 sec_identity,
    49  		       __u32 tunnel_ep, __u8 spi, bool flag_skip_tunnel)
    50  {
    51  	struct ipcache_key key = {
    52  		.lpm_key.prefixlen = IPCACHE_PREFIX_LEN(V6_CACHE_KEY_LEN),
    53  		.cluster_id = cluster_id,
    54  		.family = ENDPOINT_KEY_IPV6,
    55  	};
    56  	struct remote_endpoint_info value = {};
    57  
    58  	value.sec_identity = sec_identity;
    59  	value.tunnel_endpoint = tunnel_ep;
    60  	value.key = spi;
    61  	value.flag_skip_tunnel = flag_skip_tunnel;
    62  
    63  	memcpy(&key.ip6, addr, sizeof(*addr));
    64  
    65  	map_update_elem(&IPCACHE_MAP, &key, &value, BPF_ANY);
    66  }
    67  
    68  static __always_inline void
    69  ipcache_v6_add_entry(const union v6addr *addr, __u8 cluster_id, __u32 sec_identity,
    70  		     __u32 tunnel_ep, __u8 spi)
    71  {
    72  	__ipcache_v6_add_entry(addr, cluster_id, sec_identity, tunnel_ep, spi, false);
    73  }
    74  
    75  static __always_inline void
    76  ipcache_v6_add_entry_with_flags(const union v6addr *addr, __u8 cluster_id, __u32 sec_identity,
    77  				__u32 tunnel_ep, __u8 spi, bool flag_skip_tunnel)
    78  {
    79  	__ipcache_v6_add_entry(addr, cluster_id, sec_identity, tunnel_ep, spi, flag_skip_tunnel);
    80  }