Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From f2bc34ea4cfa792216cafba9f8b88dc82da8e211 Mon Sep 17 00:00:00 2001
- From: Lukas Nykryn <[email protected]>
- Date: Tue, 24 Jun 2014 10:43:46 +0200
- Subject: [PATCH 286/286] networkd: add basic configuration for bonding
- ---
- man/systemd.netdev.xml | 72 +++++++++++++++
- src/network/networkd-netdev-gperf.gperf | 9 ++
- src/network/networkd-netdev.c | 153 ++++++++++++++++++++++++++++++--
- src/network/networkd.h | 120 +++++++++++++++++++++++++
- src/shared/conf-parser.c | 1 +
- src/shared/conf-parser.h | 1 +
- 6 files changed, 351 insertions(+), 5 deletions(-)
- diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
- index c17ae9e..aa18602 100644
- --- a/man/systemd.netdev.xml
- +++ b/man/systemd.netdev.xml
- @@ -161,7 +161,79 @@
- </listitem>
- </varlistentry>
- </variablelist>
- + <para>The <literal>[BOND]</literal> section only applies for netdevs of kind <literal>bond</literal>,
- + and accepts the following keys:</para>
- + <variablelist class='network-directives'>
- + <varlistentry>
- + <term><varname>Mode=</varname></term>
- + <listitem>
- + <para>Allows you to specify the bonding policy.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>PrimaryReselect=</varname></term>
- + <listitem>
- + <para>Specifies the reselection policy for the primary slave.
- + This affects how the primary slave is chosen to become
- + the active slave when failure of the active slave or recovery
- + of the primary slave occurs. This parameter is designed
- + to prevent flip-flopping between the primary slave and other slaves. </para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>Miimon=</varname></term>
- + <listitem>
- + <para>Specifies (in milliseconds) how often MII
- + link monitoring occurs..</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>Updelay=</varname></term>
- + <listitem>
- + <para>Specifies (in milliseconds) how long to wait before enabling a link.
- + The value must be a multiple of the value specified in the miimon parameter.
- + The value is set to 0 by default, which disables it.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>Downdelay=</varname></term>
- + <listitem>
- + <para>Specifies (in milliseconds) how long to wait after
- + link failure before disabling the link. The value must be
- + a multiple of the value specified in the miimon parameter.
- + The value is set to 0 by default, which disables it.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>ArpInterval=</varname></term>
- + <listitem>
- + <para>Specifies (in milliseconds) how often ARP monitoring occurs.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>XmitHashPolicy=</varname></term>
- + <listitem>
- + <para>Selects the transmit hash policy used for slave selection
- + in balance-xor and 802.3ad modes.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>LacpRate=</varname></term>
- + <listitem>
- + <para>Specifies the rate at which link partners should
- + transmit LACPDU packets in 802.3ad mode.</para>
- + </listitem>
- + </varlistentry>
- + <varlistentry>
- + <term><varname>ArpValidate=</varname></term>
- + <listitem>
- + <para>Validate source/distribution of ARP probes;
- + default is none. Other valid values are active,
- + backup, and all.</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..aebbab1 100644
- --- a/src/network/networkd-netdev-gperf.gperf
- +++ b/src/network/networkd-netdev-gperf.gperf
- @@ -38,3 +38,12 @@ 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)
- +BOND.PrimaryReselect, config_parse_bond_primary_reselect, 0, offsetof(NetDev, bond_primary_reselect)
- +BOND.Miimon, config_parse_uint32, 0, offsetof(NetDev, bond_miimon)
- +BOND.Updelay, config_parse_uint32, 0, offsetof(NetDev, bond_updelay)
- +BOND.Downdelay, config_parse_uint32, 0, offsetof(NetDev, bond_downdelay)
- +BOND.ArpInterval, config_parse_uint32, 0, offsetof(NetDev, bond_arp_interval)
- +BOND.XmitHashPolicy, config_parse_bond_xmit_hash_policy, 0, offsetof(NetDev, bond_xmit_hash_policy)
- +BOND.LacpRate, config_parse_bond_lacp_rate, 0, offsetof(NetDev, bond_lacp_rate)
- +BOND.ArpValidate, config_parse_bond_arp_validate, 0, offsetof(NetDev, bond_arp_validate)
- diff --git a/src/network/networkd-netdev.c b/src/network/networkd-netdev.c
- index dcf7596..94f3234 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,57 @@ 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 const char* const bond_primary_reselect_table[_NETDEV_BOND_PRIMARY_RESELECT_MAX] = {
- + [NETDEV_BOND_PRIMARY_RESELECT_ALWAYS] = "always",
- + [NETDEV_BOND_PRIMARY_RESELECT_BETTER] = "better",
- + [NETDEV_BOND_PRIMARY_RESELECT_FAILURE] = "failure",
- +};
- +
- +DEFINE_STRING_TABLE_LOOKUP(bond_primary_reselect, BondPrimaryReselect);
- +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_primary_reselect, bond_primary_reselect, BondPrimaryReselect, "Failed to parse primary reselect for bonding");
- +
- +static const char* const bond_xmit_hash_policy_table[_NETDEV_BOND_XMIT_HASH_POLICY_MAX] = {
- + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER2] = "layer2",
- + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER34] = "layer3+4",
- + [NETDEV_BOND_XMIT_HASH_POLICY_LAYER23] = "layer2+3",
- + [NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23] = "encap2+3",
- + [NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34] = "encap3+4",
- +};
- +
- +DEFINE_STRING_TABLE_LOOKUP(bond_xmit_hash_policy, BondXmitHashPolicy);
- +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_xmit_hash_policy, bond_xmit_hash_policy, BondXmitHashPolicy, "Failed to parse xmit hash policy for bonding");
- +
- +static const char* const bond_lacp_rate_table[_NETDEV_BOND_LACP_RATE_MAX] = {
- + [NETDEV_BOND_LACP_RATE_SLOW] = "slow",
- + [NETDEV_BOND_LACP_RATE_FAST] = "fast",
- +};
- +
- +DEFINE_STRING_TABLE_LOOKUP(bond_lacp_rate, BondLacpRate);
- +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_lacp_rate, bond_lacp_rate, BondLacpRate, "Failed to parse ad lacp rate for bonding");
- +
- +static const char* const bond_arp_validate_table[_NETDEV_BOND_ARP_VALIDATE_MAX] = {
- + [NETDEV_BOND_ARP_VALIDATE_NONE] = "none",
- + [NETDEV_BOND_ARP_VALIDATE_ACTIVE] = "active",
- + [NETDEV_BOND_ARP_VALIDATE_BACKUP] = "backup",
- + [NETDEV_BOND_ARP_VALIDATE_ALL] = "all",
- +};
- +
- +DEFINE_STRING_TABLE_LOOKUP(bond_arp_validate, BondArpValidate);
- +DEFINE_CONFIG_PARSE_ENUM(config_parse_bond_arp_validate, bond_arp_validate, BondArpValidate, "Failed to parse arp validation for bonding");
- +
- static void netdev_cancel_callbacks(NetDev *netdev) {
- _cleanup_rtnl_message_unref_ sd_rtnl_message *m = NULL;
- netdev_enslave_callback *callback;
- @@ -359,15 +411,106 @@ 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;
- + }
- + }
- +
- + if (netdev->bond_primary_reselect != _NETDEV_BOND_PRIMARY_RESELECT_INVALID) {
- + r = sd_rtnl_message_append_u8(req, IFLA_BOND_PRIMARY_RESELECT, netdev->bond_primary_reselect);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_PRIMARY_RESELEC attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_xmit_hash_policy != _NETDEV_BOND_XMIT_HASH_POLICY_INVALID) {
- + r = sd_rtnl_message_append_u8(req, IFLA_BOND_XMIT_HASH_POLICY, netdev->bond_xmit_hash_policy);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_XMIT_HASH_POLICY attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_lacp_rate != _NETDEV_BOND_LACP_RATE_INVALID) {
- + r = sd_rtnl_message_append_u8(req, IFLA_BOND_LP_INTERVAL, netdev->bond_lacp_rate);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_LP_INTERVA attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_miimon != 0) {
- + r = sd_rtnl_message_append_u32(req, IFLA_BOND_MIIMON, netdev->bond_miimon);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_BOND_MIIMON attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_downdelay != 0) {
- + r = sd_rtnl_message_append_u32(req, IFLA_BOND_DOWNDELAY, netdev->bond_downdelay);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_DOWNDELAY attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_updelay != 0) {
- + r = sd_rtnl_message_append_u32(req, IFLA_BOND_UPDELAY, netdev->bond_updelay);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_ attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_arp_interval != 0) {
- + r = sd_rtnl_message_append_u32(req, IFLA_BOND_ARP_INTERVAL, netdev->bond_arp_interval);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_ARP_INTERVAL attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- + if (netdev->bond_arp_validate != _NETDEV_BOND_ARP_VALIDATE_INVALID) {
- + r = sd_rtnl_message_append_u32(req, IFLA_BOND_ARP_VALIDATE, netdev->bond_arp_validate);
- + if (r < 0) {
- + log_error_netdev(netdev,
- + "Could not append IFLA_BOND_ARP_VALIDATE attribute: %s",
- + strerror(-r));
- + return r;
- + }
- + }
- +
- r = sd_rtnl_message_close_container(req);
- if (r < 0) {
- log_error_netdev(netdev,
- diff --git a/src/network/networkd.h b/src/network/networkd.h
- index b7b1d90..99f3427 100644
- --- a/src/network/networkd.h
- +++ b/src/network/networkd.h
- @@ -40,6 +40,41 @@
- #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 BOND_XMIT_POLICY_LAYER2 0 /* layer 2 (MAC only), default */
- +#define BOND_XMIT_POLICY_LAYER34 1 /* layer 3+4 (IP ^ (TCP || UDP)) */
- +#define BOND_XMIT_POLICY_LAYER23 2 /* layer 2+3 (IP ^ MAC) */
- +#define BOND_XMIT_POLICY_ENCAP23 3 /* encapsulated layer 2+3 */
- +#define BOND_XMIT_POLICY_ENCAP34 4 /* encapsulated layer 3+4 */
- +
- +#define BOND_STATE_ACTIVE 0 /* link is active */
- +#define BOND_STATE_BACKUP 1 /* link is backup */
- +
- +/* FIXME: These are only in drivers/net/bonding/bonding.h */
- +#define BOND_PRI_RESELECT_ALWAYS 0
- +#define BOND_PRI_RESELECT_BETTER 1
- +#define BOND_PRI_RESELECT_FAILURE 2
- +
- +#define BOND_ARP_VALIDATE_NONE 0
- +#define BOND_ARP_VALIDATE_ACTIVE (1 << BOND_STATE_ACTIVE)
- +#define BOND_ARP_VALIDATE_BACKUP (1 << BOND_STATE_BACKUP)
- +#define BOND_ARP_VALIDATE_ALL (BOND_ARP_VALIDATE_ACTIVE | \
- + BOND_ARP_VALIDATE_BACKUP)
- +
- +/* FIXME: These are only in drivers/net/bonding/bond_3ad.h */
- +#define AD_LACP_SLOW 0
- +#define AD_LACP_FAST 1
- +
- #define CACHE_INFO_INFINITY_LIFE_TIME 0xFFFFFFFFU
- #define VXLAN_VID_MAX (1u << 24) - 1
- @@ -69,6 +104,52 @@ 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 BondPrimaryReselect {
- + NETDEV_BOND_PRIMARY_RESELECT_ALWAYS = BOND_PRI_RESELECT_ALWAYS,
- + NETDEV_BOND_PRIMARY_RESELECT_BETTER = BOND_PRI_RESELECT_BETTER,
- + NETDEV_BOND_PRIMARY_RESELECT_FAILURE = BOND_PRI_RESELECT_FAILURE,
- + _NETDEV_BOND_PRIMARY_RESELECT_MAX,
- + _NETDEV_BOND_PRIMARY_RESELECT_INVALID = -1
- +} BondPrimaryReselect;
- +
- +typedef enum BondXmitHashPolicy {
- + NETDEV_BOND_XMIT_HASH_POLICY_LAYER2 = BOND_XMIT_POLICY_LAYER2,
- + NETDEV_BOND_XMIT_HASH_POLICY_LAYER34 = BOND_XMIT_POLICY_LAYER34,
- + NETDEV_BOND_XMIT_HASH_POLICY_LAYER23 = BOND_XMIT_POLICY_LAYER23,
- + NETDEV_BOND_XMIT_HASH_POLICY_ENCAP23 = BOND_XMIT_POLICY_ENCAP23,
- + NETDEV_BOND_XMIT_HASH_POLICY_ENCAP34 = BOND_XMIT_POLICY_ENCAP34,
- + _NETDEV_BOND_XMIT_HASH_POLICY_MAX,
- + _NETDEV_BOND_XMIT_HASH_POLICY_INVALID=-1,
- +} BondXmitHashPolicy;
- +
- +typedef enum BondLacpRate {
- + NETDEV_BOND_LACP_RATE_SLOW = AD_LACP_SLOW,
- + NETDEV_BOND_LACP_RATE_FAST = AD_LACP_FAST,
- + _NETDEV_BOND_LACP_RATE_MAX,
- + _NETDEV_BOND_LACP_RATE_INVALID=-1,
- +} BondLacpRate;
- +
- +typedef enum BondArpValidate {
- + NETDEV_BOND_ARP_VALIDATE_NONE = BOND_ARP_VALIDATE_NONE,
- + NETDEV_BOND_ARP_VALIDATE_ACTIVE = BOND_ARP_VALIDATE_ACTIVE,
- + NETDEV_BOND_ARP_VALIDATE_BACKUP = BOND_ARP_VALIDATE_BACKUP,
- + NETDEV_BOND_ARP_VALIDATE_ALL = BOND_ARP_VALIDATE_ALL,
- + _NETDEV_BOND_ARP_VALIDATE_MAX,
- + _NETDEV_BOND_ARP_VALIDATE_INVALID = -1,
- +} BondArpValidate;
- +
- typedef enum NetDevKind {
- NETDEV_KIND_BRIDGE,
- NETDEV_KIND_BOND,
- @@ -117,6 +198,20 @@ struct NetDev {
- uint64_t vxlanid;
- int32_t macvlan_mode;
- + int8_t bond_mode;
- + int8_t bond_primary_reselect;
- + uint32_t bond_miimon;
- + uint32_t bond_updelay;
- + uint32_t bond_downdelay;
- + uint32_t bond_arp_interval;
- + int8_t bond_xmit_hash_policy;
- + int8_t bond_lacp_rate;
- + int32_t bond_arp_validate;
- +
- + /* TODO: arp_ip_target=<ip_address>[,<ip_address_2>,…<ip_address_16>]*/
- + /* TODO initscripts support also num_unsol_na */
- +
- +
- int ifindex;
- NetDevState state;
- @@ -349,10 +444,35 @@ 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_;
- +
- +const char *bond_primary_reselect_to_string(BondPrimaryReselect d) _const_;
- +BondPrimaryReselect bond_primary_reselect_from_string(const char *d) _pure_;
- +
- +const char *bond_xmit_hash_policy_to_string(BondXmitHashPolicy d) _const_;
- +BondXmitHashPolicy bond_xmit_hash_policy_from_string(const char *d) _pure_;
- +
- +const char *bond_lacp_rate_to_string(BondLacpRate d) _const_;
- +BondLacpRate bond_lacp_rate_from_string(const char *d) _pure_;
- +
- +const char *bond_arp_validate_to_string(BondArpValidate d) _const_;
- +BondArpValidate bond_arp_validate_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);
- +
- +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);
- +
- +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);
- +
- +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);
- +
- +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);
- +
- /* gperf */
- const struct ConfigPerfItem* network_netdev_gperf_lookup(const char *key, unsigned length);
- diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
- index 158e9ef..e65d6fb 100644
- --- a/src/shared/conf-parser.c
- +++ b/src/shared/conf-parser.c
- @@ -447,6 +447,7 @@ int config_parse(const char *unit,
- DEFINE_PARSER(int, int, safe_atoi)
- DEFINE_PARSER(long, long, safe_atoli)
- DEFINE_PARSER(uint64, uint64_t, safe_atou64)
- +DEFINE_PARSER(uint32, uint32_t, safe_atou32)
- DEFINE_PARSER(unsigned, unsigned, safe_atou)
- DEFINE_PARSER(double, double, safe_atod)
- DEFINE_PARSER(nsec, nsec_t, parse_nsec)
- diff --git a/src/shared/conf-parser.h b/src/shared/conf-parser.h
- index 9d166de..c4cbe9f 100644
- --- a/src/shared/conf-parser.h
- +++ b/src/shared/conf-parser.h
- @@ -96,6 +96,7 @@ int config_parse_int(const char *unit, const char *filename, unsigned line, cons
- 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);
- 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);
- 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);
- +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);
- 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);
- 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);
- 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);
- --
- 1.8.3.1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement