net: bnxt_ptp: fix compilation error
[linux-2.6-microblaze.git] / drivers / net / bonding / bond_options.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * drivers/net/bond/bond_options.c - bonding options
4  * Copyright (c) 2013 Jiri Pirko <jiri@resnulli.us>
5  * Copyright (c) 2013 Scott Feldman <sfeldma@cumulusnetworks.com>
6  */
7
8 #include <linux/errno.h>
9 #include <linux/if.h>
10 #include <linux/netdevice.h>
11 #include <linux/spinlock.h>
12 #include <linux/rcupdate.h>
13 #include <linux/ctype.h>
14 #include <linux/inet.h>
15 #include <linux/sched/signal.h>
16
17 #include <net/bonding.h>
18
19 static int bond_option_active_slave_set(struct bonding *bond,
20                                         const struct bond_opt_value *newval);
21 static int bond_option_miimon_set(struct bonding *bond,
22                                   const struct bond_opt_value *newval);
23 static int bond_option_updelay_set(struct bonding *bond,
24                                    const struct bond_opt_value *newval);
25 static int bond_option_downdelay_set(struct bonding *bond,
26                                      const struct bond_opt_value *newval);
27 static int bond_option_peer_notif_delay_set(struct bonding *bond,
28                                             const struct bond_opt_value *newval);
29 static int bond_option_use_carrier_set(struct bonding *bond,
30                                        const struct bond_opt_value *newval);
31 static int bond_option_arp_interval_set(struct bonding *bond,
32                                         const struct bond_opt_value *newval);
33 static int bond_option_arp_ip_target_add(struct bonding *bond, __be32 target);
34 static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target);
35 static int bond_option_arp_ip_targets_set(struct bonding *bond,
36                                           const struct bond_opt_value *newval);
37 #if IS_ENABLED(CONFIG_IPV6)
38 static int bond_option_ns_ip6_targets_set(struct bonding *bond,
39                                           const struct bond_opt_value *newval);
40 #endif
41 static int bond_option_arp_validate_set(struct bonding *bond,
42                                         const struct bond_opt_value *newval);
43 static int bond_option_arp_all_targets_set(struct bonding *bond,
44                                            const struct bond_opt_value *newval);
45 static int bond_option_primary_set(struct bonding *bond,
46                                    const struct bond_opt_value *newval);
47 static int bond_option_primary_reselect_set(struct bonding *bond,
48                                             const struct bond_opt_value *newval);
49 static int bond_option_fail_over_mac_set(struct bonding *bond,
50                                          const struct bond_opt_value *newval);
51 static int bond_option_xmit_hash_policy_set(struct bonding *bond,
52                                             const struct bond_opt_value *newval);
53 static int bond_option_resend_igmp_set(struct bonding *bond,
54                                        const struct bond_opt_value *newval);
55 static int bond_option_num_peer_notif_set(struct bonding *bond,
56                                           const struct bond_opt_value *newval);
57 static int bond_option_all_slaves_active_set(struct bonding *bond,
58                                              const struct bond_opt_value *newval);
59 static int bond_option_min_links_set(struct bonding *bond,
60                                      const struct bond_opt_value *newval);
61 static int bond_option_lp_interval_set(struct bonding *bond,
62                                        const struct bond_opt_value *newval);
63 static int bond_option_pps_set(struct bonding *bond,
64                                const struct bond_opt_value *newval);
65 static int bond_option_lacp_active_set(struct bonding *bond,
66                                        const struct bond_opt_value *newval);
67 static int bond_option_lacp_rate_set(struct bonding *bond,
68                                      const struct bond_opt_value *newval);
69 static int bond_option_ad_select_set(struct bonding *bond,
70                                      const struct bond_opt_value *newval);
71 static int bond_option_queue_id_set(struct bonding *bond,
72                                     const struct bond_opt_value *newval);
73 static int bond_option_mode_set(struct bonding *bond,
74                                 const struct bond_opt_value *newval);
75 static int bond_option_slaves_set(struct bonding *bond,
76                                   const struct bond_opt_value *newval);
77 static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
78                                   const struct bond_opt_value *newval);
79 static int bond_option_ad_actor_sys_prio_set(struct bonding *bond,
80                                              const struct bond_opt_value *newval);
81 static int bond_option_ad_actor_system_set(struct bonding *bond,
82                                            const struct bond_opt_value *newval);
83 static int bond_option_ad_user_port_key_set(struct bonding *bond,
84                                             const struct bond_opt_value *newval);
85 static int bond_option_missed_max_set(struct bonding *bond,
86                                       const struct bond_opt_value *newval);
87
88
89 static const struct bond_opt_value bond_mode_tbl[] = {
90         { "balance-rr",    BOND_MODE_ROUNDROBIN,   BOND_VALFLAG_DEFAULT},
91         { "active-backup", BOND_MODE_ACTIVEBACKUP, 0},
92         { "balance-xor",   BOND_MODE_XOR,          0},
93         { "broadcast",     BOND_MODE_BROADCAST,    0},
94         { "802.3ad",       BOND_MODE_8023AD,       0},
95         { "balance-tlb",   BOND_MODE_TLB,          0},
96         { "balance-alb",   BOND_MODE_ALB,          0},
97         { NULL,            -1,                     0},
98 };
99
100 static const struct bond_opt_value bond_pps_tbl[] = {
101         { "default", 1,         BOND_VALFLAG_DEFAULT},
102         { "maxval",  USHRT_MAX, BOND_VALFLAG_MAX},
103         { NULL,      -1,        0},
104 };
105
106 static const struct bond_opt_value bond_xmit_hashtype_tbl[] = {
107         { "layer2",      BOND_XMIT_POLICY_LAYER2,      BOND_VALFLAG_DEFAULT},
108         { "layer3+4",    BOND_XMIT_POLICY_LAYER34,     0},
109         { "layer2+3",    BOND_XMIT_POLICY_LAYER23,     0},
110         { "encap2+3",    BOND_XMIT_POLICY_ENCAP23,     0},
111         { "encap3+4",    BOND_XMIT_POLICY_ENCAP34,     0},
112         { "vlan+srcmac", BOND_XMIT_POLICY_VLAN_SRCMAC, 0},
113         { NULL,          -1,                           0},
114 };
115
116 static const struct bond_opt_value bond_arp_validate_tbl[] = {
117         { "none",               BOND_ARP_VALIDATE_NONE,         BOND_VALFLAG_DEFAULT},
118         { "active",             BOND_ARP_VALIDATE_ACTIVE,       0},
119         { "backup",             BOND_ARP_VALIDATE_BACKUP,       0},
120         { "all",                BOND_ARP_VALIDATE_ALL,          0},
121         { "filter",             BOND_ARP_FILTER,                0},
122         { "filter_active",      BOND_ARP_FILTER_ACTIVE,         0},
123         { "filter_backup",      BOND_ARP_FILTER_BACKUP,         0},
124         { NULL,                 -1,                             0},
125 };
126
127 static const struct bond_opt_value bond_arp_all_targets_tbl[] = {
128         { "any", BOND_ARP_TARGETS_ANY, BOND_VALFLAG_DEFAULT},
129         { "all", BOND_ARP_TARGETS_ALL, 0},
130         { NULL,  -1,                   0},
131 };
132
133 static const struct bond_opt_value bond_fail_over_mac_tbl[] = {
134         { "none",   BOND_FOM_NONE,   BOND_VALFLAG_DEFAULT},
135         { "active", BOND_FOM_ACTIVE, 0},
136         { "follow", BOND_FOM_FOLLOW, 0},
137         { NULL,     -1,              0},
138 };
139
140 static const struct bond_opt_value bond_intmax_tbl[] = {
141         { "off",     0,       BOND_VALFLAG_DEFAULT},
142         { "maxval",  INT_MAX, BOND_VALFLAG_MAX},
143         { NULL,      -1,      0}
144 };
145
146 static const struct bond_opt_value bond_lacp_active[] = {
147         { "off", 0,  0},
148         { "on",  1,  BOND_VALFLAG_DEFAULT},
149         { NULL,  -1, 0}
150 };
151
152 static const struct bond_opt_value bond_lacp_rate_tbl[] = {
153         { "slow", AD_LACP_SLOW, 0},
154         { "fast", AD_LACP_FAST, 0},
155         { NULL,   -1,           0},
156 };
157
158 static const struct bond_opt_value bond_ad_select_tbl[] = {
159         { "stable",    BOND_AD_STABLE,    BOND_VALFLAG_DEFAULT},
160         { "bandwidth", BOND_AD_BANDWIDTH, 0},
161         { "count",     BOND_AD_COUNT,     0},
162         { NULL,        -1,                0},
163 };
164
165 static const struct bond_opt_value bond_num_peer_notif_tbl[] = {
166         { "off",     0,   0},
167         { "maxval",  255, BOND_VALFLAG_MAX},
168         { "default", 1,   BOND_VALFLAG_DEFAULT},
169         { NULL,      -1,  0}
170 };
171
172 static const struct bond_opt_value bond_primary_reselect_tbl[] = {
173         { "always",  BOND_PRI_RESELECT_ALWAYS,  BOND_VALFLAG_DEFAULT},
174         { "better",  BOND_PRI_RESELECT_BETTER,  0},
175         { "failure", BOND_PRI_RESELECT_FAILURE, 0},
176         { NULL,      -1},
177 };
178
179 static const struct bond_opt_value bond_use_carrier_tbl[] = {
180         { "off", 0,  0},
181         { "on",  1,  BOND_VALFLAG_DEFAULT},
182         { NULL,  -1, 0}
183 };
184
185 static const struct bond_opt_value bond_all_slaves_active_tbl[] = {
186         { "off", 0,  BOND_VALFLAG_DEFAULT},
187         { "on",  1,  0},
188         { NULL,  -1, 0}
189 };
190
191 static const struct bond_opt_value bond_resend_igmp_tbl[] = {
192         { "off",     0,   0},
193         { "maxval",  255, BOND_VALFLAG_MAX},
194         { "default", 1,   BOND_VALFLAG_DEFAULT},
195         { NULL,      -1,  0}
196 };
197
198 static const struct bond_opt_value bond_lp_interval_tbl[] = {
199         { "minval",  1,       BOND_VALFLAG_MIN | BOND_VALFLAG_DEFAULT},
200         { "maxval",  INT_MAX, BOND_VALFLAG_MAX},
201         { NULL,      -1,      0},
202 };
203
204 static const struct bond_opt_value bond_tlb_dynamic_lb_tbl[] = {
205         { "off", 0,  0},
206         { "on",  1,  BOND_VALFLAG_DEFAULT},
207         { NULL,  -1, 0}
208 };
209
210 static const struct bond_opt_value bond_ad_actor_sys_prio_tbl[] = {
211         { "minval",  1,     BOND_VALFLAG_MIN},
212         { "maxval",  65535, BOND_VALFLAG_MAX | BOND_VALFLAG_DEFAULT},
213         { NULL,      -1,    0},
214 };
215
216 static const struct bond_opt_value bond_ad_user_port_key_tbl[] = {
217         { "minval",  0,     BOND_VALFLAG_MIN | BOND_VALFLAG_DEFAULT},
218         { "maxval",  1023,  BOND_VALFLAG_MAX},
219         { NULL,      -1,    0},
220 };
221
222 static const struct bond_opt_value bond_missed_max_tbl[] = {
223         { "minval",     1,      BOND_VALFLAG_MIN},
224         { "maxval",     255,    BOND_VALFLAG_MAX},
225         { "default",    2,      BOND_VALFLAG_DEFAULT},
226         { NULL,         -1,     0},
227 };
228
229 static const struct bond_option bond_opts[BOND_OPT_LAST] = {
230         [BOND_OPT_MODE] = {
231                 .id = BOND_OPT_MODE,
232                 .name = "mode",
233                 .desc = "bond device mode",
234                 .flags = BOND_OPTFLAG_NOSLAVES | BOND_OPTFLAG_IFDOWN,
235                 .values = bond_mode_tbl,
236                 .set = bond_option_mode_set
237         },
238         [BOND_OPT_PACKETS_PER_SLAVE] = {
239                 .id = BOND_OPT_PACKETS_PER_SLAVE,
240                 .name = "packets_per_slave",
241                 .desc = "Packets to send per slave in RR mode",
242                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_ROUNDROBIN)),
243                 .values = bond_pps_tbl,
244                 .set = bond_option_pps_set
245         },
246         [BOND_OPT_XMIT_HASH] = {
247                 .id = BOND_OPT_XMIT_HASH,
248                 .name = "xmit_hash_policy",
249                 .desc = "balance-xor, 802.3ad, and tlb hashing method",
250                 .values = bond_xmit_hashtype_tbl,
251                 .set = bond_option_xmit_hash_policy_set
252         },
253         [BOND_OPT_ARP_VALIDATE] = {
254                 .id = BOND_OPT_ARP_VALIDATE,
255                 .name = "arp_validate",
256                 .desc = "validate src/dst of ARP probes",
257                 .unsuppmodes = BIT(BOND_MODE_8023AD) | BIT(BOND_MODE_TLB) |
258                                BIT(BOND_MODE_ALB),
259                 .values = bond_arp_validate_tbl,
260                 .set = bond_option_arp_validate_set
261         },
262         [BOND_OPT_ARP_ALL_TARGETS] = {
263                 .id = BOND_OPT_ARP_ALL_TARGETS,
264                 .name = "arp_all_targets",
265                 .desc = "fail on any/all arp targets timeout",
266                 .values = bond_arp_all_targets_tbl,
267                 .set = bond_option_arp_all_targets_set
268         },
269         [BOND_OPT_FAIL_OVER_MAC] = {
270                 .id = BOND_OPT_FAIL_OVER_MAC,
271                 .name = "fail_over_mac",
272                 .desc = "For active-backup, do not set all slaves to the same MAC",
273                 .flags = BOND_OPTFLAG_NOSLAVES,
274                 .values = bond_fail_over_mac_tbl,
275                 .set = bond_option_fail_over_mac_set
276         },
277         [BOND_OPT_ARP_INTERVAL] = {
278                 .id = BOND_OPT_ARP_INTERVAL,
279                 .name = "arp_interval",
280                 .desc = "arp interval in milliseconds",
281                 .unsuppmodes = BIT(BOND_MODE_8023AD) | BIT(BOND_MODE_TLB) |
282                                BIT(BOND_MODE_ALB),
283                 .values = bond_intmax_tbl,
284                 .set = bond_option_arp_interval_set
285         },
286         [BOND_OPT_MISSED_MAX] = {
287                 .id = BOND_OPT_MISSED_MAX,
288                 .name = "arp_missed_max",
289                 .desc = "Maximum number of missed ARP interval",
290                 .unsuppmodes = BIT(BOND_MODE_8023AD) | BIT(BOND_MODE_TLB) |
291                                BIT(BOND_MODE_ALB),
292                 .values = bond_missed_max_tbl,
293                 .set = bond_option_missed_max_set
294         },
295         [BOND_OPT_ARP_TARGETS] = {
296                 .id = BOND_OPT_ARP_TARGETS,
297                 .name = "arp_ip_target",
298                 .desc = "arp targets in n.n.n.n form",
299                 .flags = BOND_OPTFLAG_RAWVAL,
300                 .set = bond_option_arp_ip_targets_set
301         },
302 #if IS_ENABLED(CONFIG_IPV6)
303         [BOND_OPT_NS_TARGETS] = {
304                 .id = BOND_OPT_NS_TARGETS,
305                 .name = "ns_ip6_target",
306                 .desc = "NS targets in ffff:ffff::ffff:ffff form",
307                 .flags = BOND_OPTFLAG_RAWVAL,
308                 .set = bond_option_ns_ip6_targets_set
309         },
310 #endif
311         [BOND_OPT_DOWNDELAY] = {
312                 .id = BOND_OPT_DOWNDELAY,
313                 .name = "downdelay",
314                 .desc = "Delay before considering link down, in milliseconds",
315                 .values = bond_intmax_tbl,
316                 .set = bond_option_downdelay_set
317         },
318         [BOND_OPT_UPDELAY] = {
319                 .id = BOND_OPT_UPDELAY,
320                 .name = "updelay",
321                 .desc = "Delay before considering link up, in milliseconds",
322                 .values = bond_intmax_tbl,
323                 .set = bond_option_updelay_set
324         },
325         [BOND_OPT_LACP_ACTIVE] = {
326                 .id = BOND_OPT_LACP_ACTIVE,
327                 .name = "lacp_active",
328                 .desc = "Send LACPDU frames with configured lacp rate or acts as speak when spoken to",
329                 .flags = BOND_OPTFLAG_IFDOWN,
330                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_8023AD)),
331                 .values = bond_lacp_active,
332                 .set = bond_option_lacp_active_set
333         },
334         [BOND_OPT_LACP_RATE] = {
335                 .id = BOND_OPT_LACP_RATE,
336                 .name = "lacp_rate",
337                 .desc = "LACPDU tx rate to request from 802.3ad partner",
338                 .flags = BOND_OPTFLAG_IFDOWN,
339                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_8023AD)),
340                 .values = bond_lacp_rate_tbl,
341                 .set = bond_option_lacp_rate_set
342         },
343         [BOND_OPT_MINLINKS] = {
344                 .id = BOND_OPT_MINLINKS,
345                 .name = "min_links",
346                 .desc = "Minimum number of available links before turning on carrier",
347                 .values = bond_intmax_tbl,
348                 .set = bond_option_min_links_set
349         },
350         [BOND_OPT_AD_SELECT] = {
351                 .id = BOND_OPT_AD_SELECT,
352                 .name = "ad_select",
353                 .desc = "803.ad aggregation selection logic",
354                 .flags = BOND_OPTFLAG_IFDOWN,
355                 .values = bond_ad_select_tbl,
356                 .set = bond_option_ad_select_set
357         },
358         [BOND_OPT_NUM_PEER_NOTIF] = {
359                 .id = BOND_OPT_NUM_PEER_NOTIF,
360                 .name = "num_unsol_na",
361                 .desc = "Number of peer notifications to send on failover event",
362                 .values = bond_num_peer_notif_tbl,
363                 .set = bond_option_num_peer_notif_set
364         },
365         [BOND_OPT_MIIMON] = {
366                 .id = BOND_OPT_MIIMON,
367                 .name = "miimon",
368                 .desc = "Link check interval in milliseconds",
369                 .values = bond_intmax_tbl,
370                 .set = bond_option_miimon_set
371         },
372         [BOND_OPT_PRIMARY] = {
373                 .id = BOND_OPT_PRIMARY,
374                 .name = "primary",
375                 .desc = "Primary network device to use",
376                 .flags = BOND_OPTFLAG_RAWVAL,
377                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_ACTIVEBACKUP) |
378                                                 BIT(BOND_MODE_TLB) |
379                                                 BIT(BOND_MODE_ALB)),
380                 .set = bond_option_primary_set
381         },
382         [BOND_OPT_PRIMARY_RESELECT] = {
383                 .id = BOND_OPT_PRIMARY_RESELECT,
384                 .name = "primary_reselect",
385                 .desc = "Reselect primary slave once it comes up",
386                 .values = bond_primary_reselect_tbl,
387                 .set = bond_option_primary_reselect_set
388         },
389         [BOND_OPT_USE_CARRIER] = {
390                 .id = BOND_OPT_USE_CARRIER,
391                 .name = "use_carrier",
392                 .desc = "Use netif_carrier_ok (vs MII ioctls) in miimon",
393                 .values = bond_use_carrier_tbl,
394                 .set = bond_option_use_carrier_set
395         },
396         [BOND_OPT_ACTIVE_SLAVE] = {
397                 .id = BOND_OPT_ACTIVE_SLAVE,
398                 .name = "active_slave",
399                 .desc = "Currently active slave",
400                 .flags = BOND_OPTFLAG_RAWVAL,
401                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_ACTIVEBACKUP) |
402                                                 BIT(BOND_MODE_TLB) |
403                                                 BIT(BOND_MODE_ALB)),
404                 .set = bond_option_active_slave_set
405         },
406         [BOND_OPT_QUEUE_ID] = {
407                 .id = BOND_OPT_QUEUE_ID,
408                 .name = "queue_id",
409                 .desc = "Set queue id of a slave",
410                 .flags = BOND_OPTFLAG_RAWVAL,
411                 .set = bond_option_queue_id_set
412         },
413         [BOND_OPT_ALL_SLAVES_ACTIVE] = {
414                 .id = BOND_OPT_ALL_SLAVES_ACTIVE,
415                 .name = "all_slaves_active",
416                 .desc = "Keep all frames received on an interface by setting active flag for all slaves",
417                 .values = bond_all_slaves_active_tbl,
418                 .set = bond_option_all_slaves_active_set
419         },
420         [BOND_OPT_RESEND_IGMP] = {
421                 .id = BOND_OPT_RESEND_IGMP,
422                 .name = "resend_igmp",
423                 .desc = "Number of IGMP membership reports to send on link failure",
424                 .values = bond_resend_igmp_tbl,
425                 .set = bond_option_resend_igmp_set
426         },
427         [BOND_OPT_LP_INTERVAL] = {
428                 .id = BOND_OPT_LP_INTERVAL,
429                 .name = "lp_interval",
430                 .desc = "The number of seconds between instances where the bonding driver sends learning packets to each slave's peer switch",
431                 .values = bond_lp_interval_tbl,
432                 .set = bond_option_lp_interval_set
433         },
434         [BOND_OPT_SLAVES] = {
435                 .id = BOND_OPT_SLAVES,
436                 .name = "slaves",
437                 .desc = "Slave membership management",
438                 .flags = BOND_OPTFLAG_RAWVAL,
439                 .set = bond_option_slaves_set
440         },
441         [BOND_OPT_TLB_DYNAMIC_LB] = {
442                 .id = BOND_OPT_TLB_DYNAMIC_LB,
443                 .name = "tlb_dynamic_lb",
444                 .desc = "Enable dynamic flow shuffling",
445                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_TLB) | BIT(BOND_MODE_ALB)),
446                 .values = bond_tlb_dynamic_lb_tbl,
447                 .flags = BOND_OPTFLAG_IFDOWN,
448                 .set = bond_option_tlb_dynamic_lb_set,
449         },
450         [BOND_OPT_AD_ACTOR_SYS_PRIO] = {
451                 .id = BOND_OPT_AD_ACTOR_SYS_PRIO,
452                 .name = "ad_actor_sys_prio",
453                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_8023AD)),
454                 .values = bond_ad_actor_sys_prio_tbl,
455                 .set = bond_option_ad_actor_sys_prio_set,
456         },
457         [BOND_OPT_AD_ACTOR_SYSTEM] = {
458                 .id = BOND_OPT_AD_ACTOR_SYSTEM,
459                 .name = "ad_actor_system",
460                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_8023AD)),
461                 .flags = BOND_OPTFLAG_RAWVAL,
462                 .set = bond_option_ad_actor_system_set,
463         },
464         [BOND_OPT_AD_USER_PORT_KEY] = {
465                 .id = BOND_OPT_AD_USER_PORT_KEY,
466                 .name = "ad_user_port_key",
467                 .unsuppmodes = BOND_MODE_ALL_EX(BIT(BOND_MODE_8023AD)),
468                 .flags = BOND_OPTFLAG_IFDOWN,
469                 .values = bond_ad_user_port_key_tbl,
470                 .set = bond_option_ad_user_port_key_set,
471         },
472         [BOND_OPT_NUM_PEER_NOTIF_ALIAS] = {
473                 .id = BOND_OPT_NUM_PEER_NOTIF_ALIAS,
474                 .name = "num_grat_arp",
475                 .desc = "Number of peer notifications to send on failover event",
476                 .values = bond_num_peer_notif_tbl,
477                 .set = bond_option_num_peer_notif_set
478         },
479         [BOND_OPT_PEER_NOTIF_DELAY] = {
480                 .id = BOND_OPT_PEER_NOTIF_DELAY,
481                 .name = "peer_notif_delay",
482                 .desc = "Delay between each peer notification on failover event, in milliseconds",
483                 .values = bond_intmax_tbl,
484                 .set = bond_option_peer_notif_delay_set
485         }
486 };
487
488 /* Searches for an option by name */
489 const struct bond_option *bond_opt_get_by_name(const char *name)
490 {
491         const struct bond_option *opt;
492         int option;
493
494         for (option = 0; option < BOND_OPT_LAST; option++) {
495                 opt = bond_opt_get(option);
496                 if (opt && !strcmp(opt->name, name))
497                         return opt;
498         }
499
500         return NULL;
501 }
502
503 /* Searches for a value in opt's values[] table */
504 const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val)
505 {
506         const struct bond_option *opt;
507         int i;
508
509         opt = bond_opt_get(option);
510         if (WARN_ON(!opt))
511                 return NULL;
512         for (i = 0; opt->values && opt->values[i].string; i++)
513                 if (opt->values[i].value == val)
514                         return &opt->values[i];
515
516         return NULL;
517 }
518
519 /* Searches for a value in opt's values[] table which matches the flagmask */
520 static const struct bond_opt_value *bond_opt_get_flags(const struct bond_option *opt,
521                                                        u32 flagmask)
522 {
523         int i;
524
525         for (i = 0; opt->values && opt->values[i].string; i++)
526                 if (opt->values[i].flags & flagmask)
527                         return &opt->values[i];
528
529         return NULL;
530 }
531
532 /* If maxval is missing then there's no range to check. In case minval is
533  * missing then it's considered to be 0.
534  */
535 static bool bond_opt_check_range(const struct bond_option *opt, u64 val)
536 {
537         const struct bond_opt_value *minval, *maxval;
538
539         minval = bond_opt_get_flags(opt, BOND_VALFLAG_MIN);
540         maxval = bond_opt_get_flags(opt, BOND_VALFLAG_MAX);
541         if (!maxval || (minval && val < minval->value) || val > maxval->value)
542                 return false;
543
544         return true;
545 }
546
547 /**
548  * bond_opt_parse - parse option value
549  * @opt: the option to parse against
550  * @val: value to parse
551  *
552  * This function tries to extract the value from @val and check if it's
553  * a possible match for the option and returns NULL if a match isn't found,
554  * or the struct_opt_value that matched. It also strips the new line from
555  * @val->string if it's present.
556  */
557 const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt,
558                                             struct bond_opt_value *val)
559 {
560         char *p, valstr[BOND_OPT_MAX_NAMELEN + 1] = { 0, };
561         const struct bond_opt_value *tbl;
562         const struct bond_opt_value *ret = NULL;
563         bool checkval;
564         int i, rv;
565
566         /* No parsing if the option wants a raw val */
567         if (opt->flags & BOND_OPTFLAG_RAWVAL)
568                 return val;
569
570         tbl = opt->values;
571         if (!tbl)
572                 goto out;
573
574         /* ULLONG_MAX is used to bypass string processing */
575         checkval = val->value != ULLONG_MAX;
576         if (!checkval) {
577                 if (!val->string)
578                         goto out;
579                 p = strchr(val->string, '\n');
580                 if (p)
581                         *p = '\0';
582                 for (p = val->string; *p; p++)
583                         if (!(isdigit(*p) || isspace(*p)))
584                                 break;
585                 /* The following code extracts the string to match or the value
586                  * and sets checkval appropriately
587                  */
588                 if (*p) {
589                         rv = sscanf(val->string, "%32s", valstr);
590                 } else {
591                         rv = sscanf(val->string, "%llu", &val->value);
592                         checkval = true;
593                 }
594                 if (!rv)
595                         goto out;
596         }
597
598         for (i = 0; tbl[i].string; i++) {
599                 /* Check for exact match */
600                 if (checkval) {
601                         if (val->value == tbl[i].value)
602                                 ret = &tbl[i];
603                 } else {
604                         if (!strcmp(valstr, "default") &&
605                             (tbl[i].flags & BOND_VALFLAG_DEFAULT))
606                                 ret = &tbl[i];
607
608                         if (!strcmp(valstr, tbl[i].string))
609                                 ret = &tbl[i];
610                 }
611                 /* Found an exact match */
612                 if (ret)
613                         goto out;
614         }
615         /* Possible range match */
616         if (checkval && bond_opt_check_range(opt, val->value))
617                 ret = val;
618 out:
619         return ret;
620 }
621
622 /* Check opt's dependencies against bond mode and currently set options */
623 static int bond_opt_check_deps(struct bonding *bond,
624                                const struct bond_option *opt)
625 {
626         struct bond_params *params = &bond->params;
627
628         if (test_bit(params->mode, &opt->unsuppmodes))
629                 return -EACCES;
630         if ((opt->flags & BOND_OPTFLAG_NOSLAVES) && bond_has_slaves(bond))
631                 return -ENOTEMPTY;
632         if ((opt->flags & BOND_OPTFLAG_IFDOWN) && (bond->dev->flags & IFF_UP))
633                 return -EBUSY;
634
635         return 0;
636 }
637
638 static void bond_opt_dep_print(struct bonding *bond,
639                                const struct bond_option *opt)
640 {
641         const struct bond_opt_value *modeval;
642         struct bond_params *params;
643
644         params = &bond->params;
645         modeval = bond_opt_get_val(BOND_OPT_MODE, params->mode);
646         if (test_bit(params->mode, &opt->unsuppmodes))
647                 netdev_err(bond->dev, "option %s: mode dependency failed, not supported in mode %s(%llu)\n",
648                            opt->name, modeval->string, modeval->value);
649 }
650
651 static void bond_opt_error_interpret(struct bonding *bond,
652                                      const struct bond_option *opt,
653                                      int error, const struct bond_opt_value *val)
654 {
655         const struct bond_opt_value *minval, *maxval;
656         char *p;
657
658         switch (error) {
659         case -EINVAL:
660                 if (val) {
661                         if (val->string) {
662                                 /* sometimes RAWVAL opts may have new lines */
663                                 p = strchr(val->string, '\n');
664                                 if (p)
665                                         *p = '\0';
666                                 netdev_err(bond->dev, "option %s: invalid value (%s)\n",
667                                            opt->name, val->string);
668                         } else {
669                                 netdev_err(bond->dev, "option %s: invalid value (%llu)\n",
670                                            opt->name, val->value);
671                         }
672                 }
673                 minval = bond_opt_get_flags(opt, BOND_VALFLAG_MIN);
674                 maxval = bond_opt_get_flags(opt, BOND_VALFLAG_MAX);
675                 if (!maxval)
676                         break;
677                 netdev_err(bond->dev, "option %s: allowed values %llu - %llu\n",
678                            opt->name, minval ? minval->value : 0, maxval->value);
679                 break;
680         case -EACCES:
681                 bond_opt_dep_print(bond, opt);
682                 break;
683         case -ENOTEMPTY:
684                 netdev_err(bond->dev, "option %s: unable to set because the bond device has slaves\n",
685                            opt->name);
686                 break;
687         case -EBUSY:
688                 netdev_err(bond->dev, "option %s: unable to set because the bond device is up\n",
689                            opt->name);
690                 break;
691         case -ENODEV:
692                 if (val && val->string) {
693                         p = strchr(val->string, '\n');
694                         if (p)
695                                 *p = '\0';
696                         netdev_err(bond->dev, "option %s: interface %s does not exist!\n",
697                                    opt->name, val->string);
698                 }
699                 break;
700         default:
701                 break;
702         }
703 }
704
705 /**
706  * __bond_opt_set - set a bonding option
707  * @bond: target bond device
708  * @option: option to set
709  * @val: value to set it to
710  *
711  * This function is used to change the bond's option value, it can be
712  * used for both enabling/changing an option and for disabling it. RTNL lock
713  * must be obtained before calling this function.
714  */
715 int __bond_opt_set(struct bonding *bond,
716                    unsigned int option, struct bond_opt_value *val)
717 {
718         const struct bond_opt_value *retval = NULL;
719         const struct bond_option *opt;
720         int ret = -ENOENT;
721
722         ASSERT_RTNL();
723
724         opt = bond_opt_get(option);
725         if (WARN_ON(!val) || WARN_ON(!opt))
726                 goto out;
727         ret = bond_opt_check_deps(bond, opt);
728         if (ret)
729                 goto out;
730         retval = bond_opt_parse(opt, val);
731         if (!retval) {
732                 ret = -EINVAL;
733                 goto out;
734         }
735         ret = opt->set(bond, retval);
736 out:
737         if (ret)
738                 bond_opt_error_interpret(bond, opt, ret, val);
739
740         return ret;
741 }
742 /**
743  * __bond_opt_set_notify - set a bonding option
744  * @bond: target bond device
745  * @option: option to set
746  * @val: value to set it to
747  *
748  * This function is used to change the bond's option value and trigger
749  * a notification to user sapce. It can be used for both enabling/changing
750  * an option and for disabling it. RTNL lock must be obtained before calling
751  * this function.
752  */
753 int __bond_opt_set_notify(struct bonding *bond,
754                           unsigned int option, struct bond_opt_value *val)
755 {
756         int ret;
757
758         ASSERT_RTNL();
759
760         ret = __bond_opt_set(bond, option, val);
761
762         if (!ret && (bond->dev->reg_state == NETREG_REGISTERED))
763                 call_netdevice_notifiers(NETDEV_CHANGEINFODATA, bond->dev);
764
765         return ret;
766 }
767
768 /**
769  * bond_opt_tryset_rtnl - try to acquire rtnl and call __bond_opt_set
770  * @bond: target bond device
771  * @option: option to set
772  * @buf: value to set it to
773  *
774  * This function tries to acquire RTNL without blocking and if successful
775  * calls __bond_opt_set. It is mainly used for sysfs option manipulation.
776  */
777 int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf)
778 {
779         struct bond_opt_value optval;
780         int ret;
781
782         if (!rtnl_trylock())
783                 return restart_syscall();
784         bond_opt_initstr(&optval, buf);
785         ret = __bond_opt_set_notify(bond, option, &optval);
786         rtnl_unlock();
787
788         return ret;
789 }
790
791 /**
792  * bond_opt_get - get a pointer to an option
793  * @option: option for which to return a pointer
794  *
795  * This function checks if option is valid and if so returns a pointer
796  * to its entry in the bond_opts[] option array.
797  */
798 const struct bond_option *bond_opt_get(unsigned int option)
799 {
800         if (!BOND_OPT_VALID(option))
801                 return NULL;
802
803         return &bond_opts[option];
804 }
805
806 static bool bond_set_xfrm_features(struct bonding *bond)
807 {
808         if (!IS_ENABLED(CONFIG_XFRM_OFFLOAD))
809                 return false;
810
811         if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP)
812                 bond->dev->wanted_features |= BOND_XFRM_FEATURES;
813         else
814                 bond->dev->wanted_features &= ~BOND_XFRM_FEATURES;
815
816         return true;
817 }
818
819 static bool bond_set_tls_features(struct bonding *bond)
820 {
821         if (!IS_ENABLED(CONFIG_TLS_DEVICE))
822                 return false;
823
824         if (bond_sk_check(bond))
825                 bond->dev->wanted_features |= BOND_TLS_FEATURES;
826         else
827                 bond->dev->wanted_features &= ~BOND_TLS_FEATURES;
828
829         return true;
830 }
831
832 static int bond_option_mode_set(struct bonding *bond,
833                                 const struct bond_opt_value *newval)
834 {
835         if (!bond_mode_uses_arp(newval->value)) {
836                 if (bond->params.arp_interval) {
837                         netdev_dbg(bond->dev, "%s mode is incompatible with arp monitoring, start mii monitoring\n",
838                                    newval->string);
839                         /* disable arp monitoring */
840                         bond->params.arp_interval = 0;
841                 }
842
843                 if (!bond->params.miimon) {
844                         /* set miimon to default value */
845                         bond->params.miimon = BOND_DEFAULT_MIIMON;
846                         netdev_dbg(bond->dev, "Setting MII monitoring interval to %d\n",
847                                    bond->params.miimon);
848                 }
849         }
850
851         if (newval->value == BOND_MODE_ALB)
852                 bond->params.tlb_dynamic_lb = 1;
853
854         /* don't cache arp_validate between modes */
855         bond->params.arp_validate = BOND_ARP_VALIDATE_NONE;
856         bond->params.mode = newval->value;
857
858         if (bond->dev->reg_state == NETREG_REGISTERED) {
859                 bool update = false;
860
861                 update |= bond_set_xfrm_features(bond);
862                 update |= bond_set_tls_features(bond);
863
864                 if (update)
865                         netdev_update_features(bond->dev);
866         }
867
868         return 0;
869 }
870
871 static int bond_option_active_slave_set(struct bonding *bond,
872                                         const struct bond_opt_value *newval)
873 {
874         char ifname[IFNAMSIZ] = { 0, };
875         struct net_device *slave_dev;
876         int ret = 0;
877
878         sscanf(newval->string, "%15s", ifname); /* IFNAMSIZ */
879         if (!strlen(ifname) || newval->string[0] == '\n') {
880                 slave_dev = NULL;
881         } else {
882                 slave_dev = __dev_get_by_name(dev_net(bond->dev), ifname);
883                 if (!slave_dev)
884                         return -ENODEV;
885         }
886
887         if (slave_dev) {
888                 if (!netif_is_bond_slave(slave_dev)) {
889                         slave_err(bond->dev, slave_dev, "Device is not bonding slave\n");
890                         return -EINVAL;
891                 }
892
893                 if (bond->dev != netdev_master_upper_dev_get(slave_dev)) {
894                         slave_err(bond->dev, slave_dev, "Device is not our slave\n");
895                         return -EINVAL;
896                 }
897         }
898
899         block_netpoll_tx();
900         /* check to see if we are clearing active */
901         if (!slave_dev) {
902                 netdev_dbg(bond->dev, "Clearing current active slave\n");
903                 RCU_INIT_POINTER(bond->curr_active_slave, NULL);
904                 bond_select_active_slave(bond);
905         } else {
906                 struct slave *old_active = rtnl_dereference(bond->curr_active_slave);
907                 struct slave *new_active = bond_slave_get_rtnl(slave_dev);
908
909                 BUG_ON(!new_active);
910
911                 if (new_active == old_active) {
912                         /* do nothing */
913                         slave_dbg(bond->dev, new_active->dev, "is already the current active slave\n");
914                 } else {
915                         if (old_active && (new_active->link == BOND_LINK_UP) &&
916                             bond_slave_is_up(new_active)) {
917                                 slave_dbg(bond->dev, new_active->dev, "Setting as active slave\n");
918                                 bond_change_active_slave(bond, new_active);
919                         } else {
920                                 slave_err(bond->dev, new_active->dev, "Could not set as active slave; either %s is down or the link is down\n",
921                                           new_active->dev->name);
922                                 ret = -EINVAL;
923                         }
924                 }
925         }
926         unblock_netpoll_tx();
927
928         return ret;
929 }
930
931 /* There are two tricky bits here.  First, if MII monitoring is activated, then
932  * we must disable ARP monitoring.  Second, if the timer isn't running, we must
933  * start it.
934  */
935 static int bond_option_miimon_set(struct bonding *bond,
936                                   const struct bond_opt_value *newval)
937 {
938         netdev_dbg(bond->dev, "Setting MII monitoring interval to %llu\n",
939                    newval->value);
940         bond->params.miimon = newval->value;
941         if (bond->params.updelay)
942                 netdev_dbg(bond->dev, "Note: Updating updelay (to %d) since it is a multiple of the miimon value\n",
943                            bond->params.updelay * bond->params.miimon);
944         if (bond->params.downdelay)
945                 netdev_dbg(bond->dev, "Note: Updating downdelay (to %d) since it is a multiple of the miimon value\n",
946                            bond->params.downdelay * bond->params.miimon);
947         if (bond->params.peer_notif_delay)
948                 netdev_dbg(bond->dev, "Note: Updating peer_notif_delay (to %d) since it is a multiple of the miimon value\n",
949                            bond->params.peer_notif_delay * bond->params.miimon);
950         if (newval->value && bond->params.arp_interval) {
951                 netdev_dbg(bond->dev, "MII monitoring cannot be used with ARP monitoring - disabling ARP monitoring...\n");
952                 bond->params.arp_interval = 0;
953                 if (bond->params.arp_validate)
954                         bond->params.arp_validate = BOND_ARP_VALIDATE_NONE;
955         }
956         if (bond->dev->flags & IFF_UP) {
957                 /* If the interface is up, we may need to fire off
958                  * the MII timer. If the interface is down, the
959                  * timer will get fired off when the open function
960                  * is called.
961                  */
962                 if (!newval->value) {
963                         cancel_delayed_work_sync(&bond->mii_work);
964                 } else {
965                         cancel_delayed_work_sync(&bond->arp_work);
966                         queue_delayed_work(bond->wq, &bond->mii_work, 0);
967                 }
968         }
969
970         return 0;
971 }
972
973 /* Set up, down and peer notification delays. These must be multiples
974  * of the MII monitoring value, and are stored internally as the
975  * multiplier. Thus, we must translate to MS for the real world.
976  */
977 static int _bond_option_delay_set(struct bonding *bond,
978                                   const struct bond_opt_value *newval,
979                                   const char *name,
980                                   int *target)
981 {
982         int value = newval->value;
983
984         if (!bond->params.miimon) {
985                 netdev_err(bond->dev, "Unable to set %s as MII monitoring is disabled\n",
986                            name);
987                 return -EPERM;
988         }
989         if ((value % bond->params.miimon) != 0) {
990                 netdev_warn(bond->dev,
991                             "%s (%d) is not a multiple of miimon (%d), value rounded to %d ms\n",
992                             name,
993                             value, bond->params.miimon,
994                             (value / bond->params.miimon) *
995                             bond->params.miimon);
996         }
997         *target = value / bond->params.miimon;
998         netdev_dbg(bond->dev, "Setting %s to %d\n",
999                    name,
1000                    *target * bond->params.miimon);
1001
1002         return 0;
1003 }
1004
1005 static int bond_option_updelay_set(struct bonding *bond,
1006                                    const struct bond_opt_value *newval)
1007 {
1008         return _bond_option_delay_set(bond, newval, "up delay",
1009                                       &bond->params.updelay);
1010 }
1011
1012 static int bond_option_downdelay_set(struct bonding *bond,
1013                                      const struct bond_opt_value *newval)
1014 {
1015         return _bond_option_delay_set(bond, newval, "down delay",
1016                                       &bond->params.downdelay);
1017 }
1018
1019 static int bond_option_peer_notif_delay_set(struct bonding *bond,
1020                                             const struct bond_opt_value *newval)
1021 {
1022         int ret = _bond_option_delay_set(bond, newval,
1023                                          "peer notification delay",
1024                                          &bond->params.peer_notif_delay);
1025         return ret;
1026 }
1027
1028 static int bond_option_use_carrier_set(struct bonding *bond,
1029                                        const struct bond_opt_value *newval)
1030 {
1031         netdev_dbg(bond->dev, "Setting use_carrier to %llu\n",
1032                    newval->value);
1033         bond->params.use_carrier = newval->value;
1034
1035         return 0;
1036 }
1037
1038 /* There are two tricky bits here.  First, if ARP monitoring is activated, then
1039  * we must disable MII monitoring.  Second, if the ARP timer isn't running,
1040  * we must start it.
1041  */
1042 static int bond_option_arp_interval_set(struct bonding *bond,
1043                                         const struct bond_opt_value *newval)
1044 {
1045         netdev_dbg(bond->dev, "Setting ARP monitoring interval to %llu\n",
1046                    newval->value);
1047         bond->params.arp_interval = newval->value;
1048         if (newval->value) {
1049                 if (bond->params.miimon) {
1050                         netdev_dbg(bond->dev, "ARP monitoring cannot be used with MII monitoring. Disabling MII monitoring\n");
1051                         bond->params.miimon = 0;
1052                 }
1053                 if (!bond->params.arp_targets[0])
1054                         netdev_dbg(bond->dev, "ARP monitoring has been set up, but no ARP targets have been specified\n");
1055         }
1056         if (bond->dev->flags & IFF_UP) {
1057                 /* If the interface is up, we may need to fire off
1058                  * the ARP timer.  If the interface is down, the
1059                  * timer will get fired off when the open function
1060                  * is called.
1061                  */
1062                 if (!newval->value) {
1063                         if (bond->params.arp_validate)
1064                                 bond->recv_probe = NULL;
1065                         cancel_delayed_work_sync(&bond->arp_work);
1066                 } else {
1067                         /* arp_validate can be set only in active-backup mode */
1068                         bond->recv_probe = bond_rcv_validate;
1069                         cancel_delayed_work_sync(&bond->mii_work);
1070                         queue_delayed_work(bond->wq, &bond->arp_work, 0);
1071                 }
1072         }
1073
1074         return 0;
1075 }
1076
1077 static void _bond_options_arp_ip_target_set(struct bonding *bond, int slot,
1078                                             __be32 target,
1079                                             unsigned long last_rx)
1080 {
1081         __be32 *targets = bond->params.arp_targets;
1082         struct list_head *iter;
1083         struct slave *slave;
1084
1085         if (slot >= 0 && slot < BOND_MAX_ARP_TARGETS) {
1086                 bond_for_each_slave(bond, slave, iter)
1087                         slave->target_last_arp_rx[slot] = last_rx;
1088                 targets[slot] = target;
1089         }
1090 }
1091
1092 static int _bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)
1093 {
1094         __be32 *targets = bond->params.arp_targets;
1095         int ind;
1096
1097         if (!bond_is_ip_target_ok(target)) {
1098                 netdev_err(bond->dev, "invalid ARP target %pI4 specified for addition\n",
1099                            &target);
1100                 return -EINVAL;
1101         }
1102
1103         if (bond_get_targets_ip(targets, target) != -1) { /* dup */
1104                 netdev_err(bond->dev, "ARP target %pI4 is already present\n",
1105                            &target);
1106                 return -EINVAL;
1107         }
1108
1109         ind = bond_get_targets_ip(targets, 0); /* first free slot */
1110         if (ind == -1) {
1111                 netdev_err(bond->dev, "ARP target table is full!\n");
1112                 return -EINVAL;
1113         }
1114
1115         netdev_dbg(bond->dev, "Adding ARP target %pI4\n", &target);
1116
1117         _bond_options_arp_ip_target_set(bond, ind, target, jiffies);
1118
1119         return 0;
1120 }
1121
1122 static int bond_option_arp_ip_target_add(struct bonding *bond, __be32 target)
1123 {
1124         return _bond_option_arp_ip_target_add(bond, target);
1125 }
1126
1127 static int bond_option_arp_ip_target_rem(struct bonding *bond, __be32 target)
1128 {
1129         __be32 *targets = bond->params.arp_targets;
1130         struct list_head *iter;
1131         struct slave *slave;
1132         unsigned long *targets_rx;
1133         int ind, i;
1134
1135         if (!bond_is_ip_target_ok(target)) {
1136                 netdev_err(bond->dev, "invalid ARP target %pI4 specified for removal\n",
1137                            &target);
1138                 return -EINVAL;
1139         }
1140
1141         ind = bond_get_targets_ip(targets, target);
1142         if (ind == -1) {
1143                 netdev_err(bond->dev, "unable to remove nonexistent ARP target %pI4\n",
1144                            &target);
1145                 return -EINVAL;
1146         }
1147
1148         if (ind == 0 && !targets[1] && bond->params.arp_interval)
1149                 netdev_warn(bond->dev, "Removing last arp target with arp_interval on\n");
1150
1151         netdev_dbg(bond->dev, "Removing ARP target %pI4\n", &target);
1152
1153         bond_for_each_slave(bond, slave, iter) {
1154                 targets_rx = slave->target_last_arp_rx;
1155                 for (i = ind; (i < BOND_MAX_ARP_TARGETS-1) && targets[i+1]; i++)
1156                         targets_rx[i] = targets_rx[i+1];
1157                 targets_rx[i] = 0;
1158         }
1159         for (i = ind; (i < BOND_MAX_ARP_TARGETS-1) && targets[i+1]; i++)
1160                 targets[i] = targets[i+1];
1161         targets[i] = 0;
1162
1163         return 0;
1164 }
1165
1166 void bond_option_arp_ip_targets_clear(struct bonding *bond)
1167 {
1168         int i;
1169
1170         for (i = 0; i < BOND_MAX_ARP_TARGETS; i++)
1171                 _bond_options_arp_ip_target_set(bond, i, 0, 0);
1172 }
1173
1174 static int bond_option_arp_ip_targets_set(struct bonding *bond,
1175                                           const struct bond_opt_value *newval)
1176 {
1177         int ret = -EPERM;
1178         __be32 target;
1179
1180         if (newval->string) {
1181                 if (!in4_pton(newval->string+1, -1, (u8 *)&target, -1, NULL)) {
1182                         netdev_err(bond->dev, "invalid ARP target %pI4 specified\n",
1183                                    &target);
1184                         return ret;
1185                 }
1186                 if (newval->string[0] == '+')
1187                         ret = bond_option_arp_ip_target_add(bond, target);
1188                 else if (newval->string[0] == '-')
1189                         ret = bond_option_arp_ip_target_rem(bond, target);
1190                 else
1191                         netdev_err(bond->dev, "no command found in arp_ip_targets file - use +<addr> or -<addr>\n");
1192         } else {
1193                 target = newval->value;
1194                 ret = bond_option_arp_ip_target_add(bond, target);
1195         }
1196
1197         return ret;
1198 }
1199
1200 #if IS_ENABLED(CONFIG_IPV6)
1201 static void _bond_options_ns_ip6_target_set(struct bonding *bond, int slot,
1202                                             struct in6_addr *target,
1203                                             unsigned long last_rx)
1204 {
1205         struct in6_addr *targets = bond->params.ns_targets;
1206         struct list_head *iter;
1207         struct slave *slave;
1208
1209         if (slot >= 0 && slot < BOND_MAX_NS_TARGETS) {
1210                 bond_for_each_slave(bond, slave, iter)
1211                         slave->target_last_arp_rx[slot] = last_rx;
1212                 targets[slot] = *target;
1213         }
1214 }
1215
1216 void bond_option_ns_ip6_targets_clear(struct bonding *bond)
1217 {
1218         struct in6_addr addr_any = in6addr_any;
1219         int i;
1220
1221         for (i = 0; i < BOND_MAX_NS_TARGETS; i++)
1222                 _bond_options_ns_ip6_target_set(bond, i, &addr_any, 0);
1223 }
1224
1225 static int bond_option_ns_ip6_targets_set(struct bonding *bond,
1226                                           const struct bond_opt_value *newval)
1227 {
1228         struct in6_addr *target = (struct in6_addr *)newval->extra;
1229         struct in6_addr *targets = bond->params.ns_targets;
1230         struct in6_addr addr_any = in6addr_any;
1231         int index;
1232
1233         if (!bond_is_ip6_target_ok(target)) {
1234                 netdev_err(bond->dev, "invalid NS target %pI6c specified for addition\n",
1235                            target);
1236                 return -EINVAL;
1237         }
1238
1239         if (bond_get_targets_ip6(targets, target) != -1) { /* dup */
1240                 netdev_err(bond->dev, "NS target %pI6c is already present\n",
1241                            target);
1242                 return -EINVAL;
1243         }
1244
1245         index = bond_get_targets_ip6(targets, &addr_any); /* first free slot */
1246         if (index == -1) {
1247                 netdev_err(bond->dev, "NS target table is full!\n");
1248                 return -EINVAL;
1249         }
1250
1251         netdev_dbg(bond->dev, "Adding NS target %pI6c\n", target);
1252
1253         _bond_options_ns_ip6_target_set(bond, index, target, jiffies);
1254
1255         return 0;
1256 }
1257 #endif
1258
1259 static int bond_option_arp_validate_set(struct bonding *bond,
1260                                         const struct bond_opt_value *newval)
1261 {
1262         netdev_dbg(bond->dev, "Setting arp_validate to %s (%llu)\n",
1263                    newval->string, newval->value);
1264         bond->params.arp_validate = newval->value;
1265
1266         return 0;
1267 }
1268
1269 static int bond_option_arp_all_targets_set(struct bonding *bond,
1270                                            const struct bond_opt_value *newval)
1271 {
1272         netdev_dbg(bond->dev, "Setting arp_all_targets to %s (%llu)\n",
1273                    newval->string, newval->value);
1274         bond->params.arp_all_targets = newval->value;
1275
1276         return 0;
1277 }
1278
1279 static int bond_option_missed_max_set(struct bonding *bond,
1280                                       const struct bond_opt_value *newval)
1281 {
1282         netdev_dbg(bond->dev, "Setting missed max to %s (%llu)\n",
1283                    newval->string, newval->value);
1284         bond->params.missed_max = newval->value;
1285
1286         return 0;
1287 }
1288
1289 static int bond_option_primary_set(struct bonding *bond,
1290                                    const struct bond_opt_value *newval)
1291 {
1292         char *p, *primary = newval->string;
1293         struct list_head *iter;
1294         struct slave *slave;
1295
1296         block_netpoll_tx();
1297
1298         p = strchr(primary, '\n');
1299         if (p)
1300                 *p = '\0';
1301         /* check to see if we are clearing primary */
1302         if (!strlen(primary)) {
1303                 netdev_dbg(bond->dev, "Setting primary slave to None\n");
1304                 RCU_INIT_POINTER(bond->primary_slave, NULL);
1305                 memset(bond->params.primary, 0, sizeof(bond->params.primary));
1306                 bond_select_active_slave(bond);
1307                 goto out;
1308         }
1309
1310         bond_for_each_slave(bond, slave, iter) {
1311                 if (strncmp(slave->dev->name, primary, IFNAMSIZ) == 0) {
1312                         slave_dbg(bond->dev, slave->dev, "Setting as primary slave\n");
1313                         rcu_assign_pointer(bond->primary_slave, slave);
1314                         strcpy(bond->params.primary, slave->dev->name);
1315                         bond->force_primary = true;
1316                         bond_select_active_slave(bond);
1317                         goto out;
1318                 }
1319         }
1320
1321         if (rtnl_dereference(bond->primary_slave)) {
1322                 netdev_dbg(bond->dev, "Setting primary slave to None\n");
1323                 RCU_INIT_POINTER(bond->primary_slave, NULL);
1324                 bond_select_active_slave(bond);
1325         }
1326         strscpy_pad(bond->params.primary, primary, IFNAMSIZ);
1327
1328         netdev_dbg(bond->dev, "Recording %s as primary, but it has not been enslaved yet\n",
1329                    primary);
1330
1331 out:
1332         unblock_netpoll_tx();
1333
1334         return 0;
1335 }
1336
1337 static int bond_option_primary_reselect_set(struct bonding *bond,
1338                                             const struct bond_opt_value *newval)
1339 {
1340         netdev_dbg(bond->dev, "Setting primary_reselect to %s (%llu)\n",
1341                    newval->string, newval->value);
1342         bond->params.primary_reselect = newval->value;
1343
1344         block_netpoll_tx();
1345         bond_select_active_slave(bond);
1346         unblock_netpoll_tx();
1347
1348         return 0;
1349 }
1350
1351 static int bond_option_fail_over_mac_set(struct bonding *bond,
1352                                          const struct bond_opt_value *newval)
1353 {
1354         netdev_dbg(bond->dev, "Setting fail_over_mac to %s (%llu)\n",
1355                    newval->string, newval->value);
1356         bond->params.fail_over_mac = newval->value;
1357
1358         return 0;
1359 }
1360
1361 static int bond_option_xmit_hash_policy_set(struct bonding *bond,
1362                                             const struct bond_opt_value *newval)
1363 {
1364         netdev_dbg(bond->dev, "Setting xmit hash policy to %s (%llu)\n",
1365                    newval->string, newval->value);
1366         bond->params.xmit_policy = newval->value;
1367
1368         if (bond->dev->reg_state == NETREG_REGISTERED)
1369                 if (bond_set_tls_features(bond))
1370                         netdev_update_features(bond->dev);
1371
1372         return 0;
1373 }
1374
1375 static int bond_option_resend_igmp_set(struct bonding *bond,
1376                                        const struct bond_opt_value *newval)
1377 {
1378         netdev_dbg(bond->dev, "Setting resend_igmp to %llu\n",
1379                    newval->value);
1380         bond->params.resend_igmp = newval->value;
1381
1382         return 0;
1383 }
1384
1385 static int bond_option_num_peer_notif_set(struct bonding *bond,
1386                                    const struct bond_opt_value *newval)
1387 {
1388         bond->params.num_peer_notif = newval->value;
1389
1390         return 0;
1391 }
1392
1393 static int bond_option_all_slaves_active_set(struct bonding *bond,
1394                                              const struct bond_opt_value *newval)
1395 {
1396         struct list_head *iter;
1397         struct slave *slave;
1398
1399         if (newval->value == bond->params.all_slaves_active)
1400                 return 0;
1401         bond->params.all_slaves_active = newval->value;
1402         bond_for_each_slave(bond, slave, iter) {
1403                 if (!bond_is_active_slave(slave)) {
1404                         if (newval->value)
1405                                 slave->inactive = 0;
1406                         else
1407                                 slave->inactive = 1;
1408                 }
1409         }
1410
1411         return 0;
1412 }
1413
1414 static int bond_option_min_links_set(struct bonding *bond,
1415                                      const struct bond_opt_value *newval)
1416 {
1417         netdev_dbg(bond->dev, "Setting min links value to %llu\n",
1418                    newval->value);
1419         bond->params.min_links = newval->value;
1420         bond_set_carrier(bond);
1421
1422         return 0;
1423 }
1424
1425 static int bond_option_lp_interval_set(struct bonding *bond,
1426                                        const struct bond_opt_value *newval)
1427 {
1428         bond->params.lp_interval = newval->value;
1429
1430         return 0;
1431 }
1432
1433 static int bond_option_pps_set(struct bonding *bond,
1434                                const struct bond_opt_value *newval)
1435 {
1436         netdev_dbg(bond->dev, "Setting packets per slave to %llu\n",
1437                    newval->value);
1438         bond->params.packets_per_slave = newval->value;
1439         if (newval->value > 0) {
1440                 bond->params.reciprocal_packets_per_slave =
1441                         reciprocal_value(newval->value);
1442         } else {
1443                 /* reciprocal_packets_per_slave is unused if
1444                  * packets_per_slave is 0 or 1, just initialize it
1445                  */
1446                 bond->params.reciprocal_packets_per_slave =
1447                         (struct reciprocal_value) { 0 };
1448         }
1449
1450         return 0;
1451 }
1452
1453 static int bond_option_lacp_active_set(struct bonding *bond,
1454                                        const struct bond_opt_value *newval)
1455 {
1456         netdev_dbg(bond->dev, "Setting LACP active to %s (%llu)\n",
1457                    newval->string, newval->value);
1458         bond->params.lacp_active = newval->value;
1459
1460         return 0;
1461 }
1462
1463 static int bond_option_lacp_rate_set(struct bonding *bond,
1464                                      const struct bond_opt_value *newval)
1465 {
1466         netdev_dbg(bond->dev, "Setting LACP rate to %s (%llu)\n",
1467                    newval->string, newval->value);
1468         bond->params.lacp_fast = newval->value;
1469         bond_3ad_update_lacp_rate(bond);
1470
1471         return 0;
1472 }
1473
1474 static int bond_option_ad_select_set(struct bonding *bond,
1475                                      const struct bond_opt_value *newval)
1476 {
1477         netdev_dbg(bond->dev, "Setting ad_select to %s (%llu)\n",
1478                    newval->string, newval->value);
1479         bond->params.ad_select = newval->value;
1480
1481         return 0;
1482 }
1483
1484 static int bond_option_queue_id_set(struct bonding *bond,
1485                                     const struct bond_opt_value *newval)
1486 {
1487         struct slave *slave, *update_slave;
1488         struct net_device *sdev;
1489         struct list_head *iter;
1490         char *delim;
1491         int ret = 0;
1492         u16 qid;
1493
1494         /* delim will point to queue id if successful */
1495         delim = strchr(newval->string, ':');
1496         if (!delim)
1497                 goto err_no_cmd;
1498
1499         /* Terminate string that points to device name and bump it
1500          * up one, so we can read the queue id there.
1501          */
1502         *delim = '\0';
1503         if (sscanf(++delim, "%hd\n", &qid) != 1)
1504                 goto err_no_cmd;
1505
1506         /* Check buffer length, valid ifname and queue id */
1507         if (!dev_valid_name(newval->string) ||
1508             qid > bond->dev->real_num_tx_queues)
1509                 goto err_no_cmd;
1510
1511         /* Get the pointer to that interface if it exists */
1512         sdev = __dev_get_by_name(dev_net(bond->dev), newval->string);
1513         if (!sdev)
1514                 goto err_no_cmd;
1515
1516         /* Search for thes slave and check for duplicate qids */
1517         update_slave = NULL;
1518         bond_for_each_slave(bond, slave, iter) {
1519                 if (sdev == slave->dev)
1520                         /* We don't need to check the matching
1521                          * slave for dups, since we're overwriting it
1522                          */
1523                         update_slave = slave;
1524                 else if (qid && qid == slave->queue_id) {
1525                         goto err_no_cmd;
1526                 }
1527         }
1528
1529         if (!update_slave)
1530                 goto err_no_cmd;
1531
1532         /* Actually set the qids for the slave */
1533         update_slave->queue_id = qid;
1534
1535 out:
1536         return ret;
1537
1538 err_no_cmd:
1539         netdev_dbg(bond->dev, "invalid input for queue_id set\n");
1540         ret = -EPERM;
1541         goto out;
1542
1543 }
1544
1545 static int bond_option_slaves_set(struct bonding *bond,
1546                                   const struct bond_opt_value *newval)
1547 {
1548         char command[IFNAMSIZ + 1] = { 0, };
1549         struct net_device *dev;
1550         char *ifname;
1551         int ret;
1552
1553         sscanf(newval->string, "%16s", command); /* IFNAMSIZ*/
1554         ifname = command + 1;
1555         if ((strlen(command) <= 1) ||
1556             (command[0] != '+' && command[0] != '-') ||
1557             !dev_valid_name(ifname))
1558                 goto err_no_cmd;
1559
1560         dev = __dev_get_by_name(dev_net(bond->dev), ifname);
1561         if (!dev) {
1562                 netdev_dbg(bond->dev, "interface %s does not exist!\n",
1563                            ifname);
1564                 ret = -ENODEV;
1565                 goto out;
1566         }
1567
1568         switch (command[0]) {
1569         case '+':
1570                 slave_dbg(bond->dev, dev, "Enslaving interface\n");
1571                 ret = bond_enslave(bond->dev, dev, NULL);
1572                 break;
1573
1574         case '-':
1575                 slave_dbg(bond->dev, dev, "Releasing interface\n");
1576                 ret = bond_release(bond->dev, dev);
1577                 break;
1578
1579         default:
1580                 /* should not run here. */
1581                 goto err_no_cmd;
1582         }
1583
1584 out:
1585         return ret;
1586
1587 err_no_cmd:
1588         netdev_err(bond->dev, "no command found in slaves file - use +ifname or -ifname\n");
1589         ret = -EPERM;
1590         goto out;
1591 }
1592
1593 static int bond_option_tlb_dynamic_lb_set(struct bonding *bond,
1594                                           const struct bond_opt_value *newval)
1595 {
1596         netdev_dbg(bond->dev, "Setting dynamic-lb to %s (%llu)\n",
1597                    newval->string, newval->value);
1598         bond->params.tlb_dynamic_lb = newval->value;
1599
1600         return 0;
1601 }
1602
1603 static int bond_option_ad_actor_sys_prio_set(struct bonding *bond,
1604                                              const struct bond_opt_value *newval)
1605 {
1606         netdev_dbg(bond->dev, "Setting ad_actor_sys_prio to %llu\n",
1607                    newval->value);
1608
1609         bond->params.ad_actor_sys_prio = newval->value;
1610         bond_3ad_update_ad_actor_settings(bond);
1611
1612         return 0;
1613 }
1614
1615 static int bond_option_ad_actor_system_set(struct bonding *bond,
1616                                            const struct bond_opt_value *newval)
1617 {
1618         u8 macaddr[ETH_ALEN];
1619         u8 *mac;
1620
1621         if (newval->string) {
1622                 if (!mac_pton(newval->string, macaddr))
1623                         goto err;
1624                 mac = macaddr;
1625         } else {
1626                 mac = (u8 *)&newval->value;
1627         }
1628
1629         if (is_multicast_ether_addr(mac))
1630                 goto err;
1631
1632         netdev_dbg(bond->dev, "Setting ad_actor_system to %pM\n", mac);
1633         ether_addr_copy(bond->params.ad_actor_system, mac);
1634         bond_3ad_update_ad_actor_settings(bond);
1635
1636         return 0;
1637
1638 err:
1639         netdev_err(bond->dev, "Invalid ad_actor_system MAC address.\n");
1640         return -EINVAL;
1641 }
1642
1643 static int bond_option_ad_user_port_key_set(struct bonding *bond,
1644                                             const struct bond_opt_value *newval)
1645 {
1646         netdev_dbg(bond->dev, "Setting ad_user_port_key to %llu\n",
1647                    newval->value);
1648
1649         bond->params.ad_user_port_key = newval->value;
1650         return 0;
1651 }