hc
2024-10-22 8ac6c7a54ed1b98d142dce24b11c6de6a1e239a5
kernel/net/batman-adv/originator.h
....@@ -1,19 +1,7 @@
11 /* SPDX-License-Identifier: GPL-2.0 */
2
-/* Copyright (C) 2007-2018 B.A.T.M.A.N. contributors:
2
+/* Copyright (C) 2007-2020 B.A.T.M.A.N. contributors:
33 *
44 * Marek Lindner, Simon Wunderlich
5
- *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of version 2 of the GNU General Public
8
- * License as published by the Free Software Foundation.
9
- *
10
- * This program is distributed in the hope that it will be useful, but
11
- * WITHOUT ANY WARRANTY; without even the implied warranty of
12
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
- * General Public License for more details.
14
- *
15
- * You should have received a copy of the GNU General Public License
16
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
175 */
186
197 #ifndef _NET_BATMAN_ADV_ORIGINATOR_H_
....@@ -24,29 +12,28 @@
2412 #include <linux/compiler.h>
2513 #include <linux/if_ether.h>
2614 #include <linux/jhash.h>
15
+#include <linux/kref.h>
16
+#include <linux/netlink.h>
17
+#include <linux/seq_file.h>
18
+#include <linux/skbuff.h>
2719 #include <linux/types.h>
28
-
29
-struct netlink_callback;
30
-struct seq_file;
31
-struct sk_buff;
3220
3321 bool batadv_compare_orig(const struct hlist_node *node, const void *data2);
3422 int batadv_originator_init(struct batadv_priv *bat_priv);
3523 void batadv_originator_free(struct batadv_priv *bat_priv);
3624 void batadv_purge_orig_ref(struct batadv_priv *bat_priv);
37
-void batadv_orig_node_put(struct batadv_orig_node *orig_node);
25
+void batadv_orig_node_release(struct kref *ref);
3826 struct batadv_orig_node *batadv_orig_node_new(struct batadv_priv *bat_priv,
3927 const u8 *addr);
4028 struct batadv_hardif_neigh_node *
4129 batadv_hardif_neigh_get(const struct batadv_hard_iface *hard_iface,
4230 const u8 *neigh_addr);
43
-void
44
-batadv_hardif_neigh_put(struct batadv_hardif_neigh_node *hardif_neigh);
31
+void batadv_hardif_neigh_release(struct kref *ref);
4532 struct batadv_neigh_node *
4633 batadv_neigh_node_get_or_create(struct batadv_orig_node *orig_node,
4734 struct batadv_hard_iface *hard_iface,
4835 const u8 *neigh_addr);
49
-void batadv_neigh_node_put(struct batadv_neigh_node *neigh_node);
36
+void batadv_neigh_node_release(struct kref *ref);
5037 struct batadv_neigh_node *
5138 batadv_orig_router_get(struct batadv_orig_node *orig_node,
5239 const struct batadv_hard_iface *if_outgoing);
....@@ -56,7 +43,7 @@
5643 struct batadv_neigh_ifinfo *
5744 batadv_neigh_ifinfo_get(struct batadv_neigh_node *neigh,
5845 struct batadv_hard_iface *if_outgoing);
59
-void batadv_neigh_ifinfo_put(struct batadv_neigh_ifinfo *neigh_ifinfo);
46
+void batadv_neigh_ifinfo_release(struct kref *ref);
6047
6148 int batadv_hardif_neigh_dump(struct sk_buff *msg, struct netlink_callback *cb);
6249 int batadv_hardif_neigh_seq_print_text(struct seq_file *seq, void *offset);
....@@ -67,22 +54,18 @@
6754 struct batadv_orig_ifinfo *
6855 batadv_orig_ifinfo_new(struct batadv_orig_node *orig_node,
6956 struct batadv_hard_iface *if_outgoing);
70
-void batadv_orig_ifinfo_put(struct batadv_orig_ifinfo *orig_ifinfo);
57
+void batadv_orig_ifinfo_release(struct kref *ref);
7158
7259 int batadv_orig_seq_print_text(struct seq_file *seq, void *offset);
7360 int batadv_orig_dump(struct sk_buff *msg, struct netlink_callback *cb);
7461 int batadv_orig_hardif_seq_print_text(struct seq_file *seq, void *offset);
75
-int batadv_orig_hash_add_if(struct batadv_hard_iface *hard_iface,
76
- unsigned int max_if_num);
77
-int batadv_orig_hash_del_if(struct batadv_hard_iface *hard_iface,
78
- unsigned int max_if_num);
7962 struct batadv_orig_node_vlan *
8063 batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node,
8164 unsigned short vid);
8265 struct batadv_orig_node_vlan *
8366 batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node,
8467 unsigned short vid);
85
-void batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan);
68
+void batadv_orig_node_vlan_release(struct kref *ref);
8669
8770 /**
8871 * batadv_choose_orig() - Return the index of the orig entry in the hash table
....@@ -103,4 +86,86 @@
10386 struct batadv_orig_node *
10487 batadv_orig_hash_find(struct batadv_priv *bat_priv, const void *data);
10588
89
+/**
90
+ * batadv_orig_node_vlan_put() - decrement the refcounter and possibly release
91
+ * the originator-vlan object
92
+ * @orig_vlan: the originator-vlan object to release
93
+ */
94
+static inline void
95
+batadv_orig_node_vlan_put(struct batadv_orig_node_vlan *orig_vlan)
96
+{
97
+ if (!orig_vlan)
98
+ return;
99
+
100
+ kref_put(&orig_vlan->refcount, batadv_orig_node_vlan_release);
101
+}
102
+
103
+/**
104
+ * batadv_neigh_ifinfo_put() - decrement the refcounter and possibly release
105
+ * the neigh_ifinfo
106
+ * @neigh_ifinfo: the neigh_ifinfo object to release
107
+ */
108
+static inline void
109
+batadv_neigh_ifinfo_put(struct batadv_neigh_ifinfo *neigh_ifinfo)
110
+{
111
+ if (!neigh_ifinfo)
112
+ return;
113
+
114
+ kref_put(&neigh_ifinfo->refcount, batadv_neigh_ifinfo_release);
115
+}
116
+
117
+/**
118
+ * batadv_hardif_neigh_put() - decrement the hardif neighbors refcounter
119
+ * and possibly release it
120
+ * @hardif_neigh: hardif neigh neighbor to free
121
+ */
122
+static inline void
123
+batadv_hardif_neigh_put(struct batadv_hardif_neigh_node *hardif_neigh)
124
+{
125
+ if (!hardif_neigh)
126
+ return;
127
+
128
+ kref_put(&hardif_neigh->refcount, batadv_hardif_neigh_release);
129
+}
130
+
131
+/**
132
+ * batadv_neigh_node_put() - decrement the neighbors refcounter and possibly
133
+ * release it
134
+ * @neigh_node: neigh neighbor to free
135
+ */
136
+static inline void batadv_neigh_node_put(struct batadv_neigh_node *neigh_node)
137
+{
138
+ if (!neigh_node)
139
+ return;
140
+
141
+ kref_put(&neigh_node->refcount, batadv_neigh_node_release);
142
+}
143
+
144
+/**
145
+ * batadv_orig_ifinfo_put() - decrement the refcounter and possibly release
146
+ * the orig_ifinfo
147
+ * @orig_ifinfo: the orig_ifinfo object to release
148
+ */
149
+static inline void
150
+batadv_orig_ifinfo_put(struct batadv_orig_ifinfo *orig_ifinfo)
151
+{
152
+ if (!orig_ifinfo)
153
+ return;
154
+
155
+ kref_put(&orig_ifinfo->refcount, batadv_orig_ifinfo_release);
156
+}
157
+
158
+/**
159
+ * batadv_orig_node_put() - decrement the orig node refcounter and possibly
160
+ * release it
161
+ * @orig_node: the orig node to free
162
+ */
163
+static inline void batadv_orig_node_put(struct batadv_orig_node *orig_node)
164
+{
165
+ if (!orig_node)
166
+ return;
167
+
168
+ kref_put(&orig_node->refcount, batadv_orig_node_release);
169
+}
170
+
106171 #endif /* _NET_BATMAN_ADV_ORIGINATOR_H_ */