17db7d9f3SSven Eckelmann /* SPDX-License-Identifier: GPL-2.0 */
2*cfa55c6dSSven Eckelmann /* Copyright (C) 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/skbuff.h>
141e2c2a4fSSven Eckelmann #include <linux/types.h>
1568a600deSSven Eckelmann #include <uapi/linux/batadv_packet.h>
161e2c2a4fSSven Eckelmann 
17d353d8d4SMartin Hundebøll #ifdef CONFIG_BATMAN_ADV_NC
18d353d8d4SMartin Hundebøll 
193f4841ffSMarek Lindner void batadv_nc_status_update(struct net_device *net_dev);
206c519badSMatthias Schiffer int batadv_nc_init(void);
216c519badSMatthias Schiffer int batadv_nc_mesh_init(struct batadv_priv *bat_priv);
226c519badSMatthias Schiffer void batadv_nc_mesh_free(struct batadv_priv *bat_priv);
23d56b1705SMartin Hundebøll void batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
24d56b1705SMartin Hundebøll 			      struct batadv_orig_node *orig_node,
25d56b1705SMartin Hundebøll 			      struct batadv_orig_node *orig_neigh_node,
26d56b1705SMartin Hundebøll 			      struct batadv_ogm_packet *ogm_packet,
27d56b1705SMartin Hundebøll 			      int is_single_hop_neigh);
28d56b1705SMartin Hundebøll void batadv_nc_purge_orig(struct batadv_priv *bat_priv,
29d56b1705SMartin Hundebøll 			  struct batadv_orig_node *orig_node,
30d56b1705SMartin Hundebøll 			  bool (*to_purge)(struct batadv_priv *,
31d56b1705SMartin Hundebøll 					   struct batadv_nc_node *));
32d353d8d4SMartin Hundebøll void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv);
33d56b1705SMartin Hundebøll void batadv_nc_init_orig(struct batadv_orig_node *orig_node);
3495332477SMartin Hundebøll bool batadv_nc_skb_forward(struct sk_buff *skb,
35e91ecfc6SMartin Hundebøll 			   struct batadv_neigh_node *neigh_node);
36612d2b4fSMartin Hundebøll void batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv,
37612d2b4fSMartin Hundebøll 				      struct sk_buff *skb);
38612d2b4fSMartin Hundebøll void batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv,
39612d2b4fSMartin Hundebøll 					 struct sk_buff *skb);
40d353d8d4SMartin Hundebøll 
41d353d8d4SMartin Hundebøll #else /* ifdef CONFIG_BATMAN_ADV_NC */
42d353d8d4SMartin Hundebøll 
batadv_nc_status_update(struct net_device * net_dev)433f4841ffSMarek Lindner static inline void batadv_nc_status_update(struct net_device *net_dev)
443f4841ffSMarek Lindner {
453f4841ffSMarek Lindner }
463f4841ffSMarek Lindner 
batadv_nc_init(void)476c519badSMatthias Schiffer static inline int batadv_nc_init(void)
48d353d8d4SMartin Hundebøll {
49d353d8d4SMartin Hundebøll 	return 0;
50d353d8d4SMartin Hundebøll }
51d353d8d4SMartin Hundebøll 
batadv_nc_mesh_init(struct batadv_priv * bat_priv)526c519badSMatthias Schiffer static inline int batadv_nc_mesh_init(struct batadv_priv *bat_priv)
536c519badSMatthias Schiffer {
546c519badSMatthias Schiffer 	return 0;
556c519badSMatthias Schiffer }
566c519badSMatthias Schiffer 
batadv_nc_mesh_free(struct batadv_priv * bat_priv)576c519badSMatthias Schiffer static inline void batadv_nc_mesh_free(struct batadv_priv *bat_priv)
58d353d8d4SMartin Hundebøll {
59d353d8d4SMartin Hundebøll }
60d353d8d4SMartin Hundebøll 
61d56b1705SMartin Hundebøll static inline void
batadv_nc_update_nc_node(struct batadv_priv * bat_priv,struct batadv_orig_node * orig_node,struct batadv_orig_node * orig_neigh_node,struct batadv_ogm_packet * ogm_packet,int is_single_hop_neigh)62d56b1705SMartin Hundebøll batadv_nc_update_nc_node(struct batadv_priv *bat_priv,
63d56b1705SMartin Hundebøll 			 struct batadv_orig_node *orig_node,
64d56b1705SMartin Hundebøll 			 struct batadv_orig_node *orig_neigh_node,
65d56b1705SMartin Hundebøll 			 struct batadv_ogm_packet *ogm_packet,
66d56b1705SMartin Hundebøll 			 int is_single_hop_neigh)
67d56b1705SMartin Hundebøll {
68d56b1705SMartin Hundebøll }
69d56b1705SMartin Hundebøll 
70d56b1705SMartin Hundebøll static inline void
batadv_nc_purge_orig(struct batadv_priv * bat_priv,struct batadv_orig_node * orig_node,bool (* to_purge)(struct batadv_priv *,struct batadv_nc_node *))71d56b1705SMartin Hundebøll batadv_nc_purge_orig(struct batadv_priv *bat_priv,
72d56b1705SMartin Hundebøll 		     struct batadv_orig_node *orig_node,
73d56b1705SMartin Hundebøll 		     bool (*to_purge)(struct batadv_priv *,
74d56b1705SMartin Hundebøll 				      struct batadv_nc_node *))
75d56b1705SMartin Hundebøll {
76d56b1705SMartin Hundebøll }
77d56b1705SMartin Hundebøll 
batadv_nc_init_bat_priv(struct batadv_priv * bat_priv)78d353d8d4SMartin Hundebøll static inline void batadv_nc_init_bat_priv(struct batadv_priv *bat_priv)
79d353d8d4SMartin Hundebøll {
80d353d8d4SMartin Hundebøll }
81d353d8d4SMartin Hundebøll 
batadv_nc_init_orig(struct batadv_orig_node * orig_node)82d56b1705SMartin Hundebøll static inline void batadv_nc_init_orig(struct batadv_orig_node *orig_node)
83d56b1705SMartin Hundebøll {
84d56b1705SMartin Hundebøll }
85d56b1705SMartin Hundebøll 
batadv_nc_skb_forward(struct sk_buff * skb,struct batadv_neigh_node * neigh_node)8695332477SMartin Hundebøll static inline bool batadv_nc_skb_forward(struct sk_buff *skb,
87e91ecfc6SMartin Hundebøll 					 struct batadv_neigh_node *neigh_node)
8895332477SMartin Hundebøll {
8995332477SMartin Hundebøll 	return false;
9095332477SMartin Hundebøll }
9195332477SMartin Hundebøll 
92612d2b4fSMartin Hundebøll static inline void
batadv_nc_skb_store_for_decoding(struct batadv_priv * bat_priv,struct sk_buff * skb)93612d2b4fSMartin Hundebøll batadv_nc_skb_store_for_decoding(struct batadv_priv *bat_priv,
94612d2b4fSMartin Hundebøll 				 struct sk_buff *skb)
95612d2b4fSMartin Hundebøll {
96612d2b4fSMartin Hundebøll }
97612d2b4fSMartin Hundebøll 
98612d2b4fSMartin Hundebøll static inline void
batadv_nc_skb_store_sniffed_unicast(struct batadv_priv * bat_priv,struct sk_buff * skb)99612d2b4fSMartin Hundebøll batadv_nc_skb_store_sniffed_unicast(struct batadv_priv *bat_priv,
100612d2b4fSMartin Hundebøll 				    struct sk_buff *skb)
101612d2b4fSMartin Hundebøll {
102612d2b4fSMartin Hundebøll }
103612d2b4fSMartin Hundebøll 
104d353d8d4SMartin Hundebøll #endif /* ifdef CONFIG_BATMAN_ADV_NC */
105d353d8d4SMartin Hundebøll 
106d353d8d4SMartin Hundebøll #endif /* _NET_BATMAN_ADV_NETWORK_CODING_H_ */
107