Advertisement
Guest User

Untitled

a guest
Jun 26th, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.82 KB | None | 0 0
  1. From e90146eb46c7bbfe1d871b90d33cbf6a1b54c78b Mon Sep 17 00:00:00 2001
  2. From: Lukas Nykryn <lnykryn@redhat.com>
  3. Date: Tue, 24 Jun 2014 10:43:46 +0200
  4. Subject: [PATCH] networkd: add possibility to specify mode for bonding
  5.  
  6. ---
  7. man/systemd.netdev.xml | 16 ++++++++++++++
  8. src/network/networkd-netdev-gperf.gperf | 1 +
  9. src/network/networkd-netdev.c | 37 +++++++++++++++++++++++++++------
  10. src/network/networkd.h | 31 +++++++++++++++++++++++++++
  11. 4 files changed, 79 insertions(+), 6 deletions(-)
  12.  
  13. diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
  14. index c17ae9e..409447b 100644
  15. --- a/man/systemd.netdev.xml
  16. +++ b/man/systemd.netdev.xml
  17. @@ -161,7 +161,23 @@
  18. </listitem>
  19. </varlistentry>
  20. </variablelist>
  21. + <para>The <literal>[Bond]</literal> section only applies for netdevs of kind <literal>bond</literal>,
  22. + and accepts the following key:</para>
  23.  
  24. + <variablelist class='network-directives'>
  25. + <varlistentry>
  26. + <term><varname>Mode=</varname></term>
  27. + <listitem>
  28. + <para>Allows you to specify the bonding policy.
  29. + The supported options are
  30. + <literal>balance-rr</literal>, <literal>active-backup</literal>,
  31. + <literal>balance-xor</literal>, <literal>broadcast</literal>,
  32. + <literal>802.3ad</literal>, <literal>balance-tlb</literal>,
  33. + and <literal>balance-alb</literal>.
  34. + </para>
  35. + </listitem>
  36. + </varlistentry>
  37. + </variablelist>
  38. <para>The <literal>[MACVLAN]</literal> section only applies for netdevs of kind
  39. <literal>macvlan</literal>, and accepts the following key:</para>
  40.  
  41. diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
  42. index 9125e1d..d14311f 100644
  43. --- a/src/network/networkd-netdev-gperf.gperf
  44. +++ b/src/network/networkd-netdev-gperf.gperf
  45. @@ -38,3 +38,4 @@ VXLAN.Group, config_parse_tunnel_address, 0,
  46. VXLAN.TOS, config_parse_unsigned, 0, offsetof(NetDev, tos)
  47. VXLAN.TTL, config_parse_unsigned, 0, offsetof(NetDev, ttl)
  48. VXLAN.MacLearning, config_parse_bool, 0, offsetof(NetDev, learning)
  49. +Bond.Mode, config_parse_bond_mode, 0, offsetof(NetDev, bond_mode)
  50. diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
  51. index dcf7596..48e6f82 100644
  52. --- a/src/network/networkd-netdev.c
  53. +++ b/src/network/networkd-netdev.c
  54. @@ -28,6 +28,7 @@
  55. #include "conf-parser.h"
  56. #include "list.h"
  57. #include "siphash24.h"
  58. +#include "missing.h"
  59.  
  60. #define VLANID_MAX 4094
  61.  
  62. @@ -57,6 +58,19 @@ static const char* const macvlan_mode_table[_NETDEV_MACVLAN_MODE_MAX] = {
  63. DEFINE_STRING_TABLE_LOOKUP(macvlan_mode, MacVlanMode);
  64. DEFINE_CONFIG_PARSE_ENUM(config_parse_macvlan_mode, macvlan_mode, MacVlanMode, "Failed to parse macvlan mode");
  65.  
  66. +static const char* const bond_mode_table[_NETDEV_BOND_MODE_MAX] = {
  67. + [NETDEV_BOND_MODE_BALANCE_RR] = "balance-rr",
  68. + [NETDEV_BOND_MODE_ACTIVE_BACKUP] = "active-backup",
  69. + [NETDEV_BOND_MODE_BALANCE_XOR] = "balance-xor",
  70. + [NETDEV_BOND_MODE_BROADCAST] = "broadcast",
  71. + [NETDEV_BOND_MODE_8023AD] = "802.3ad",
  72. + [NETDEV_BOND_MODE_BALANCE_TLB] = "balance-tlb",
  73. + [NETDEV_BOND_MODE_BALANCE_ALB] = "balance-alb",
  74. +};
  75. +
  76. +DEFINE_STRING_TABLE_LOOKUP(bond_mode, BondMode);
  77. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_mode, bond_mode, BondMode, "Failed to parse bond mode");
  78. +
  79. static void netdev_cancel_callbacks(NetDev *netdev) {
  80. _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
  81. netdev_enslave_callback *callback;
  82. @@ -359,11 +373,22 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
  83. }
  84.  
  85. if (netdev->macvlan_mode != _NETDEV_MACVLAN_MODE_INVALID) {
  86. - r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
  87. - if (r < 0) {
  88. - log_error_netdev(netdev,
  89. - "Could not append IFLA_MACVLAN_MODE attribute: %s",
  90. - strerror(-r));
  91. + r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
  92. + if (r < 0) {
  93. + log_error_netdev(netdev,
  94. + "Could not append IFLA_MACVLAN_MODE attribute: %s",
  95. + strerror(-r));
  96. + return r;
  97. + }
  98. + }
  99. +
  100. +
  101. + if (netdev->bond_mode != _NETDEV_BOND_MODE_INVALID) {
  102. + r = sd_rtnl_message_append_u8(req, IFLA_BOND_MODE, netdev->bond_mode);
  103. + if (r < 0) {
  104. + log_error_netdev(netdev,
  105. + "Could not append IFLA_BOND_MODE attribute: %s",
  106. + strerror(-r));
  107. return r;
  108. }
  109. }
  110. @@ -619,7 +644,7 @@ static int netdev_load_one(Manager *manager, const char *filename) {
  111. netdev->learning = true;
  112.  
  113. r = config_parse(NULL, filename, file,
  114. - "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0",
  115. + "Match\0NetDev\0VLAN\0MACVLAN\0VXLAN\0Tunnel\0Peer\0Bond\0",
  116. config_item_perf_lookup, (void*) network_netdev_gperf_lookup,
  117. false, false, netdev);
  118. if (r < 0) {
  119. diff --git a/src/network/networkd.h b/src/network/networkd.h
  120. index b7b1d90..5ad210a 100644
  121. --- a/src/network/networkd.h
  122. +++ b/src/network/networkd.h
  123. @@ -40,6 +40,18 @@
  124. #include "condition-util.h"
  125. #include "socket-util.h"
  126.  
  127. +/* FIXME: collision with net/if.h
  128. +#include <linux/if_bonding.h>
  129. +*/
  130. +#define BOND_MODE_ROUNDROBIN 0
  131. +#define BOND_MODE_ACTIVEBACKUP 1
  132. +#define BOND_MODE_XOR 2
  133. +#define BOND_MODE_BROADCAST 3
  134. +#define BOND_MODE_8023AD 4
  135. +#define BOND_MODE_TLB 5
  136. +#define BOND_MODE_ALB 6 /* TLB + RLB (receive load balancing) */
  137. +
  138. +
  139. #define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
  140. #define VXLAN_VID_MAX (1u << 24) - 1
  141.  
  142. @@ -69,6 +81,18 @@ typedef enum MacVlanMode {
  143. _NETDEV_MACVLAN_MODE_INVALID = -1
  144. } MacVlanMode;
  145.  
  146. +typedef enum BondMode {
  147. + NETDEV_BOND_MODE_BALANCE_RR = BOND_MODE_ROUNDROBIN,
  148. + NETDEV_BOND_MODE_ACTIVE_BACKUP = BOND_MODE_ACTIVEBACKUP,
  149. + NETDEV_BOND_MODE_BALANCE_XOR = BOND_MODE_XOR,
  150. + NETDEV_BOND_MODE_BROADCAST = BOND_MODE_BROADCAST,
  151. + NETDEV_BOND_MODE_8023AD = BOND_MODE_8023AD,
  152. + NETDEV_BOND_MODE_BALANCE_TLB = BOND_MODE_TLB,
  153. + NETDEV_BOND_MODE_BALANCE_ALB = BOND_MODE_ALB,
  154. + _NETDEV_BOND_MODE_MAX,
  155. + _NETDEV_BOND_MODE_INVALID = -1
  156. +} BondMode;
  157. +
  158. typedef enum NetDevKind {
  159. NETDEV_KIND_BRIDGE,
  160. NETDEV_KIND_BOND,
  161. @@ -117,6 +141,8 @@ struct NetDev {
  162. uint64_t vxlanid;
  163. int32_t macvlan_mode;
  164.  
  165. + int8_t bond_mode;
  166. +
  167. int ifindex;
  168. NetDevState state;
  169.  
  170. @@ -349,10 +375,15 @@ NetDevKind netdev_kind_from_string(const char *d) _pure_;
  171. const char *macvlan_mode_to_string(MacVlanMode d) _const_;
  172. MacVlanMode macvlan_mode_from_string(const char *d) _pure_;
  173.  
  174. +const char *bond_mode_to_string(BondMode d) _const_;
  175. +BondMode bond_mode_from_string(const char *d) _pure_;
  176. +
  177. 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);
  178.  
  179. 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);
  180.  
  181. +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);
  182. +
  183. /* gperf */
  184. const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
  185.  
  186. --
  187. 1.8.3.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement