Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From e90146eb46c7bbfe1d871b90d33cbf6a1b54c78b Mon Sep 17 00:00:00 2001
- From: Lukas Nykryn <lnykryn@redhat.com>
- Date: Tue, 24 Jun 2014 10:43:46 +0200
- Subject: [PATCH] networkd: add possibility to specify mode for bonding
- ---
- man/systemd.netdev.xml | 16 ++++++++++++++
- src/network/networkd-netdev-gperf.gperf | 1 +
- src/network/networkd-netdev.c | 37 +++++++++++++++++++++++++++------
- src/network/networkd.h | 31 +++++++++++++++++++++++++++
- 4 files changed, 79 insertions(+), 6 deletions(-)
- diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
- index c17ae9e..409447b 100644
- --- a/man/systemd.netdev.xml
- +++ b/man/systemd.netdev.xml
- @@ -161,7 +161,23 @@
- </listitem>
- </varlistentry>
- </variablelist>
- + <para>The <literal>[Bond]</literal> section only applies for netdevs of kind <literal>bond</literal>,
- + and accepts the following key:</para>
- + <variablelist class='network-directives'>
- + <varlistentry>
- + <term><varname>Mode=</varname></term>
- + <listitem>
- + <para>Allows you to specify the bonding policy.
- + The supported options are
- + <literal>balance-rr</literal>, <literal>active-backup</literal>,
- + <literal>balance-xor</literal>, <literal>broadcast</literal>,
- + <literal>802.3ad</literal>, <literal>balance-tlb</literal>,
- + and <literal>balance-alb</literal>.
- + </para>
- + </listitem>
- + </varlistentry>
- + </variablelist>
- <para>The <literal>[MACVLAN]</literal> section only applies for netdevs of kind
- <literal>macvlan</literal>, and accepts the following key:</para>
- diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
- index 9125e1d..d14311f 100644
- --- a/src/network/networkd-netdev-gperf.gperf
- +++ b/src/network/networkd-netdev-gperf.gperf
- @@ -38,3 +38,4 @@ VXLAN.Group, config_parse_tunnel_address, 0,
- VXLAN.TOS, config_parse_unsigned, 0, offsetof(NetDev, tos)
- VXLAN.TTL, config_parse_unsigned, 0, offsetof(NetDev, ttl)
- VXLAN.MacLearning, config_parse_bool, 0, offsetof(NetDev, learning)
- +Bond.Mode, config_parse_bond_mode, 0, offsetof(NetDev, bond_mode)
- diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
- index dcf7596..48e6f82 100644
- --- a/src/network/networkd-netdev.c
- +++ b/src/network/networkd-netdev.c
- @@ -28,6 +28,7 @@
- #include "conf-parser.h"
- #include "list.h"
- #include "siphash24.h"
- +#include "missing.h"
- #define VLANID_MAX 4094
- @@ -57,6 +58,19 @@ static const char* const macvlan_mode_table[_NETDEV_MACVLAN_MODE_MAX] = {
- DEFINE_STRING_TABLE_LOOKUP(macvlan_mode, MacVlanMode);
- DEFINE_CONFIG_PARSE_ENUM(config_parse_macvlan_mode, macvlan_mode, MacVlanMode, "Failed to parse macvlan mode");
- +static const char* const bond_mode_table[_NETDEV_BOND_MODE_MAX] = {
- + [NETDEV_BOND_MODE_BALANCE_RR] = "balance-rr",
- + [NETDEV_BOND_MODE_ACTIVE_BACKUP] = "active-backup",
- + [NETDEV_BOND_MODE_BALANCE_XOR] = "balance-xor",
- + [NETDEV_BOND_MODE_BROADCAST] = "broadcast",
- + [NETDEV_BOND_MODE_8023AD] = "802.3ad",
- + [NETDEV_BOND_MODE_BALANCE_TLB] = "balance-tlb",
- + [NETDEV_BOND_MODE_BALANCE_ALB] = "balance-alb",
- +};
- +
- +DEFINE_STRING_TABLE_LOOKUP(bond_mode, BondMode);
- +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_mode, bond_mode, BondMode, "Failed to parse bond mode");
- +
- static void netdev_cancel_callbacks(NetDev *netdev) {
- _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
- netdev_enslave_callback *callback;
- @@ -359,11 +373,22 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
- }
- if (netdev->macvlan_mode != _NETDEV_MACVLAN_MODE_INVALID) {
- - r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
- - if (r < 0) {
- - log_error_netdev(netdev,
- - "Could not append IFLA_MACVLAN_MODE attribute: %s",
- - strerror(-r));
- + r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_MACVLAN_MODE attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- +
- + if (netdev->bond_mode != _NETDEV_BOND_MODE_INVALID) {
- + r = sd_rtnl_message_append_u8(req, IFLA_BOND_MODE, netdev->bond_mode);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_MODE attribute: %s",
- + strerror(-r));
- return r;
- }
- }
- @@ -619,7 +644,7 @@ static int netdev_load_one(Manager *manager, const char *filename) {
- netdev->learning = true;
- r = config_parse(NULL, filename, file,
- - "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0",
- + "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0Bond\0",
- config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
- false, false, netdev);
- if (r < 0) {
- diff --git a/src/network/networkd.h b/src/network/networkd.h
- index b7b1d90..5ad210a 100644
- --- a/src/network/networkd.h
- +++ b/src/network/networkd.h
- @@ -40,6 +40,18 @@
- #include "condition-util.h"
- #include "socket-util.h"
- +/* FIXME: collision with net/if.h
- +#include <linux/if_bonding.h>
- +*/
- +#define BOND_MODE_ROUNDROBIN 0
- +#define BOND_MODE_ACTIVEBACKUP 1
- +#define BOND_MODE_XOR 2
- +#define BOND_MODE_BROADCAST 3
- +#define BOND_MODE_8023AD 4
- +#define BOND_MODE_TLB 5
- +#define BOND_MODE_ALB 6 /* TLB + RLB (receive load balancing) */
- +
- +
- #define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
- #define VXLAN_VID_MAX (1u << 24) - 1
- @@ -69,6 +81,18 @@ typedef enum MacVlanMode {
- _NETDEV_MACVLAN_MODE_INVALID = -1
- } MacVlanMode;
- +typedef enum BondMode {
- + NETDEV_BOND_MODE_BALANCE_RR = BOND_MODE_ROUNDROBIN,
- + NETDEV_BOND_MODE_ACTIVE_BACKUP = BOND_MODE_ACTIVEBACKUP,
- + NETDEV_BOND_MODE_BALANCE_XOR = BOND_MODE_XOR,
- + NETDEV_BOND_MODE_BROADCAST = BOND_MODE_BROADCAST,
- + NETDEV_BOND_MODE_8023AD = BOND_MODE_8023AD,
- + NETDEV_BOND_MODE_BALANCE_TLB = BOND_MODE_TLB,
- + NETDEV_BOND_MODE_BALANCE_ALB = BOND_MODE_ALB,
- + _NETDEV_BOND_MODE_MAX,
- + _NETDEV_BOND_MODE_INVALID = -1
- +} BondMode;
- +
- typedef enum NetDevKind {
- NETDEV_KIND_BRIDGE,
- NETDEV_KIND_BOND,
- @@ -117,6 +141,8 @@ struct NetDev {
- uint64_t vxlanid;
- int32_t macvlan_mode;
- + int8_t bond_mode;
- +
- int ifindex;
- NetDevState state;
- @@ -349,10 +375,15 @@ NetDevKind netdev_kind_from_string(const char *d) _pure_;
- const char *macvlan_mode_to_string(MacVlanMode d) _const_;
- MacVlanMode macvlan_mode_from_string(const char *d) _pure_;
- +const char *bond_mode_to_string(BondMode d) _const_;
- +BondMode bond_mode_from_string(const char *d) _pure_;
- +
- int config_parse_netdev_kind(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
- int config_parse_macvlan_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
- +int config_parse_bond_mode(const char *unit, const char *filename, unsigned line, const char *section, unsigned section_line, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
- +
- /* gperf */
- const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
- --
- 1.8.3.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement