1/* Copyright (C) 2010-2012 B.A.T.M.A.N. contributors: 2 * 3 * Andreas Langer 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of version 2 of the GNU General Public 7 * License as published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 17 * 02110-1301, USA 18 */ 19 20#ifndef _NET_BATMAN_ADV_UNICAST_H_ 21#define _NET_BATMAN_ADV_UNICAST_H_ 22 23#include "packet.h" 24 25#define BATADV_FRAG_TIMEOUT 10000 /* purge frag list entries after time in ms */ 26#define BATADV_FRAG_BUFFER_SIZE 6 /* number of list elements in buffer */ 27 28int batadv_frag_reassemble_skb(struct sk_buff *skb, 29 struct batadv_priv *bat_priv, 30 struct sk_buff **new_skb); 31void batadv_frag_list_free(struct list_head *head); 32int batadv_unicast_send_skb(struct sk_buff *skb, struct batadv_priv *bat_priv); 33int batadv_frag_send_skb(struct sk_buff *skb, struct batadv_priv *bat_priv, 34 struct batadv_hard_iface *hard_iface, 35 const uint8_t dstaddr[]); 36 37static inline int batadv_frag_can_reassemble(const struct sk_buff *skb, int mtu) 38{ 39 const struct batadv_unicast_frag_packet *unicast_packet; 40 int uneven_correction = 0; 41 unsigned int merged_size; 42 43 unicast_packet = (struct batadv_unicast_frag_packet *)skb->data; 44 45 if (unicast_packet->flags & BATADV_UNI_FRAG_LARGETAIL) { 46 if (unicast_packet->flags & BATADV_UNI_FRAG_HEAD) 47 uneven_correction = 1; 48 else 49 uneven_correction = -1; 50 } 51 52 merged_size = (skb->len - sizeof(*unicast_packet)) * 2; 53 merged_size += sizeof(struct batadv_unicast_packet) + uneven_correction; 54 55 return merged_size <= mtu; 56} 57 58#endif /* _NET_BATMAN_ADV_UNICAST_H_ */ 59

