linux/include/net/bond_options.h
<<
>>
Prefs
   1/*
   2 * drivers/net/bond/bond_options.h - bonding options
   3 * Copyright (c) 2013 Nikolay Aleksandrov <nikolay@redhat.com>
   4 *
   5 * This program is free software; you can redistribute it and/or modify
   6 * it under the terms of the GNU General Public License as published by
   7 * the Free Software Foundation; either version 2 of the License, or
   8 * (at your option) any later version.
   9 */
  10
  11#ifndef _NET_BOND_OPTIONS_H
  12#define _NET_BOND_OPTIONS_H
  13
  14#define BOND_OPT_MAX_NAMELEN 32
  15#define BOND_OPT_VALID(opt) ((opt) < BOND_OPT_LAST)
  16#define BOND_MODE_ALL_EX(x) (~(x))
  17
  18/* Option flags:
  19 * BOND_OPTFLAG_NOSLAVES - check if the bond device is empty before setting
  20 * BOND_OPTFLAG_IFDOWN - check if the bond device is down before setting
  21 * BOND_OPTFLAG_RAWVAL - the option parses the value itself
  22 */
  23enum {
  24        BOND_OPTFLAG_NOSLAVES   = BIT(0),
  25        BOND_OPTFLAG_IFDOWN     = BIT(1),
  26        BOND_OPTFLAG_RAWVAL     = BIT(2)
  27};
  28
  29/* Value type flags:
  30 * BOND_VALFLAG_DEFAULT - mark the value as default
  31 * BOND_VALFLAG_(MIN|MAX) - mark the value as min/max
  32 */
  33enum {
  34        BOND_VALFLAG_DEFAULT    = BIT(0),
  35        BOND_VALFLAG_MIN        = BIT(1),
  36        BOND_VALFLAG_MAX        = BIT(2)
  37};
  38
  39/* Option IDs, their bit positions correspond to their IDs */
  40enum {
  41        BOND_OPT_MODE,
  42        BOND_OPT_PACKETS_PER_SLAVE,
  43        BOND_OPT_XMIT_HASH,
  44        BOND_OPT_ARP_VALIDATE,
  45        BOND_OPT_ARP_ALL_TARGETS,
  46        BOND_OPT_FAIL_OVER_MAC,
  47        BOND_OPT_ARP_INTERVAL,
  48        BOND_OPT_ARP_TARGETS,
  49        BOND_OPT_DOWNDELAY,
  50        BOND_OPT_UPDELAY,
  51        BOND_OPT_LACP_RATE,
  52        BOND_OPT_MINLINKS,
  53        BOND_OPT_AD_SELECT,
  54        BOND_OPT_NUM_PEER_NOTIF,
  55        BOND_OPT_MIIMON,
  56        BOND_OPT_PRIMARY,
  57        BOND_OPT_PRIMARY_RESELECT,
  58        BOND_OPT_USE_CARRIER,
  59        BOND_OPT_ACTIVE_SLAVE,
  60        BOND_OPT_QUEUE_ID,
  61        BOND_OPT_ALL_SLAVES_ACTIVE,
  62        BOND_OPT_RESEND_IGMP,
  63        BOND_OPT_LP_INTERVAL,
  64        BOND_OPT_SLAVES,
  65        BOND_OPT_TLB_DYNAMIC_LB,
  66        BOND_OPT_AD_ACTOR_SYS_PRIO,
  67        BOND_OPT_AD_ACTOR_SYSTEM,
  68        BOND_OPT_AD_USER_PORT_KEY,
  69        BOND_OPT_NUM_PEER_NOTIF_ALIAS,
  70        BOND_OPT_LAST
  71};
  72
  73/* This structure is used for storing option values and for passing option
  74 * values when changing an option. The logic when used as an arg is as follows:
  75 * - if string != NULL -> parse it, if the opt is RAW type then return it, else
  76 *   return the parse result
  77 * - if string == NULL -> parse value
  78 */
  79struct bond_opt_value {
  80        char *string;
  81        u64 value;
  82        u32 flags;
  83};
  84
  85struct bonding;
  86
  87struct bond_option {
  88        int id;
  89        const char *name;
  90        const char *desc;
  91        u32 flags;
  92
  93        /* unsuppmodes is used to denote modes in which the option isn't
  94         * supported.
  95         */
  96        unsigned long unsuppmodes;
  97        /* supported values which this option can have, can be a subset of
  98         * BOND_OPTVAL_RANGE's value range
  99         */
 100        const struct bond_opt_value *values;
 101
 102        int (*set)(struct bonding *bond, const struct bond_opt_value *val);
 103};
 104
 105int __bond_opt_set(struct bonding *bond, unsigned int option,
 106                   struct bond_opt_value *val);
 107int __bond_opt_set_notify(struct bonding *bond, unsigned int option,
 108                          struct bond_opt_value *val);
 109int bond_opt_tryset_rtnl(struct bonding *bond, unsigned int option, char *buf);
 110
 111const struct bond_opt_value *bond_opt_parse(const struct bond_option *opt,
 112                                            struct bond_opt_value *val);
 113const struct bond_option *bond_opt_get(unsigned int option);
 114const struct bond_option *bond_opt_get_by_name(const char *name);
 115const struct bond_opt_value *bond_opt_get_val(unsigned int option, u64 val);
 116
 117/* This helper is used to initialize a bond_opt_value structure for parameter
 118 * passing. There should be either a valid string or value, but not both.
 119 * When value is ULLONG_MAX then string will be used.
 120 */
 121static inline void __bond_opt_init(struct bond_opt_value *optval,
 122                                   char *string, u64 value)
 123{
 124        memset(optval, 0, sizeof(*optval));
 125        optval->value = ULLONG_MAX;
 126        if (value == ULLONG_MAX)
 127                optval->string = string;
 128        else
 129                optval->value = value;
 130}
 131#define bond_opt_initval(optval, value) __bond_opt_init(optval, NULL, value)
 132#define bond_opt_initstr(optval, str) __bond_opt_init(optval, str, ULLONG_MAX)
 133
 134void bond_option_arp_ip_targets_clear(struct bonding *bond);
 135
 136#endif /* _NET_BOND_OPTIONS_H */
 137