]>
Commit | Line | Data |
---|---|---|
7db7d9f3 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
68e039f9 | 2 | /* Copyright (C) 2011-2020 B.A.T.M.A.N. contributors: |
785ea114 AQ |
3 | * |
4 | * Antonio Quartulli | |
785ea114 AQ |
5 | */ |
6 | ||
a48bcacd AQ |
7 | #ifndef _NET_BATMAN_ADV_DISTRIBUTED_ARP_TABLE_H_ |
8 | #define _NET_BATMAN_ADV_DISTRIBUTED_ARP_TABLE_H_ | |
785ea114 | 9 | |
1e2c2a4f SE |
10 | #include "main.h" |
11 | ||
12 | #include <linux/compiler.h> | |
13 | #include <linux/netdevice.h> | |
68a600de SE |
14 | #include <linux/netlink.h> |
15 | #include <linux/seq_file.h> | |
16 | #include <linux/skbuff.h> | |
1e2c2a4f | 17 | #include <linux/types.h> |
fec149f5 | 18 | #include <uapi/linux/batadv_packet.h> |
17224474 | 19 | |
785ea114 AQ |
20 | #include "originator.h" |
21 | ||
1e2c2a4f | 22 | #ifdef CONFIG_BATMAN_ADV_DAT |
5c3a0e55 | 23 | |
ba97abb8 | 24 | /* BATADV_DAT_ADDR_MAX - maximum address value in the DHT space */ |
785ea114 AQ |
25 | #define BATADV_DAT_ADDR_MAX ((batadv_dat_addr_t)~(batadv_dat_addr_t)0) |
26 | ||
17cf0ea4 | 27 | void batadv_dat_status_update(struct net_device *net_dev); |
c384ea3e AQ |
28 | bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, |
29 | struct sk_buff *skb); | |
30 | bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, | |
31 | struct sk_buff *skb, int hdr_size); | |
32 | void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, | |
33 | struct sk_buff *skb); | |
34 | bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, | |
35 | struct sk_buff *skb, int hdr_size); | |
b61ec31c LL |
36 | void batadv_dat_snoop_outgoing_dhcp_ack(struct batadv_priv *bat_priv, |
37 | struct sk_buff *skb, | |
38 | __be16 proto, | |
39 | unsigned short vid); | |
40 | void batadv_dat_snoop_incoming_dhcp_ack(struct batadv_priv *bat_priv, | |
41 | struct sk_buff *skb, int hdr_size); | |
c384ea3e AQ |
42 | bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, |
43 | struct batadv_forw_packet *forw_packet); | |
44 | ||
785ea114 | 45 | /** |
7e9a8c2c | 46 | * batadv_dat_init_orig_node_addr() - assign a DAT address to the orig_node |
785ea114 AQ |
47 | * @orig_node: the node to assign the DAT address to |
48 | */ | |
49 | static inline void | |
50 | batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node) | |
51 | { | |
6b5e971a | 52 | u32 addr; |
785ea114 AQ |
53 | |
54 | addr = batadv_choose_orig(orig_node->orig, BATADV_DAT_ADDR_MAX); | |
55 | orig_node->dat_addr = (batadv_dat_addr_t)addr; | |
56 | } | |
57 | ||
58 | /** | |
7e9a8c2c | 59 | * batadv_dat_init_own_addr() - assign a DAT address to the node itself |
785ea114 AQ |
60 | * @bat_priv: the bat priv with all the soft interface information |
61 | * @primary_if: a pointer to the primary interface | |
62 | */ | |
63 | static inline void | |
64 | batadv_dat_init_own_addr(struct batadv_priv *bat_priv, | |
65 | struct batadv_hard_iface *primary_if) | |
66 | { | |
6b5e971a | 67 | u32 addr; |
785ea114 AQ |
68 | |
69 | addr = batadv_choose_orig(primary_if->net_dev->dev_addr, | |
70 | BATADV_DAT_ADDR_MAX); | |
71 | ||
72 | bat_priv->dat.addr = (batadv_dat_addr_t)addr; | |
73 | } | |
74 | ||
2f1dfbe1 AQ |
75 | int batadv_dat_init(struct batadv_priv *bat_priv); |
76 | void batadv_dat_free(struct batadv_priv *bat_priv); | |
77 | int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset); | |
41aeefcc | 78 | int batadv_dat_cache_dump(struct sk_buff *msg, struct netlink_callback *cb); |
2f1dfbe1 | 79 | |
4046b24a | 80 | /** |
7e9a8c2c | 81 | * batadv_dat_inc_counter() - increment the correct DAT packet counter |
4046b24a MH |
82 | * @bat_priv: the bat priv with all the soft interface information |
83 | * @subtype: the 4addr subtype of the packet to be counted | |
84 | * | |
85 | * Updates the ethtool statistics for the received packet if it is a DAT subtype | |
86 | */ | |
87 | static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv, | |
6b5e971a | 88 | u8 subtype) |
4046b24a MH |
89 | { |
90 | switch (subtype) { | |
91 | case BATADV_P_DAT_DHT_GET: | |
92 | batadv_inc_counter(bat_priv, | |
93 | BATADV_CNT_DAT_GET_RX); | |
94 | break; | |
95 | case BATADV_P_DAT_DHT_PUT: | |
96 | batadv_inc_counter(bat_priv, | |
97 | BATADV_CNT_DAT_PUT_RX); | |
98 | break; | |
99 | } | |
100 | } | |
101 | ||
17224474 AQ |
102 | #else |
103 | ||
17cf0ea4 ML |
104 | static inline void batadv_dat_status_update(struct net_device *net_dev) |
105 | { | |
106 | } | |
107 | ||
17224474 AQ |
108 | static inline bool |
109 | batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv, | |
110 | struct sk_buff *skb) | |
111 | { | |
112 | return false; | |
113 | } | |
114 | ||
115 | static inline bool | |
116 | batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv, | |
117 | struct sk_buff *skb, int hdr_size) | |
118 | { | |
119 | return false; | |
120 | } | |
121 | ||
122 | static inline bool | |
123 | batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv, | |
124 | struct sk_buff *skb) | |
125 | { | |
126 | return false; | |
127 | } | |
128 | ||
129 | static inline bool | |
130 | batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv, | |
131 | struct sk_buff *skb, int hdr_size) | |
132 | { | |
133 | return false; | |
134 | } | |
135 | ||
b61ec31c LL |
136 | static inline void |
137 | batadv_dat_snoop_outgoing_dhcp_ack(struct batadv_priv *bat_priv, | |
138 | struct sk_buff *skb, __be16 proto, | |
139 | unsigned short vid) | |
140 | { | |
141 | } | |
142 | ||
143 | static inline void | |
144 | batadv_dat_snoop_incoming_dhcp_ack(struct batadv_priv *bat_priv, | |
145 | struct sk_buff *skb, int hdr_size) | |
146 | { | |
147 | } | |
148 | ||
17224474 AQ |
149 | static inline bool |
150 | batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv, | |
151 | struct batadv_forw_packet *forw_packet) | |
152 | { | |
153 | return false; | |
154 | } | |
155 | ||
156 | static inline void | |
157 | batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node) | |
158 | { | |
159 | } | |
160 | ||
161 | static inline void batadv_dat_init_own_addr(struct batadv_priv *bat_priv, | |
162 | struct batadv_hard_iface *iface) | |
163 | { | |
164 | } | |
165 | ||
17224474 AQ |
166 | static inline int batadv_dat_init(struct batadv_priv *bat_priv) |
167 | { | |
168 | return 0; | |
169 | } | |
170 | ||
171 | static inline void batadv_dat_free(struct batadv_priv *bat_priv) | |
172 | { | |
173 | } | |
174 | ||
41aeefcc LL |
175 | static inline int |
176 | batadv_dat_cache_dump(struct sk_buff *msg, struct netlink_callback *cb) | |
177 | { | |
178 | return -EOPNOTSUPP; | |
179 | } | |
180 | ||
4046b24a | 181 | static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv, |
6b5e971a | 182 | u8 subtype) |
4046b24a MH |
183 | { |
184 | } | |
185 | ||
17224474 AQ |
186 | #endif /* CONFIG_BATMAN_ADV_DAT */ |
187 | ||
a48bcacd | 188 | #endif /* _NET_BATMAN_ADV_DISTRIBUTED_ARP_TABLE_H_ */ |