1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#ifndef _NET_BATMAN_ADV_SEND_H_
20#define _NET_BATMAN_ADV_SEND_H_
21
22#include "main.h"
23
24#include <linux/compiler.h>
25#include <linux/spinlock.h>
26#include <linux/types.h>
27#include <uapi/linux/batadv_packet.h>
28
29struct sk_buff;
30
31void batadv_forw_packet_free(struct batadv_forw_packet *forw_packet,
32 bool dropped);
33struct batadv_forw_packet *
34batadv_forw_packet_alloc(struct batadv_hard_iface *if_incoming,
35 struct batadv_hard_iface *if_outgoing,
36 atomic_t *queue_left,
37 struct batadv_priv *bat_priv,
38 struct sk_buff *skb);
39bool batadv_forw_packet_steal(struct batadv_forw_packet *packet, spinlock_t *l);
40void batadv_forw_packet_ogmv1_queue(struct batadv_priv *bat_priv,
41 struct batadv_forw_packet *forw_packet,
42 unsigned long send_time);
43bool batadv_forw_packet_is_rebroadcast(struct batadv_forw_packet *forw_packet);
44
45int batadv_send_skb_to_orig(struct sk_buff *skb,
46 struct batadv_orig_node *orig_node,
47 struct batadv_hard_iface *recv_if);
48int batadv_send_skb_packet(struct sk_buff *skb,
49 struct batadv_hard_iface *hard_iface,
50 const u8 *dst_addr);
51int batadv_send_broadcast_skb(struct sk_buff *skb,
52 struct batadv_hard_iface *hard_iface);
53int batadv_send_unicast_skb(struct sk_buff *skb,
54 struct batadv_neigh_node *neigh_node);
55int batadv_add_bcast_packet_to_list(struct batadv_priv *bat_priv,
56 const struct sk_buff *skb,
57 unsigned long delay,
58 bool own_packet);
59void
60batadv_purge_outstanding_packets(struct batadv_priv *bat_priv,
61 const struct batadv_hard_iface *hard_iface);
62bool batadv_send_skb_prepare_unicast_4addr(struct batadv_priv *bat_priv,
63 struct sk_buff *skb,
64 struct batadv_orig_node *orig_node,
65 int packet_subtype);
66int batadv_send_skb_unicast(struct batadv_priv *bat_priv,
67 struct sk_buff *skb, int packet_type,
68 int packet_subtype,
69 struct batadv_orig_node *orig_node,
70 unsigned short vid);
71int batadv_send_skb_via_tt_generic(struct batadv_priv *bat_priv,
72 struct sk_buff *skb, int packet_type,
73 int packet_subtype, u8 *dst_hint,
74 unsigned short vid);
75int batadv_send_skb_via_gw(struct batadv_priv *bat_priv, struct sk_buff *skb,
76 unsigned short vid);
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91static inline int batadv_send_skb_via_tt(struct batadv_priv *bat_priv,
92 struct sk_buff *skb, u8 *dst_hint,
93 unsigned short vid)
94{
95 return batadv_send_skb_via_tt_generic(bat_priv, skb, BATADV_UNICAST, 0,
96 dst_hint, vid);
97}
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114static inline int batadv_send_skb_via_tt_4addr(struct batadv_priv *bat_priv,
115 struct sk_buff *skb,
116 int packet_subtype,
117 u8 *dst_hint,
118 unsigned short vid)
119{
120 return batadv_send_skb_via_tt_generic(bat_priv, skb,
121 BATADV_UNICAST_4ADDR,
122 packet_subtype, dst_hint, vid);
123}
124
125#endif
126