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