17db7d9f3SSven Eckelmann /* SPDX-License-Identifier: GPL-2.0 */
27a79d717SSven Eckelmann /* Copyright (C) 2012-2019  B.A.T.M.A.N. contributors:
3d353d8d4SMartin Hundebøll  *
4d353d8d4SMartin Hundebøll  * Martin Hundebøll, Jeppe Ledet-Pedersen
5d353d8d4SMartin Hundebøll  */
6d353d8d4SMartin Hundebøll 
7d353d8d4SMartin Hundebøll #ifndef _NET_BATMAN_ADV_NETWORK_CODING_H_
8d353d8d4SMartin Hundebøll #define _NET_BATMAN_ADV_NETWORK_CODING_H_
9d353d8d4SMartin Hundebøll 
101e2c2a4fSSven Eckelmann #include "main.h"
111e2c2a4fSSven Eckelmann 
1268a600deSSven Eckelmann #include <linux/netdevice.h>
1368a600deSSven Eckelmann #include <linux/seq_file.h>
1468a600deSSven Eckelmann #include <linux/skbuff.h>
151e2c2a4fSSven Eckelmann #include <linux/types.h>
1668a600deSSven Eckelmann #include <uapi/linux/batadv_packet.h>
171e2c2a4fSSven Eckelmann 
18d353d8d4SMartin Hundebøll #ifdef CONFIG_BATMAN_ADV_NC
19d353d8d4SMartin Hundebøll 
203f4841ffSMarek Lindner void batadv_nc_status_update(struct net_device *net_dev);
216c519badSMatthias Schiffer int batadv_nc_init(void);
226c519badSMatthias Schiffer int batadv_nc_mesh_init(struct batadv_priv *bat_priv);
236c519badSMatthias Schiffer void batadv_nc_mesh_free(struct batadv_priv *bat_priv);
24d56b1705SMartin Hundebøll void batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
25d56b1705SMartin Hundebøll 			      struct batadv_orig_node *orig_node,
26d56b1705SMartin Hundebøll 			      struct batadv_orig_node *orig_neigh_node,
27d56b1705SMartin Hundebøll 			      struct batadv_ogm_packet *ogm_packet,
28d56b1705SMartin Hundebøll 			      int is_single_hop_neigh);
29d56b1705SMartin Hundebøll void batadv_nc_purge_orig(struct batadv_priv *bat_priv,
30d56b1705SMartin Hundebøll 			  struct batadv_orig_node *orig_node,
31d56b1705SMartin Hundebøll 			  bool (*to_purge)(struct batadv_priv *,
32d56b1705SMartin Hundebøll 					   struct batadv_nc_node *));
33d353d8d4SMartin Hundebøll void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv);
34d56b1705SMartin Hundebøll void batadv_nc_init_orig(struct batadv_orig_node *orig_node);
3595332477SMartin Hundebøll bool batadv_nc_skb_forward(struct sk_buff *skb,
36e91ecfc6SMartin Hundebøll 			   struct batadv_neigh_node *neigh_node);
37612d2b4fSMartin Hundebøll void batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv,
38612d2b4fSMartin Hundebøll 				      struct sk_buff *skb);
39612d2b4fSMartin Hundebøll void batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv,
40612d2b4fSMartin Hundebøll 					 struct sk_buff *skb);
41d56b1705SMartin Hundebøll int batadv_nc_nodes_seq_print_text(struct seq_file *seq, void *offset);
42d56b1705SMartin Hundebøll int batadv_nc_init_debugfs(struct batadv_priv *bat_priv);
43d353d8d4SMartin Hundebøll 
44d353d8d4SMartin Hundebøll #else /* ifdef CONFIG_BATMAN_ADV_NC */
45d353d8d4SMartin Hundebøll 
463f4841ffSMarek Lindner static inline void batadv_nc_status_update(struct net_device *net_dev)
473f4841ffSMarek Lindner {
483f4841ffSMarek Lindner }
493f4841ffSMarek Lindner 
506c519badSMatthias Schiffer static inline int batadv_nc_init(void)
51d353d8d4SMartin Hundebøll {
52d353d8d4SMartin Hundebøll 	return 0;
53d353d8d4SMartin Hundebøll }
54d353d8d4SMartin Hundebøll 
556c519badSMatthias Schiffer static inline int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
566c519badSMatthias Schiffer {
576c519badSMatthias Schiffer 	return 0;
586c519badSMatthias Schiffer }
596c519badSMatthias Schiffer 
606c519badSMatthias Schiffer static inline void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
61d353d8d4SMartin Hundebøll {
62d353d8d4SMartin Hundebøll }
63d353d8d4SMartin Hundebøll 
64d56b1705SMartin Hundebøll static inline void
65d56b1705SMartin Hundebøll batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
66d56b1705SMartin Hundebøll 			 struct batadv_orig_node *orig_node,
67d56b1705SMartin Hundebøll 			 struct batadv_orig_node *orig_neigh_node,
68d56b1705SMartin Hundebøll 			 struct batadv_ogm_packet *ogm_packet,
69d56b1705SMartin Hundebøll 			 int is_single_hop_neigh)
70d56b1705SMartin Hundebøll {
71d56b1705SMartin Hundebøll }
72d56b1705SMartin Hundebøll 
73d56b1705SMartin Hundebøll static inline void
74d56b1705SMartin Hundebøll batadv_nc_purge_orig(struct batadv_priv *bat_priv,
75d56b1705SMartin Hundebøll 		     struct batadv_orig_node *orig_node,
76d56b1705SMartin Hundebøll 		     bool (*to_purge)(struct batadv_priv *,
77d56b1705SMartin Hundebøll 				      struct batadv_nc_node *))
78d56b1705SMartin Hundebøll {
79d56b1705SMartin Hundebøll }
80d56b1705SMartin Hundebøll 
81d353d8d4SMartin Hundebøll static inline void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv)
82d353d8d4SMartin Hundebøll {
83d353d8d4SMartin Hundebøll }
84d353d8d4SMartin Hundebøll 
85d56b1705SMartin Hundebøll static inline void batadv_nc_init_orig(struct batadv_orig_node *orig_node)
86d56b1705SMartin Hundebøll {
87d56b1705SMartin Hundebøll }
88d56b1705SMartin Hundebøll 
8995332477SMartin Hundebøll static inline bool batadv_nc_skb_forward(struct sk_buff *skb,
90e91ecfc6SMartin Hundebøll 					 struct batadv_neigh_node *neigh_node)
9195332477SMartin Hundebøll {
9295332477SMartin Hundebøll 	return false;
9395332477SMartin Hundebøll }
9495332477SMartin Hundebøll 
95612d2b4fSMartin Hundebøll static inline void
96612d2b4fSMartin Hundebøll batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv,
97612d2b4fSMartin Hundebøll 				 struct sk_buff *skb)
98612d2b4fSMartin Hundebøll {
99612d2b4fSMartin Hundebøll }
100612d2b4fSMartin Hundebøll 
101612d2b4fSMartin Hundebøll static inline void
102612d2b4fSMartin Hundebøll batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv,
103612d2b4fSMartin Hundebøll 				    struct sk_buff *skb)
104612d2b4fSMartin Hundebøll {
105612d2b4fSMartin Hundebøll }
106612d2b4fSMartin Hundebøll 
107d56b1705SMartin Hundebøll static inline int batadv_nc_nodes_seq_print_text(struct seq_file *seq,
108d56b1705SMartin Hundebøll 						 void *offset)
109d56b1705SMartin Hundebøll {
110d56b1705SMartin Hundebøll 	return 0;
111d56b1705SMartin Hundebøll }
112d56b1705SMartin Hundebøll 
113d56b1705SMartin Hundebøll static inline int batadv_nc_init_debugfs(struct batadv_priv *bat_priv)
114d56b1705SMartin Hundebøll {
115d56b1705SMartin Hundebøll 	return 0;
116d56b1705SMartin Hundebøll }
117d56b1705SMartin Hundebøll 
118d353d8d4SMartin Hundebøll #endif /* ifdef CONFIG_BATMAN_ADV_NC */
119d353d8d4SMartin Hundebøll 
120d353d8d4SMartin Hundebøll #endif /* _NET_BATMAN_ADV_NETWORK_CODING_H_ */
121