18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors: 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Marek Lindner, Simon Wunderlich, Antonio Quartulli 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ 88c2ecf20Sopenharmony_ci#define _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include "main.h" 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/kref.h> 138c2ecf20Sopenharmony_ci#include <linux/netdevice.h> 148c2ecf20Sopenharmony_ci#include <linux/netlink.h> 158c2ecf20Sopenharmony_ci#include <linux/seq_file.h> 168c2ecf20Sopenharmony_ci#include <linux/skbuff.h> 178c2ecf20Sopenharmony_ci#include <linux/types.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ciint batadv_tt_init(struct batadv_priv *bat_priv); 208c2ecf20Sopenharmony_cibool batadv_tt_local_add(struct net_device *soft_iface, const u8 *addr, 218c2ecf20Sopenharmony_ci unsigned short vid, int ifindex, u32 mark); 228c2ecf20Sopenharmony_ciu16 batadv_tt_local_remove(struct batadv_priv *bat_priv, 238c2ecf20Sopenharmony_ci const u8 *addr, unsigned short vid, 248c2ecf20Sopenharmony_ci const char *message, bool roaming); 258c2ecf20Sopenharmony_ciint batadv_tt_local_seq_print_text(struct seq_file *seq, void *offset); 268c2ecf20Sopenharmony_ciint batadv_tt_global_seq_print_text(struct seq_file *seq, void *offset); 278c2ecf20Sopenharmony_ciint batadv_tt_local_dump(struct sk_buff *msg, struct netlink_callback *cb); 288c2ecf20Sopenharmony_ciint batadv_tt_global_dump(struct sk_buff *msg, struct netlink_callback *cb); 298c2ecf20Sopenharmony_civoid batadv_tt_global_del_orig(struct batadv_priv *bat_priv, 308c2ecf20Sopenharmony_ci struct batadv_orig_node *orig_node, 318c2ecf20Sopenharmony_ci s32 match_vid, const char *message); 328c2ecf20Sopenharmony_cistruct batadv_tt_global_entry * 338c2ecf20Sopenharmony_cibatadv_tt_global_hash_find(struct batadv_priv *bat_priv, const u8 *addr, 348c2ecf20Sopenharmony_ci unsigned short vid); 358c2ecf20Sopenharmony_civoid batadv_tt_global_entry_release(struct kref *ref); 368c2ecf20Sopenharmony_ciint batadv_tt_global_hash_count(struct batadv_priv *bat_priv, 378c2ecf20Sopenharmony_ci const u8 *addr, unsigned short vid); 388c2ecf20Sopenharmony_cistruct batadv_orig_node *batadv_transtable_search(struct batadv_priv *bat_priv, 398c2ecf20Sopenharmony_ci const u8 *src, const u8 *addr, 408c2ecf20Sopenharmony_ci unsigned short vid); 418c2ecf20Sopenharmony_civoid batadv_tt_free(struct batadv_priv *bat_priv); 428c2ecf20Sopenharmony_cibool batadv_is_my_client(struct batadv_priv *bat_priv, const u8 *addr, 438c2ecf20Sopenharmony_ci unsigned short vid); 448c2ecf20Sopenharmony_cibool batadv_is_ap_isolated(struct batadv_priv *bat_priv, u8 *src, u8 *dst, 458c2ecf20Sopenharmony_ci unsigned short vid); 468c2ecf20Sopenharmony_civoid batadv_tt_local_commit_changes(struct batadv_priv *bat_priv); 478c2ecf20Sopenharmony_cibool batadv_tt_global_client_is_roaming(struct batadv_priv *bat_priv, 488c2ecf20Sopenharmony_ci u8 *addr, unsigned short vid); 498c2ecf20Sopenharmony_cibool batadv_tt_local_client_is_roaming(struct batadv_priv *bat_priv, 508c2ecf20Sopenharmony_ci u8 *addr, unsigned short vid); 518c2ecf20Sopenharmony_civoid batadv_tt_local_resize_to_mtu(struct net_device *soft_iface); 528c2ecf20Sopenharmony_cibool batadv_tt_add_temporary_global_entry(struct batadv_priv *bat_priv, 538c2ecf20Sopenharmony_ci struct batadv_orig_node *orig_node, 548c2ecf20Sopenharmony_ci const unsigned char *addr, 558c2ecf20Sopenharmony_ci unsigned short vid); 568c2ecf20Sopenharmony_cibool batadv_tt_global_is_isolated(struct batadv_priv *bat_priv, 578c2ecf20Sopenharmony_ci const u8 *addr, unsigned short vid); 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciint batadv_tt_cache_init(void); 608c2ecf20Sopenharmony_civoid batadv_tt_cache_destroy(void); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci/** 638c2ecf20Sopenharmony_ci * batadv_tt_global_entry_put() - decrement the tt_global_entry refcounter and 648c2ecf20Sopenharmony_ci * possibly release it 658c2ecf20Sopenharmony_ci * @tt_global_entry: tt_global_entry to be free'd 668c2ecf20Sopenharmony_ci */ 678c2ecf20Sopenharmony_cistatic inline void 688c2ecf20Sopenharmony_cibatadv_tt_global_entry_put(struct batadv_tt_global_entry *tt_global_entry) 698c2ecf20Sopenharmony_ci{ 708c2ecf20Sopenharmony_ci if (!tt_global_entry) 718c2ecf20Sopenharmony_ci return; 728c2ecf20Sopenharmony_ci 738c2ecf20Sopenharmony_ci kref_put(&tt_global_entry->common.refcount, 748c2ecf20Sopenharmony_ci batadv_tt_global_entry_release); 758c2ecf20Sopenharmony_ci} 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci#endif /* _NET_BATMAN_ADV_TRANSLATION_TABLE_H_ */ 78