Advertisement
Guest User

Untitled

a guest
Jun 26th, 2014
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 26.09 KB | None | 0 0
  1. From f2bc34ea4cfa792216cafba9f8b88dc82da8e211 Mon Sep 17 00:00:00 2001
  2. From: Lukas Nykryn <[email protected]>
  3. Date: Tue, 24 Jun 2014 10:43:46 +0200
  4. Subject: [PATCH 286/286] networkd: add basic configuration for bonding
  5.  
  6. ---
  7. man/systemd.netdev.xml | 72 +++++++++++++++
  8. src/network/networkd-netdev-gperf.gperf | 9 ++
  9. src/network/networkd-netdev.c | 153 ++++++++++++++++++++++++++++++--
  10. src/network/networkd.h | 120 +++++++++++++++++++++++++
  11. src/shared/conf-parser.c | 1 +
  12. src/shared/conf-parser.h | 1 +
  13. 6 files changed, 351 insertions(+), 5 deletions(-)
  14.  
  15. diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
  16. index c17ae9e..aa18602 100644
  17. --- a/man/systemd.netdev.xml
  18. +++ b/man/systemd.netdev.xml
  19. @@ -161,7 +161,79 @@
  20. </listitem>
  21. </varlistentry>
  22. </variablelist>
  23. + <para>The <literal>[BOND]</literal> section only applies for netdevs of kind <literal>bond</literal>,
  24. + and accepts the following keys:</para>
  25.  
  26. + <variablelist class='network-directives'>
  27. + <varlistentry>
  28. + <term><varname>Mode=</varname></term>
  29. + <listitem>
  30. + <para>Allows you to specify the bonding policy.</para>
  31. + </listitem>
  32. + </varlistentry>
  33. + <varlistentry>
  34. + <term><varname>PrimaryReselect=</varname></term>
  35. + <listitem>
  36. + <para>Specifies the reselection policy for the primary slave.
  37. + This affects how the primary slave is chosen to become
  38. + the active slave when failure of the active slave or recovery
  39. + of the primary slave occurs. This parameter is designed
  40. + to prevent flip-flopping between the primary slave and other slaves. </para>
  41. + </listitem>
  42. + </varlistentry>
  43. + <varlistentry>
  44. + <term><varname>Miimon=</varname></term>
  45. + <listitem>
  46. + <para>Specifies (in milliseconds) how often MII
  47. + link monitoring occurs..</para>
  48. + </listitem>
  49. + </varlistentry>
  50. + <varlistentry>
  51. + <term><varname>Updelay=</varname></term>
  52. + <listitem>
  53. + <para>Specifies (in milliseconds) how long to wait before enabling a link.
  54. + The value must be a multiple of the value specified in the miimon parameter.
  55. + The value is set to 0 by default, which disables it.</para>
  56. + </listitem>
  57. + </varlistentry>
  58. + <varlistentry>
  59. + <term><varname>Downdelay=</varname></term>
  60. + <listitem>
  61. + <para>Specifies (in milliseconds) how long to wait after
  62. + link failure before disabling the link. The value must be
  63. + a multiple of the value specified in the miimon parameter.
  64. + The value is set to 0 by default, which disables it.</para>
  65. + </listitem>
  66. + </varlistentry>
  67. + <varlistentry>
  68. + <term><varname>ArpInterval=</varname></term>
  69. + <listitem>
  70. + <para>Specifies (in milliseconds) how often ARP monitoring occurs.</para>
  71. + </listitem>
  72. + </varlistentry>
  73. + <varlistentry>
  74. + <term><varname>XmitHashPolicy=</varname></term>
  75. + <listitem>
  76. + <para>Selects the transmit hash policy used for slave selection
  77. + in balance-xor and 802.3ad modes.</para>
  78. + </listitem>
  79. + </varlistentry>
  80. + <varlistentry>
  81. + <term><varname>LacpRate=</varname></term>
  82. + <listitem>
  83. + <para>Specifies the rate at which link partners should
  84. + transmit LACPDU packets in 802.3ad mode.</para>
  85. + </listitem>
  86. + </varlistentry>
  87. + <varlistentry>
  88. + <term><varname>ArpValidate=</varname></term>
  89. + <listitem>
  90. + <para>Validate source/distribution of ARP probes;
  91. + default is none. Other valid values are active,
  92. + backup, and all.</para>
  93. + </listitem>
  94. + </varlistentry>
  95. + </variablelist>
  96. <para>The <literal>[MACVLAN]</literal> section only applies for netdevs of kind
  97. <literal>macvlan</literal>, and accepts the following key:</para>
  98.  
  99. diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
  100. index 9125e1d..aebbab1 100644
  101. --- a/src/network/networkd-netdev-gperf.gperf
  102. +++ b/src/network/networkd-netdev-gperf.gperf
  103. @@ -38,3 +38,12 @@ VXLAN.Group, config_parse_tunnel_address, 0,
  104. VXLAN.TOS, config_parse_unsigned, 0, offsetof(NetDev, tos)
  105. VXLAN.TTL, config_parse_unsigned, 0, offsetof(NetDev, ttl)
  106. VXLAN.MacLearning, config_parse_bool, 0, offsetof(NetDev, learning)
  107. +BOND.Mode, config_parse_bond_mode, 0, offsetof(NetDev, bond_mode)
  108. +BOND.PrimaryReselect, config_parse_bond_primary_reselect, 0, offsetof(NetDev, bond_primary_reselect)
  109. +BOND.Miimon, config_parse_uint32, 0, offsetof(NetDev, bond_miimon)
  110. +BOND.Updelay, config_parse_uint32, 0, offsetof(NetDev, bond_updelay)
  111. +BOND.Downdelay, config_parse_uint32, 0, offsetof(NetDev, bond_downdelay)
  112. +BOND.ArpInterval, config_parse_uint32, 0, offsetof(NetDev, bond_arp_interval)
  113. +BOND.XmitHashPolicy, config_parse_bond_xmit_hash_policy, 0, offsetof(NetDev, bond_xmit_hash_policy)
  114. +BOND.LacpRate, config_parse_bond_lacp_rate, 0, offsetof(NetDev, bond_lacp_rate)
  115. +BOND.ArpValidate, config_parse_bond_arp_validate, 0, offsetof(NetDev, bond_arp_validate)
  116. diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
  117. index dcf7596..94f3234 100644
  118. --- a/src/network/networkd-netdev.c
  119. +++ b/src/network/networkd-netdev.c
  120. @@ -28,6 +28,7 @@
  121. #include "conf-parser.h"
  122. #include "list.h"
  123. #include "siphash24.h"
  124. +#include "missing.h"
  125.  
  126. #define VLANID_MAX 4094
  127.  
  128. @@ -57,6 +58,57 @@ static const char* const macvlan_mode_table[_NETDEV_MACVLAN_MODE_MAX] = {
  129. DEFINE_STRING_TABLE_LOOKUP(macvlan_mode, MacVlanMode);
  130. DEFINE_CONFIG_PARSE_ENUM(config_parse_macvlan_mode, macvlan_mode, MacVlanMode, "Failed to parse macvlan mode");
  131.  
  132. +static const char* const bond_mode_table[_NETDEV_BOND_MODE_MAX] = {
  133. + [NETDEV_BOND_MODE_BALANCE_RR] = "balance-rr",
  134. + [NETDEV_BOND_MODE_ACTIVE_BACKUP] = "active-backup",
  135. + [NETDEV_BOND_MODE_BALANCE_XOR] = "balance-xor",
  136. + [NETDEV_BOND_MODE_BROADCAST] = "broadcast",
  137. + [NETDEV_BOND_MODE_8023AD] = "802.3ad",
  138. + [NETDEV_BOND_MODE_BALANCE_TLB] = "balance-tlb",
  139. + [NETDEV_BOND_MODE_BALANCE_ALB] = "balance-alb",
  140. +};
  141. +
  142. +DEFINE_STRING_TABLE_LOOKUP(bond_mode, BondMode);
  143. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_mode, bond_mode, BondMode, "Failed to parse bond mode");
  144. +
  145. +static const char* const bond_primary_reselect_table[_NETDEV_BOND_PRIMARY_RESELECT_MAX] = {
  146. + [NETDEV_BOND_PRIMARY_RESELECT_ALWAYS] = "always",
  147. + [NETDEV_BOND_PRIMARY_RESELECT_BETTER] = "better",
  148. + [NETDEV_BOND_PRIMARY_RESELECT_FAILURE] = "failure",
  149. +};
  150. +
  151. +DEFINE_STRING_TABLE_LOOKUP(bond_primary_reselect, BondPrimaryReselect);
  152. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_primary_reselect, bond_primary_reselect, BondPrimaryReselect, "Failed to parse primary reselect for bonding");
  153. +
  154. +static const char* const bond_xmit_hash_policy_table[_NETDEV_BOND_XMIT_HASH_POLICY_MAX] = {
  155. + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER2] = "layer2",
  156. + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER34] = "layer3+4",
  157. + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER23] = "layer2+3",
  158. + [NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23] = "encap2+3",
  159. + [NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34] = "encap3+4",
  160. +};
  161. +
  162. +DEFINE_STRING_TABLE_LOOKUP(bond_xmit_hash_policy, BondXmitHashPolicy);
  163. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_xmit_hash_policy, bond_xmit_hash_policy, BondXmitHashPolicy, "Failed to parse xmit hash policy for bonding");
  164. +
  165. +static const char* const bond_lacp_rate_table[_NETDEV_BOND_LACP_RATE_MAX] = {
  166. + [NETDEV_BOND_LACP_RATE_SLOW] = "slow",
  167. + [NETDEV_BOND_LACP_RATE_FAST] = "fast",
  168. +};
  169. +
  170. +DEFINE_STRING_TABLE_LOOKUP(bond_lacp_rate, BondLacpRate);
  171. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_lacp_rate, bond_lacp_rate, BondLacpRate, "Failed to parse ad lacp rate for bonding");
  172. +
  173. +static const char* const bond_arp_validate_table[_NETDEV_BOND_ARP_VALIDATE_MAX] = {
  174. + [NETDEV_BOND_ARP_VALIDATE_NONE] = "none",
  175. + [NETDEV_BOND_ARP_VALIDATE_ACTIVE] = "active",
  176. + [NETDEV_BOND_ARP_VALIDATE_BACKUP] = "backup",
  177. + [NETDEV_BOND_ARP_VALIDATE_ALL] = "all",
  178. +};
  179. +
  180. +DEFINE_STRING_TABLE_LOOKUP(bond_arp_validate, BondArpValidate);
  181. +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_arp_validate, bond_arp_validate, BondArpValidate, "Failed to parse arp validation for bonding");
  182. +
  183. static void netdev_cancel_callbacks(NetDev *netdev) {
  184. _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
  185. netdev_enslave_callback *callback;
  186. @@ -359,15 +411,106 @@ static int netdev_create(NetDev *netdev, Link *link, sd_rtnl_message_handler_t c
  187. }
  188.  
  189. if (netdev->macvlan_mode != _NETDEV_MACVLAN_MODE_INVALID) {
  190. - r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
  191. - if (r < 0) {
  192. - log_error_netdev(netdev,
  193. - "Could not append IFLA_MACVLAN_MODE attribute: %s",
  194. - strerror(-r));
  195. + r = sd_rtnl_message_append_u32(req, IFLA_MACVLAN_MODE, netdev->macvlan_mode);
  196. + if (r < 0) {
  197. + log_error_netdev(netdev,
  198. + "Could not append IFLA_MACVLAN_MODE attribute: %s",
  199. + strerror(-r));
  200. return r;
  201. }
  202. }
  203.  
  204. +
  205. + if (netdev->bond_mode != _NETDEV_BOND_MODE_INVALID) {
  206. + r = sd_rtnl_message_append_u8(req, IFLA_BOND_MODE, netdev->bond_mode);
  207. + if (r < 0) {
  208. + log_error_netdev(netdev,
  209. + "Could not append IFLA_BOND_MODE attribute: %s",
  210. + strerror(-r));
  211. + return r;
  212. + }
  213. + }
  214. +
  215. + if (netdev->bond_primary_reselect != _NETDEV_BOND_PRIMARY_RESELECT_INVALID) {
  216. + r = sd_rtnl_message_append_u8(req, IFLA_BOND_PRIMARY_RESELECT, netdev->bond_primary_reselect);
  217. + if (r < 0) {
  218. + log_error_netdev(netdev,
  219. + "Could not append IFLA_BOND_PRIMARY_RESELEC attribute: %s",
  220. + strerror(-r));
  221. + return r;
  222. + }
  223. + }
  224. +
  225. + if (netdev->bond_xmit_hash_policy != _NETDEV_BOND_XMIT_HASH_POLICY_INVALID) {
  226. + r = sd_rtnl_message_append_u8(req, IFLA_BOND_XMIT_HASH_POLICY, netdev->bond_xmit_hash_policy);
  227. + if (r < 0) {
  228. + log_error_netdev(netdev,
  229. + "Could not append IFLA_BOND_XMIT_HASH_POLICY attribute: %s",
  230. + strerror(-r));
  231. + return r;
  232. + }
  233. + }
  234. +
  235. + if (netdev->bond_lacp_rate != _NETDEV_BOND_LACP_RATE_INVALID) {
  236. + r = sd_rtnl_message_append_u8(req, IFLA_BOND_LP_INTERVAL, netdev->bond_lacp_rate);
  237. + if (r < 0) {
  238. + log_error_netdev(netdev,
  239. + "Could not append IFLA_BOND_LP_INTERVA attribute: %s",
  240. + strerror(-r));
  241. + return r;
  242. + }
  243. + }
  244. +
  245. + if (netdev->bond_miimon != 0) {
  246. + r = sd_rtnl_message_append_u32(req, IFLA_BOND_MIIMON, netdev->bond_miimon);
  247. + if (r < 0) {
  248. + log_error_netdev(netdev,
  249. + "Could not append IFLA_BOND_BOND_MIIMON attribute: %s",
  250. + strerror(-r));
  251. + return r;
  252. + }
  253. + }
  254. +
  255. + if (netdev->bond_downdelay != 0) {
  256. + r = sd_rtnl_message_append_u32(req, IFLA_BOND_DOWNDELAY, netdev->bond_downdelay);
  257. + if (r < 0) {
  258. + log_error_netdev(netdev,
  259. + "Could not append IFLA_BOND_DOWNDELAY attribute: %s",
  260. + strerror(-r));
  261. + return r;
  262. + }
  263. + }
  264. +
  265. + if (netdev->bond_updelay != 0) {
  266. + r = sd_rtnl_message_append_u32(req, IFLA_BOND_UPDELAY, netdev->bond_updelay);
  267. + if (r < 0) {
  268. + log_error_netdev(netdev,
  269. + "Could not append IFLA_BOND_ attribute: %s",
  270. + strerror(-r));
  271. + return r;
  272. + }
  273. + }
  274. +
  275. + if (netdev->bond_arp_interval != 0) {
  276. + r = sd_rtnl_message_append_u32(req, IFLA_BOND_ARP_INTERVAL, netdev->bond_arp_interval);
  277. + if (r < 0) {
  278. + log_error_netdev(netdev,
  279. + "Could not append IFLA_BOND_ARP_INTERVAL attribute: %s",
  280. + strerror(-r));
  281. + return r;
  282. + }
  283. + }
  284. +
  285. + if (netdev->bond_arp_validate != _NETDEV_BOND_ARP_VALIDATE_INVALID) {
  286. + r = sd_rtnl_message_append_u32(req, IFLA_BOND_ARP_VALIDATE, netdev->bond_arp_validate);
  287. + if (r < 0) {
  288. + log_error_netdev(netdev,
  289. + "Could not append IFLA_BOND_ARP_VALIDATE attribute: %s",
  290. + strerror(-r));
  291. + return r;
  292. + }
  293. + }
  294. +
  295. r = sd_rtnl_message_close_container(req);
  296. if (r < 0) {
  297. log_error_netdev(netdev,
  298. diff --git a/src/network/networkd.h b/src/network/networkd.h
  299. index b7b1d90..99f3427 100644
  300. --- a/src/network/networkd.h
  301. +++ b/src/network/networkd.h
  302. @@ -40,6 +40,41 @@
  303. #include "condition-util.h"
  304. #include "socket-util.h"
  305.  
  306. +/* FIXME: collision with net/if.h
  307. +#include <linux/if_bonding.h>
  308. +*/
  309. +#define BOND_MODE_ROUNDROBIN 0
  310. +#define BOND_MODE_ACTIVEBACKUP 1
  311. +#define BOND_MODE_XOR 2
  312. +#define BOND_MODE_BROADCAST 3
  313. +#define BOND_MODE_8023AD 4
  314. +#define BOND_MODE_TLB 5
  315. +#define BOND_MODE_ALB 6 /* TLB + RLB (receive load balancing) */
  316. +
  317. +#define BOND_XMIT_POLICY_LAYER2 0 /* layer 2 (MAC only), default */
  318. +#define BOND_XMIT_POLICY_LAYER34 1 /* layer 3+4 (IP ^ (TCP || UDP)) */
  319. +#define BOND_XMIT_POLICY_LAYER23 2 /* layer 2+3 (IP ^ MAC) */
  320. +#define BOND_XMIT_POLICY_ENCAP23 3 /* encapsulated layer 2+3 */
  321. +#define BOND_XMIT_POLICY_ENCAP34 4 /* encapsulated layer 3+4 */
  322. +
  323. +#define BOND_STATE_ACTIVE 0 /* link is active */
  324. +#define BOND_STATE_BACKUP 1 /* link is backup */
  325. +
  326. +/* FIXME: These are only in drivers/net/bonding/bonding.h */
  327. +#define BOND_PRI_RESELECT_ALWAYS 0
  328. +#define BOND_PRI_RESELECT_BETTER 1
  329. +#define BOND_PRI_RESELECT_FAILURE 2
  330. +
  331. +#define BOND_ARP_VALIDATE_NONE 0
  332. +#define BOND_ARP_VALIDATE_ACTIVE (1 << BOND_STATE_ACTIVE)
  333. +#define BOND_ARP_VALIDATE_BACKUP (1 << BOND_STATE_BACKUP)
  334. +#define BOND_ARP_VALIDATE_ALL (BOND_ARP_VALIDATE_ACTIVE | \
  335. + BOND_ARP_VALIDATE_BACKUP)
  336. +
  337. +/* FIXME: These are only in drivers/net/bonding/bond_3ad.h */
  338. +#define AD_LACP_SLOW 0
  339. +#define AD_LACP_FAST 1
  340. +
  341. #define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
  342. #define VXLAN_VID_MAX (1u << 24) - 1
  343.  
  344. @@ -69,6 +104,52 @@ typedef enum MacVlanMode {
  345. _NETDEV_MACVLAN_MODE_INVALID = -1
  346. } MacVlanMode;
  347.  
  348. +typedef enum BondMode {
  349. + NETDEV_BOND_MODE_BALANCE_RR = BOND_MODE_ROUNDROBIN,
  350. + NETDEV_BOND_MODE_ACTIVE_BACKUP = BOND_MODE_ACTIVEBACKUP,
  351. + NETDEV_BOND_MODE_BALANCE_XOR = BOND_MODE_XOR,
  352. + NETDEV_BOND_MODE_BROADCAST = BOND_MODE_BROADCAST,
  353. + NETDEV_BOND_MODE_8023AD = BOND_MODE_8023AD,
  354. + NETDEV_BOND_MODE_BALANCE_TLB = BOND_MODE_TLB,
  355. + NETDEV_BOND_MODE_BALANCE_ALB = BOND_MODE_ALB,
  356. + _NETDEV_BOND_MODE_MAX,
  357. + _NETDEV_BOND_MODE_INVALID = -1
  358. +} BondMode;
  359. +
  360. +typedef enum BondPrimaryReselect {
  361. + NETDEV_BOND_PRIMARY_RESELECT_ALWAYS = BOND_PRI_RESELECT_ALWAYS,
  362. + NETDEV_BOND_PRIMARY_RESELECT_BETTER = BOND_PRI_RESELECT_BETTER,
  363. + NETDEV_BOND_PRIMARY_RESELECT_FAILURE = BOND_PRI_RESELECT_FAILURE,
  364. + _NETDEV_BOND_PRIMARY_RESELECT_MAX,
  365. + _NETDEV_BOND_PRIMARY_RESELECT_INVALID = -1
  366. +} BondPrimaryReselect;
  367. +
  368. +typedef enum BondXmitHashPolicy {
  369. + NETDEV_BOND_XMIT_HASH_POLICY_LAYER2 = BOND_XMIT_POLICY_LAYER2,
  370. + NETDEV_BOND_XMIT_HASH_POLICY_LAYER34 = BOND_XMIT_POLICY_LAYER34,
  371. + NETDEV_BOND_XMIT_HASH_POLICY_LAYER23 = BOND_XMIT_POLICY_LAYER23,
  372. + NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23 = BOND_XMIT_POLICY_ENCAP23,
  373. + NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34 = BOND_XMIT_POLICY_ENCAP34,
  374. + _NETDEV_BOND_XMIT_HASH_POLICY_MAX,
  375. + _NETDEV_BOND_XMIT_HASH_POLICY_INVALID=-1,
  376. +} BondXmitHashPolicy;
  377. +
  378. +typedef enum BondLacpRate {
  379. + NETDEV_BOND_LACP_RATE_SLOW = AD_LACP_SLOW,
  380. + NETDEV_BOND_LACP_RATE_FAST = AD_LACP_FAST,
  381. + _NETDEV_BOND_LACP_RATE_MAX,
  382. + _NETDEV_BOND_LACP_RATE_INVALID=-1,
  383. +} BondLacpRate;
  384. +
  385. +typedef enum BondArpValidate {
  386. + NETDEV_BOND_ARP_VALIDATE_NONE = BOND_ARP_VALIDATE_NONE,
  387. + NETDEV_BOND_ARP_VALIDATE_ACTIVE = BOND_ARP_VALIDATE_ACTIVE,
  388. + NETDEV_BOND_ARP_VALIDATE_BACKUP = BOND_ARP_VALIDATE_BACKUP,
  389. + NETDEV_BOND_ARP_VALIDATE_ALL = BOND_ARP_VALIDATE_ALL,
  390. + _NETDEV_BOND_ARP_VALIDATE_MAX,
  391. + _NETDEV_BOND_ARP_VALIDATE_INVALID = -1,
  392. +} BondArpValidate;
  393. +
  394. typedef enum NetDevKind {
  395. NETDEV_KIND_BRIDGE,
  396. NETDEV_KIND_BOND,
  397. @@ -117,6 +198,20 @@ struct NetDev {
  398. uint64_t vxlanid;
  399. int32_t macvlan_mode;
  400.  
  401. + int8_t bond_mode;
  402. + int8_t bond_primary_reselect;
  403. + uint32_t bond_miimon;
  404. + uint32_t bond_updelay;
  405. + uint32_t bond_downdelay;
  406. + uint32_t bond_arp_interval;
  407. + int8_t bond_xmit_hash_policy;
  408. + int8_t bond_lacp_rate;
  409. + int32_t bond_arp_validate;
  410. +
  411. + /* TODO: arp_ip_target=<ip_address>[,<ip_address_2>,…<ip_address_16>]*/
  412. + /* TODO initscripts support also num_unsol_na */
  413. +
  414. +
  415. int ifindex;
  416. NetDevState state;
  417.  
  418. @@ -349,10 +444,35 @@ NetDevKind netdev_kind_from_string(const char *d) _pure_;
  419. const char *macvlan_mode_to_string(MacVlanMode d) _const_;
  420. MacVlanMode macvlan_mode_from_string(const char *d) _pure_;
  421.  
  422. +const char *bond_mode_to_string(BondMode d) _const_;
  423. +BondMode bond_mode_from_string(const char *d) _pure_;
  424. +
  425. +const char *bond_primary_reselect_to_string(BondPrimaryReselect d) _const_;
  426. +BondPrimaryReselect bond_primary_reselect_from_string(const char *d) _pure_;
  427. +
  428. +const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d) _const_;
  429. +BondXmitHashPolicy bond_xmit_hash_policy_from_string(const char *d) _pure_;
  430. +
  431. +const char *bond_lacp_rate_to_string(BondLacpRate d) _const_;
  432. +BondLacpRate bond_lacp_rate_from_string(const char *d) _pure_;
  433. +
  434. +const char *bond_arp_validate_to_string(BondArpValidate d) _const_;
  435. +BondArpValidate bond_arp_validate_from_string(const char *d) _pure_;
  436. +
  437. 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);
  438.  
  439. 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);
  440.  
  441. +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);
  442. +
  443. +int config_parse_bond_primary_reselect(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);
  444. +
  445. +int config_parse_bond_xmit_hash_policy(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);
  446. +
  447. +int config_parse_bond_lacp_rate(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);
  448. +
  449. +int config_parse_bond_arp_validate(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);
  450. +
  451. /* gperf */
  452. const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
  453.  
  454. diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
  455. index 158e9ef..e65d6fb 100644
  456. --- a/src/shared/conf-parser.c
  457. +++ b/src/shared/conf-parser.c
  458. @@ -447,6 +447,7 @@ int config_parse(const char *unit,
  459. DEFINE_PARSER(int, int, safe_atoi)
  460. DEFINE_PARSER(long, long, safe_atoli)
  461. DEFINE_PARSER(uint64, uint64_t, safe_atou64)
  462. +DEFINE_PARSER(uint32, uint32_t, safe_atou32)
  463. DEFINE_PARSER(unsigned, unsigned, safe_atou)
  464. DEFINE_PARSER(double, double, safe_atod)
  465. DEFINE_PARSER(nsec, nsec_t, parse_nsec)
  466. diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
  467. index 9d166de..c4cbe9f 100644
  468. --- a/src/shared/conf-parser.h
  469. +++ b/src/shared/conf-parser.h
  470. @@ -96,6 +96,7 @@ int config_parse_int(const char *unit, const char *filename, unsigned line, cons
  471. int config_parse_unsigned(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);
  472. int config_parse_long(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);
  473. int config_parse_uint64(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);
  474. +int config_parse_uint32(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);
  475. int config_parse_double(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);
  476. int config_parse_iec_size(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);
  477. int config_parse_si_size(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);
  478. --
  479. 1.8.3.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement