Skip to content

Commit

Permalink
team: added ab,lb,lacp runner type structs
Browse files Browse the repository at this point in the history
  • Loading branch information
wipawel authored and mtomaschewski committed Aug 18, 2015
1 parent 3e655cf commit 84b2ecd
Show file tree
Hide file tree
Showing 2 changed files with 215 additions and 0 deletions.
96 changes: 96 additions & 0 deletions include/wicked/team.h
Expand Up @@ -37,12 +37,98 @@ typedef enum {
NI_TEAM_RUNNER_LACP,
} ni_team_runner_type_t;

/*
* tx hash and balancer
*/
typedef enum {
NI_TEAM_TX_HASH_NONE = 0,
NI_TEAM_TX_HASH_ETH,
NI_TEAM_TX_HASH_VLAN,
NI_TEAM_TX_HASH_IPV4,
NI_TEAM_TX_HASH_IPV6,
NI_TEAM_TX_HASH_IP,
NI_TEAM_TX_HASH_L3,
NI_TEAM_TX_HASH_TCP,
NI_TEAM_TX_HASH_UDP,
NI_TEAM_TX_HASH_SCTP,
NI_TEAM_TX_HASH_L4,
} ni_team_tx_hash_bit_t;

typedef enum {
NI_TEAM_TX_BALANCER_BASIC = 0,
} ni_team_tx_balancer_type_t;

typedef struct ni_team_tx_balancer {
ni_team_tx_balancer_type_t type;
/* currently, there is a basic only */
unsigned int balancing_interval;
} ni_team_tx_balancer_t;

/*
* lacp runner
*/
typedef enum {
NI_TEAM_LACP_SELECT_POLICY_PRIO,
NI_TEAM_LACP_SELECT_POLICY_PRIO_STABLE,
NI_TEAM_LACP_SELECT_POLICY_BANDWIDTH,
NI_TEAM_LACP_SELECT_POLICY_COUNT,
NI_TEAM_LACP_SELECT_POLICY_PORT_CONFIG,
} ni_team_lacp_select_policy_t;

typedef struct ni_team_lacp {
ni_bool_t active;
unsigned int sys_prio;
ni_bool_t fast_rate;
unsigned int min_ports;
ni_team_lacp_select_policy_t select_policy;
ni_team_tx_hash_bit_t tx_hash; /* bitmap */
ni_team_tx_balancer_t tx_balancer;
} ni_team_lacp_t;

typedef struct ni_team_runner_lacp {
ni_team_lacp_t config;
} ni_team_runner_lacp_t;

/*
* lb runner
*/
typedef struct ni_team_load_balance {
ni_team_tx_hash_bit_t tx_hash; /* bitmap */
ni_team_tx_balancer_t tx_balancer;
} ni_team_load_balance_t;

typedef struct ni_team_runner_load_balance {
ni_team_load_balance_t config;
} ni_team_runner_load_balance_t;

/*
* ab runner
*/
typedef enum {
NI_TEAM_AB_HWADDR_POLICY_SAME_ALL = 0,
NI_TEAM_AB_HWADDR_POLICY_BY_ACTIVE,
NI_TEAM_AB_HWADDR_POLICY_ONLY_ACTIVE,
} ni_team_ab_hwaddr_policy_t;

typedef struct ni_team_active_backup {
ni_team_ab_hwaddr_policy_t hwaddr_policy;
} ni_team_active_backup_t;

typedef struct ni_team_runner_active_backup {
ni_team_active_backup_t config;
} ni_team_runner_active_backup_t;

/*
* runner type union
*/
typedef struct ni_team_runner {
ni_team_runner_type_t type;

union {
ni_team_runner_active_backup_t ab;
ni_team_runner_load_balance_t lb;
ni_team_runner_lacp_t lacp;
};
} ni_team_runner_t;


Expand All @@ -56,6 +142,7 @@ typedef enum {
NI_TEAM_LINK_WATCH_TIPC,
} ni_team_link_watch_type_t;


/*
* link watch type structs
*/
Expand Down Expand Up @@ -126,6 +213,15 @@ extern void ni_team_free(ni_team_t *);
extern const char * ni_team_runner_type_to_name(ni_team_runner_type_t);
extern ni_bool_t ni_team_runner_name_to_type(const char *, ni_team_runner_type_t *);

extern const char * ni_team_tx_hash_bit_to_name(ni_team_tx_hash_bit_t);
extern ni_bool_t ni_team_tx_hash_name_to_bit(const char *, ni_team_tx_hash_bit_t *);
extern unsigned int ni_team_tx_hash_get_bit_names(ni_team_tx_hash_bit_t, ni_string_array_t *);
extern const char * ni_team_tx_balancer_type_to_name(ni_team_tx_balancer_type_t);
extern ni_bool_t ni_team_tx_balancer_name_to_type(const char *, ni_team_tx_balancer_type_t *);

