linux/net/batman-adv/distributed-arp-table.h
<<
>>
Prefs
   1/* Copyright (C) 2011-2013 B.A.T.M.A.N. contributors:
   2 *
   3 * Antonio Quartulli
   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_ARP_H_
  21#define _NET_BATMAN_ADV_ARP_H_
  22
  23#ifdef CONFIG_BATMAN_ADV_DAT
  24
  25#include "types.h"
  26#include "originator.h"
  27
  28#include <linux/if_arp.h>
  29
  30#define BATADV_DAT_ADDR_MAX ((batadv_dat_addr_t)~(batadv_dat_addr_t)0)
  31
  32bool batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
  33                                           struct sk_buff *skb);
  34bool batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
  35                                           struct sk_buff *skb, int hdr_size);
  36void batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
  37                                         struct sk_buff *skb);
  38bool batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
  39                                         struct sk_buff *skb, int hdr_size);
  40bool batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv,
  41                                      struct batadv_forw_packet *forw_packet);
  42
  43/**
  44 * batadv_dat_init_orig_node_addr - assign a DAT address to the orig_node
  45 * @orig_node: the node to assign the DAT address to
  46 */
  47static inline void
  48batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node)
  49{
  50        uint32_t addr;
  51
  52        addr = batadv_choose_orig(orig_node->orig, BATADV_DAT_ADDR_MAX);
  53        orig_node->dat_addr = (batadv_dat_addr_t)addr;
  54}
  55
  56/**
  57 * batadv_dat_init_own_addr - assign a DAT address to the node itself
  58 * @bat_priv: the bat priv with all the soft interface information
  59 * @primary_if: a pointer to the primary interface
  60 */
  61static inline void
  62batadv_dat_init_own_addr(struct batadv_priv *bat_priv,
  63                         struct batadv_hard_iface *primary_if)
  64{
  65        uint32_t addr;
  66
  67        addr = batadv_choose_orig(primary_if->net_dev->dev_addr,
  68                                  BATADV_DAT_ADDR_MAX);
  69
  70        bat_priv->dat.addr = (batadv_dat_addr_t)addr;
  71}
  72
  73int batadv_dat_init(struct batadv_priv *bat_priv);
  74void batadv_dat_free(struct batadv_priv *bat_priv);
  75int batadv_dat_cache_seq_print_text(struct seq_file *seq, void *offset);
  76
  77/**
  78 * batadv_dat_inc_counter - increment the correct DAT packet counter
  79 * @bat_priv: the bat priv with all the soft interface information
  80 * @subtype: the 4addr subtype of the packet to be counted
  81 *
  82 * Updates the ethtool statistics for the received packet if it is a DAT subtype
  83 */
  84static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv,
  85                                          uint8_t subtype)
  86{
  87        switch (subtype) {
  88        case BATADV_P_DAT_DHT_GET:
  89                batadv_inc_counter(bat_priv,
  90                                   BATADV_CNT_DAT_GET_RX);
  91                break;
  92        case BATADV_P_DAT_DHT_PUT:
  93                batadv_inc_counter(bat_priv,
  94                                   BATADV_CNT_DAT_PUT_RX);
  95                break;
  96        }
  97}
  98
  99#else
 100
 101static inline bool
 102batadv_dat_snoop_outgoing_arp_request(struct batadv_priv *bat_priv,
 103                                      struct sk_buff *skb)
 104{
 105        return false;
 106}
 107
 108static inline bool
 109batadv_dat_snoop_incoming_arp_request(struct batadv_priv *bat_priv,
 110                                      struct sk_buff *skb, int hdr_size)
 111{
 112        return false;
 113}
 114
 115static inline bool
 116batadv_dat_snoop_outgoing_arp_reply(struct batadv_priv *bat_priv,
 117                                    struct sk_buff *skb)
 118{
 119        return false;
 120}
 121
 122static inline bool
 123batadv_dat_snoop_incoming_arp_reply(struct batadv_priv *bat_priv,
 124                                    struct sk_buff *skb, int hdr_size)
 125{
 126        return false;
 127}
 128
 129static inline bool
 130batadv_dat_drop_broadcast_packet(struct batadv_priv *bat_priv,
 131                                 struct batadv_forw_packet *forw_packet)
 132{
 133        return false;
 134}
 135
 136static inline void
 137batadv_dat_init_orig_node_addr(struct batadv_orig_node *orig_node)
 138{
 139}
 140
 141static inline void batadv_dat_init_own_addr(struct batadv_priv *bat_priv,
 142                                            struct batadv_hard_iface *iface)
 143{
 144}
 145
 146static inline void batadv_arp_change_timeout(struct net_device *soft_iface,
 147                                             const char *name)
 148{
 149}
 150
 151static inline int batadv_dat_init(struct batadv_priv *bat_priv)
 152{
 153        return 0;
 154}
 155
 156static inline void batadv_dat_free(struct batadv_priv *bat_priv)
 157{
 158}
 159
 160static inline void batadv_dat_inc_counter(struct batadv_priv *bat_priv,
 161                                          uint8_t subtype)
 162{
 163}
 164
 165#endif /* CONFIG_BATMAN_ADV_DAT */
 166
 167#endif /* _NET_BATMAN_ADV_ARP_H_ */
 168