peerlookup.h (1794B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 4 */ 5 6#ifndef _WG_PEERLOOKUP_H 7#define _WG_PEERLOOKUP_H 8 9#include "messages.h" 10 11#include <linux/hashtable.h> 12#include <linux/mutex.h> 13#include <linux/siphash.h> 14 15struct wg_peer; 16 17struct pubkey_hashtable { 18 /* TODO: move to rhashtable */ 19 DECLARE_HASHTABLE(hashtable, 11); 20 siphash_key_t key; 21 struct mutex lock; 22}; 23 24struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void); 25void wg_pubkey_hashtable_add(struct pubkey_hashtable *table, 26 struct wg_peer *peer); 27void wg_pubkey_hashtable_remove(struct pubkey_hashtable *table, 28 struct wg_peer *peer); 29struct wg_peer * 30wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table, 31 const u8 pubkey[NOISE_PUBLIC_KEY_LEN]); 32 33struct index_hashtable { 34 /* TODO: move to rhashtable */ 35 DECLARE_HASHTABLE(hashtable, 13); 36 spinlock_t lock; 37}; 38 39enum index_hashtable_type { 40 INDEX_HASHTABLE_HANDSHAKE = 1U << 0, 41 INDEX_HASHTABLE_KEYPAIR = 1U << 1 42}; 43 44struct index_hashtable_entry { 45 struct wg_peer *peer; 46 struct hlist_node index_hash; 47 enum index_hashtable_type type; 48 __le32 index; 49}; 50 51struct index_hashtable *wg_index_hashtable_alloc(void); 52__le32 wg_index_hashtable_insert(struct index_hashtable *table, 53 struct index_hashtable_entry *entry); 54bool wg_index_hashtable_replace(struct index_hashtable *table, 55 struct index_hashtable_entry *old, 56 struct index_hashtable_entry *new); 57void wg_index_hashtable_remove(struct index_hashtable *table, 58 struct index_hashtable_entry *entry); 59struct index_hashtable_entry * 60wg_index_hashtable_lookup(struct index_hashtable *table, 61 const enum index_hashtable_type type_mask, 62 const __le32 index, struct wg_peer **peer); 63 64#endif /* _WG_PEERLOOKUP_H */