~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/net/batman-adv/hard-interface.h

Version: ~ [ linux-6.3-rc3 ] ~ [ linux-6.2.7 ] ~ [ linux-6.1.20 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.103 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.175 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.237 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.278 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.310 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 /* Copyright (C) 2007-2020  B.A.T.M.A.N. contributors:
  3  *
  4  * Marek Lindner, Simon Wunderlich
  5  */
  6 
  7 #ifndef _NET_BATMAN_ADV_HARD_INTERFACE_H_
  8 #define _NET_BATMAN_ADV_HARD_INTERFACE_H_
  9 
 10 #include "main.h"
 11 
 12 #include <linux/compiler.h>
 13 #include <linux/kref.h>
 14 #include <linux/netdevice.h>
 15 #include <linux/notifier.h>
 16 #include <linux/rcupdate.h>
 17 #include <linux/stddef.h>
 18 #include <linux/types.h>
 19 #include <net/net_namespace.h>
 20 
 21 /**
 22  * enum batadv_hard_if_state - State of a hard interface
 23  */
 24 enum batadv_hard_if_state {
 25         /**
 26          * @BATADV_IF_NOT_IN_USE: interface is not used as slave interface of a
 27          * batman-adv soft interface
 28          */
 29         BATADV_IF_NOT_IN_USE,
 30 
 31         /**
 32          * @BATADV_IF_TO_BE_REMOVED: interface will be removed from soft
 33          * interface
 34          */
 35         BATADV_IF_TO_BE_REMOVED,
 36 
 37         /** @BATADV_IF_INACTIVE: interface is deactivated */
 38         BATADV_IF_INACTIVE,
 39 
 40         /** @BATADV_IF_ACTIVE: interface is used */
 41         BATADV_IF_ACTIVE,
 42 
 43         /** @BATADV_IF_TO_BE_ACTIVATED: interface is getting activated */
 44         BATADV_IF_TO_BE_ACTIVATED,
 45 
 46         /**
 47          * @BATADV_IF_I_WANT_YOU: interface is queued up (using sysfs) for being
 48          * added as slave interface of a batman-adv soft interface
 49          */
 50         BATADV_IF_I_WANT_YOU,
 51 };
 52 
 53 /**
 54  * enum batadv_hard_if_bcast - broadcast avoidance options
 55  */
 56 enum batadv_hard_if_bcast {
 57         /** @BATADV_HARDIF_BCAST_OK: Do broadcast on according hard interface */
 58         BATADV_HARDIF_BCAST_OK = 0,
 59 
 60         /**
 61          * @BATADV_HARDIF_BCAST_NORECIPIENT: Broadcast not needed, there is no
 62          *  recipient
 63          */
 64         BATADV_HARDIF_BCAST_NORECIPIENT,
 65 
 66         /**
 67          * @BATADV_HARDIF_BCAST_DUPFWD: There is just the neighbor we got it
 68          *  from
 69          */
 70         BATADV_HARDIF_BCAST_DUPFWD,
 71 
 72         /** @BATADV_HARDIF_BCAST_DUPORIG: There is just the originator */
 73         BATADV_HARDIF_BCAST_DUPORIG,
 74 };
 75 
 76 /**
 77  * enum batadv_hard_if_cleanup - Cleanup modi for soft_iface after slave removal
 78  */
 79 enum batadv_hard_if_cleanup {
 80         /**
 81          * @BATADV_IF_CLEANUP_KEEP: Don't automatically delete soft-interface
 82          */
 83         BATADV_IF_CLEANUP_KEEP,
 84 
 85         /**
 86          * @BATADV_IF_CLEANUP_AUTO: Delete soft-interface after last slave was
 87          *  removed
 88          */
 89         BATADV_IF_CLEANUP_AUTO,
 90 };
 91 
 92 extern struct notifier_block batadv_hard_if_notifier;
 93 
 94 struct net_device *batadv_get_real_netdev(struct net_device *net_device);
 95 bool batadv_is_cfg80211_hardif(struct batadv_hard_iface *hard_iface);
 96 bool batadv_is_wifi_hardif(struct batadv_hard_iface *hard_iface);
 97 struct batadv_hard_iface*
 98 batadv_hardif_get_by_netdev(const struct net_device *net_dev);
 99 int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
100                                    struct net *net, const char *iface_name);
101 void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
102                                      enum batadv_hard_if_cleanup autodel);
103 void batadv_hardif_remove_interfaces(void);
104 int batadv_hardif_min_mtu(struct net_device *soft_iface);
105 void batadv_update_min_mtu(struct net_device *soft_iface);
106 void batadv_hardif_release(struct kref *ref);
107 int batadv_hardif_no_broadcast(struct batadv_hard_iface *if_outgoing,
108                                u8 *orig_addr, u8 *orig_neigh);
109 
110 /**
111  * batadv_hardif_put() - decrement the hard interface refcounter and possibly
112  *  release it
113  * @hard_iface: the hard interface to free
114  */
115 static inline void batadv_hardif_put(struct batadv_hard_iface *hard_iface)
116 {
117         kref_put(&hard_iface->refcount, batadv_hardif_release);
118 }
119 
120 /**
121  * batadv_primary_if_get_selected() - Get reference to primary interface
122  * @bat_priv: the bat priv with all the soft interface information
123  *
124  * Return: primary interface (with increased refcnt), otherwise NULL
125  */
126 static inline struct batadv_hard_iface *
127 batadv_primary_if_get_selected(struct batadv_priv *bat_priv)
128 {
129         struct batadv_hard_iface *hard_iface;
130 
131         rcu_read_lock();
132         hard_iface = rcu_dereference(bat_priv->primary_if);
133         if (!hard_iface)
134                 goto out;
135 
136         if (!kref_get_unless_zero(&hard_iface->refcount))
137                 hard_iface = NULL;
138 
139 out:
140         rcu_read_unlock();
141         return hard_iface;
142 }
143 
144 #endif /* _NET_BATMAN_ADV_HARD_INTERFACE_H_ */
145 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp