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 }