hard-interface.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* Copyright (C) 2007-2013 B.A.T.M.A.N. contributors:
  2. *
  3. * Marek Lindner, Simon Wunderlich
  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. #ifndef _NET_BATMAN_ADV_HARD_INTERFACE_H_
  20. #define _NET_BATMAN_ADV_HARD_INTERFACE_H_
  21. enum batadv_hard_if_state {
  22. BATADV_IF_NOT_IN_USE,
  23. BATADV_IF_TO_BE_REMOVED,
  24. BATADV_IF_INACTIVE,
  25. BATADV_IF_ACTIVE,
  26. BATADV_IF_TO_BE_ACTIVATED,
  27. BATADV_IF_I_WANT_YOU,
  28. };
  29. /**
  30. * enum batadv_hard_if_cleanup - Cleanup modi for soft_iface after slave removal
  31. * @BATADV_IF_CLEANUP_KEEP: Don't automatically delete soft-interface
  32. * @BATADV_IF_CLEANUP_AUTO: Delete soft-interface after last slave was removed
  33. */
  34. enum batadv_hard_if_cleanup {
  35. BATADV_IF_CLEANUP_KEEP,
  36. BATADV_IF_CLEANUP_AUTO,
  37. };
  38. extern struct notifier_block batadv_hard_if_notifier;
  39. struct batadv_hard_iface*
  40. batadv_hardif_get_by_netdev(const struct net_device *net_dev);
  41. int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
  42. const char *iface_name);
  43. void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
  44. enum batadv_hard_if_cleanup autodel);
  45. void batadv_hardif_remove_interfaces(void);
  46. int batadv_hardif_min_mtu(struct net_device *soft_iface);
  47. void batadv_update_min_mtu(struct net_device *soft_iface);
  48. void batadv_hardif_free_rcu(struct rcu_head *rcu);
  49. bool batadv_is_wifi_iface(int ifindex);
  50. static inline void
  51. batadv_hardif_free_ref(struct batadv_hard_iface *hard_iface)
  52. {
  53. if (atomic_dec_and_test(&hard_iface->refcount))
  54. call_rcu(&hard_iface->rcu, batadv_hardif_free_rcu);
  55. }
  56. static inline struct batadv_hard_iface *
  57. batadv_primary_if_get_selected(struct batadv_priv *bat_priv)
  58. {
  59. struct batadv_hard_iface *hard_iface;
  60. rcu_read_lock();
  61. hard_iface = rcu_dereference(bat_priv->primary_if);
  62. if (!hard_iface)
  63. goto out;
  64. if (!atomic_inc_not_zero(&hard_iface->refcount))
  65. hard_iface = NULL;
  66. out:
  67. rcu_read_unlock();
  68. return hard_iface;
  69. }
  70. #endif /* _NET_BATMAN_ADV_HARD_INTERFACE_H_ */