extern const char * ni_team_ab_hwaddr_policy_to_name(ni_team_ab_hwaddr_policy_t);
extern const char * ni_team_lacp_select_policy_to_name(ni_team_lacp_select_policy_t);

extern const char * ni_team_link_watch_type_to_name(ni_team_link_watch_type_t);
extern ni_bool_t ni_team_link_watch_name_to_type(const char *, ni_team_link_watch_type_t *);

Expand Down
119 changes: 119 additions & 0 deletions src/team.c
Expand Up @@ -70,6 +70,125 @@ ni_team_runner_name_to_type(const char *name, ni_team_runner_type_t *type)
return TRUE;
}

/*
* Map teamd tx_hash flag bits to names
*/
static const ni_intmap_t ni_team_tx_hash_bit_names[] = {
{ "eth", NI_TEAM_TX_HASH_ETH },
{ "vlan", NI_TEAM_TX_HASH_VLAN },
{ "ipv4", NI_TEAM_TX_HASH_IPV4 },
{ "ipv6", NI_TEAM_TX_HASH_IPV6 },
{ "ip", NI_TEAM_TX_HASH_IP },
{ "l3", NI_TEAM_TX_HASH_L3 },
{ "tcp", NI_TEAM_TX_HASH_TCP },
{ "udp", NI_TEAM_TX_HASH_UDP },
{ "sctp", NI_TEAM_TX_HASH_SCTP },
{ "l4", NI_TEAM_TX_HASH_L4 },

{ NULL, NI_TEAM_TX_HASH_NONE }
};

const char *
ni_team_tx_hash_bit_to_name(ni_team_tx_hash_bit_t bit)
{
return ni_format_uint_mapped(bit, ni_team_tx_hash_bit_names);
}

ni_bool_t
ni_team_tx_hash_name_to_bit(const char *name, ni_team_tx_hash_bit_t *bit)
{
unsigned int _bit;

if (!name || !bit)
return FALSE;

if (ni_parse_uint_mapped(name, ni_team_tx_hash_bit_names, &_bit) != 0)
return FALSE;

*bit = _bit;
return TRUE;
}

unsigned int
ni_team_tx_hash_get_bit_names(ni_team_tx_hash_bit_t mask, ni_string_array_t *names)
{
const ni_intmap_t *map;
unsigned int n = 0;

for (map = ni_team_tx_hash_bit_names; map->name; ++map) {
if (mask & (1 << map->value)) {
ni_string_array_append(names, map->name);
n++;
}
}
return n;
}

/*
* Map teamd tx_balancer names to constants
*/
static const ni_intmap_t ni_team_tx_balancer_names[] = {
{ "basic", NI_TEAM_TX_BALANCER_BASIC },

{ NULL, -1U }
};

const char *
ni_team_tx_balancer_type_to_name(ni_team_tx_balancer_type_t type)
{
return ni_format_uint_mapped(type, ni_team_tx_balancer_names);
}

ni_bool_t
ni_team_tx_balancer_name_to_type(const char *name, ni_team_tx_balancer_type_t *type)
{
unsigned int _type;

if (!name || !type)
return FALSE;

if (ni_parse_uint_mapped(name, ni_team_tx_balancer_names, &_type) != 0)
return FALSE;

*type = _type;
return TRUE;
}

/*
* Map teamd lacp select policy names to constants
*/
static const ni_intmap_t ni_team_lacp_select_policies[] = {
{ "lacp_prio", NI_TEAM_LACP_SELECT_POLICY_PRIO },
{ "lacp_prio_stable", NI_TEAM_LACP_SELECT_POLICY_PRIO_STABLE },
{ "bandwidth", NI_TEAM_LACP_SELECT_POLICY_BANDWIDTH },
{ "count", NI_TEAM_LACP_SELECT_POLICY_COUNT },
{ "port_options", NI_TEAM_LACP_SELECT_POLICY_PORT_CONFIG },

{ NULL, -1U }
};

const char *
ni_team_lacp_select_policy_to_name(ni_team_lacp_select_policy_t policy)
{
return ni_format_uint_mapped(policy, ni_team_lacp_select_policies);
}

/*
* Map teamd activebackup hwaddr_policy names to constants
*/
static const ni_intmap_t ni_team_ab_hwaddr_policies[] = {
{ "same_all", NI_TEAM_AB_HWADDR_POLICY_SAME_ALL },
{ "by_active", NI_TEAM_AB_HWADDR_POLICY_BY_ACTIVE },
{ "only_active", NI_TEAM_AB_HWADDR_POLICY_ONLY_ACTIVE },

{ NULL, -1U }
};

const char *
ni_team_ab_hwaddr_policy_to_name(ni_team_ab_hwaddr_policy_t policy)
{
return ni_format_uint_mapped(policy, ni_team_ab_hwaddr_policies);
}

/*
* Map teamd link watch names to constants
Expand Down

0 comments on commit 84b2ecd

Please sign in to comment.