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

TOMOYO Linux Cross Reference
Linux/include/net/bond_options.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ 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-or-later */
  2 /*
  3  * drivers/net/bond/bond_options.h - bonding options
  4  * Copyright (c) 2013 Nikolay Aleksandrov <nikolay@redhat.com>
  5  */
  6 
  7 #ifndef _NET_BOND_OPTIONS_H
  8 #define _NET_BOND_OPTIONS_H
  9 
 10 #include <linux/bits.h>
 11 #include <linux/limits.h>
 12 #include <linux/types.h>
 13 #include <linux/string.h>
 14 
 15 struct netlink_ext_ack;
 16 struct nlattr;
 17 
 18 #define BOND_OPT_MAX_NAMELEN 32
 19 #define BOND_OPT_VALID(opt) ((opt) < BOND_OPT_LAST)
 20 #define BOND_MODE_ALL_EX(x) (~(x))
 21 
 22 /* Option flags:
 23  * BOND_OPTFLAG_NOSLAVES - check if the bond device is empty before setting
 24  * BOND_OPTFLAG_IFDOWN - check if the bond device is down before setting
 25  * BOND_OPTFLAG_RAWVAL - the option parses the value itself
 26  */
 27 enum {
 28         BOND_OPTFLAG_NOSLAVES   = BIT(0),
 29         BOND_OPTFLAG_IFDOWN     = BIT(1),
 30         BOND_OPTFLAG_RAWVAL     = BIT(2)
 31 };
 32 
 33 /* Value type flags:
 34  * BOND_VALFLAG_DEFAULT - mark the value as default
 35  * BOND_VALFLAG_(MIN|MAX) - mark the value as min/max
 36  */
 37 enum {
 38         BOND_VALFLAG_DEFAULT    = BIT(0),
 39         BOND_VALFLAG_MIN        = BIT(1),
 40         BOND_VALFLAG_MAX        = BIT(2)
 41 };
 42 
 43 /* Option IDs, their bit positions correspond to their IDs */
 44 enum {
 45         BOND_OPT_MODE,
 46         BOND_OPT_PACKETS_PER_SLAVE,
 47         BOND_OPT_XMIT_HASH,
 48         BOND_OPT_ARP_VALIDATE,
 49         BOND_OPT_ARP_ALL_TARGETS,
 50         BOND_OPT_FAIL_OVER_MAC,
 51         BOND_OPT_ARP_INTERVAL,
 52         BOND_OPT_ARP_TARGETS,
 53         BOND_OPT_DOWNDELAY,
 54         BOND_OPT_UPDELAY,
 55         BOND_OPT_LACP_RATE,
 56         BOND_OPT_MINLINKS,
 57         BOND_OPT_AD_SELECT,
 58         BOND_OPT_NUM_PEER_NOTIF,
 59         BOND_OPT_MIIMON,
 60         BOND_OPT_PRIMARY,
 61         BOND_OPT_PRIMARY_RESELECT,
 62         BOND_OPT_USE_CARRIER,
 63         BOND_OPT_ACTIVE_SLAVE,
 64         BOND_OPT_QUEUE_ID,
 65         BOND_OPT_ALL_SLAVES_ACTIVE,
 66         BOND_OPT_RESEND_IGMP,
 67         BOND_OPT_LP_INTERVAL,
 68         BOND_OPT_SLAVES,
 69         BOND_OPT_TLB_DYNAMIC_LB,
 70         BOND_OPT_AD_ACTOR_SYS_PRIO,
 71         BOND_OPT_AD_ACTOR_SYSTEM,
 72         BOND_OPT_AD_USER_PORT_KEY,
 73         BOND_OPT_NUM_PEER_NOTIF_ALIAS,
 74         BOND_OPT_PEER_NOTIF_DELAY,
 75         BOND_OPT_LACP_ACTIVE,
 76         BOND_OPT_MISSED_MAX,
 77         BOND_OPT_NS_TARGETS,
 78         BOND_OPT_PRIO,
 79         BOND_OPT_COUPLED_CONTROL,
 80         BOND_OPT_LAST
 81 };
 82 
 83 /* This structure is used for storing option values and for passing option
 84  * values when changing an option. The logic when used as an arg is as follows:
 85  * - if value != ULLONG_MAX -> parse value
 86  * - if string != NULL -> parse string
 87  * - if the opt is RAW data and length less than maxlen,
 88  *   copy the data to extra storage
 89  */
 90 
 91 #define BOND_OPT_EXTRA_MAXLEN 16
 92 struct bond_opt_value {
 93         char *string;
 94         u64 value;
 95         u32 flags;
 96         union {
 97                 char extra[BOND_OPT_EXTRA_MAXLEN];
 98                 struct net_device *slave_dev;
 99         };
100 };
101 
102 struct bonding;
103 
104 struct bond_option {
105         int id;
106         const char *name;
107         const char *desc;
108         u32 flags;
109 
110         /* unsuppmodes is used to denote modes in which the option isn't
111          * supported.
112          */
113         unsigned long unsuppmodes;
114         /* supported values which this option can have, can be a subset of
115          * BOND_OPTVAL_RANGE's value range
116          */
117         const struct bond_opt_value *values;
118 
119         int (*set)(struct bonding *bond, const struct bond_opt_value *val);
120 };
121 
122 int __bond_opt_set(struct bonding *bond, unsigned int option,
123                    struct bond_opt_value *val,
124                    struct nlattr *bad_attr, struct netlink_ext_ack *extack);
125 int __bond_opt_set_notify(struct bonding *bond, unsigned int option,
126                           struct bond_opt_value *val);
127 int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf);
128 
129 const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt,
130                                             struct bond_opt_value *val);
131 const struct bond_option *bond_opt_get(unsigned int option);
132 const struct bond_option *bond_opt_get_by_name(const char *name);
133 const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val);
134 
135 /* This helper is used to initialize a bond_opt_value structure for parameter
136  * passing. There should be either a valid string or value, but not both.
137  * When value is ULLONG_MAX then string will be used.
138  */
139 static inline void __bond_opt_init(struct bond_opt_value *optval,
140                                    char *string, u64 value,
141                                    void *extra, size_t extra_len)
142 {
143         memset(optval, 0, sizeof(*optval));
144         optval->value = ULLONG_MAX;
145         if (value != ULLONG_MAX)
146                 optval->value = value;
147         else if (string)
148                 optval->string = string;
149 
150         if (extra && extra_len <= BOND_OPT_EXTRA_MAXLEN)
151                 memcpy(optval->extra, extra, extra_len);
152 }
153 #define bond_opt_initval(optval, value) __bond_opt_init(optval, NULL, value, NULL, 0)
154 #define bond_opt_initstr(optval, str) __bond_opt_init(optval, str, ULLONG_MAX, NULL, 0)
155 #define bond_opt_initextra(optval, extra, extra_len) \
156         __bond_opt_init(optval, NULL, ULLONG_MAX, extra, extra_len)
157 #define bond_opt_slave_initval(optval, slave_dev, value) \
158         __bond_opt_init(optval, NULL, value, slave_dev, sizeof(struct net_device *))
159 
160 void bond_option_arp_ip_targets_clear(struct bonding *bond);
161 #if IS_ENABLED(CONFIG_IPV6)
162 void bond_option_ns_ip6_targets_clear(struct bonding *bond);
163 #endif
164 
165 #endif /* _NET_BOND_OPTIONS_H */
166 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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.

sflogo.php