Skip to content

Commit

Permalink
team: intial port driven enslave
Browse files Browse the repository at this point in the history
  • Loading branch information
mtomaschewski committed Aug 18, 2015
1 parent 0e06f6d commit 27c599d
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 1 deletion.
11 changes: 10 additions & 1 deletion src/ifconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,14 @@ ni_system_interface_enslave(ni_netdev_t *master, ni_netdev_t *dev)
master->name, master->link.ifindex);
}
break;
case NI_IFTYPE_TEAM:
ret = ni_teamd_port_enslave(master, dev, NULL);

if (ret == 0) {
ni_netdev_ref_set(&dev->link.masterdev,
master->name, master->link.ifindex);
}
break;
case NI_IFTYPE_BRIDGE:
ret = __ni_rtnl_link_add_port_up(dev, master->name,
master->link.ifindex);
Expand Down Expand Up @@ -211,7 +219,8 @@ ni_system_interface_link_change(ni_netdev_t *dev, const ni_netdev_req_t *ifp_req
return 0;

master = ni_netdev_by_index(nc, dev->link.masterdev.index);
if (master && master->link.type == NI_IFTYPE_BOND)
if (master && (master->link.type == NI_IFTYPE_BOND ||
master->link.type == NI_IFTYPE_TEAM))
return 0;
} else
/* config lookup for master and redirect to master's enslave */
Expand Down
52 changes: 52 additions & 0 deletions src/teamd.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@
#define NI_TEAMD_CALL_STATE_ITEM_GET "StateItemValueGet"
#define NI_TEAMD_CALL_STATE_ITEM_SET "StateItemValueSet"

#define NI_TEAMD_CALL_PORT_ADD "PortAdd"


struct ni_teamd_client {
ni_dbus_client_t * dbus;
Expand Down Expand Up @@ -252,6 +254,56 @@ ni_teamd_ctl_state_set_item(ni_teamd_client_t *tdc, const char *item_name, const
return rv;
}

int
ni_teamd_ctl_port_add(ni_teamd_client_t *tdc, const char *portname)
{
ni_dbus_message_t *call, *reply;
DBusError error;
int rv = 0;

if (!tdc || ni_string_empty(portname))
return -NI_ERROR_INVALID_ARGS;

dbus_error_init(&error);
call = ni_dbus_object_call_new(tdc->proxy, NI_TEAMD_CALL_PORT_ADD, 0);
ni_dbus_message_append_string(call, portname);
if ((reply = ni_dbus_client_call(tdc->dbus, call, &error)) == NULL) {
rv = -NI_ERROR_DBUS_CALL_FAILED;
if (dbus_error_is_set(&error))
rv = ni_dbus_client_translate_error(tdc->dbus, &error);
}

if (rv < 0) {
ni_debug_application("Call to %s."NI_TEAMD_CALL_PORT_ADD"(%s) failed: %s",
ni_dbus_object_get_path(tdc->proxy), portname, ni_strerror(rv));
}

return rv;
}

int
ni_teamd_port_enslave(ni_netdev_t *master, ni_netdev_t *port, ni_team_port_config_t *config)
{
ni_teamd_client_t *tdc;
int ret = -1;

if (!master || !master->name || !port || !port->name)
return -1;

if (!(tdc = ni_teamd_client_open(master->name)))
return -1;

if (ni_teamd_ctl_port_add(tdc, port->name) < 0)
goto failure;

ret = 0;

failure:
ni_teamd_client_free(tdc);
return ret;
}


/*
* teamd discovery
*/
Expand Down
7 changes: 7 additions & 0 deletions src/teamd.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
#ifndef NI_TEAMD_CLIENT_H
#define NI_TEAMD_CLIENT_H

#include <wicked/types.h>
#include <wicked/team.h>

typedef struct ni_teamd_client ni_teamd_client_t;

ni_teamd_client_t * ni_teamd_client_open(const char*);
Expand All @@ -35,6 +38,10 @@ extern const char * ni_teamd_ctl_state_dump(ni_teamd_client_t *);
extern const char * ni_teamd_ctl_state_get_item(ni_teamd_client_t *, const char *);
extern int ni_teamd_ctl_state_set_item(ni_teamd_client_t *, const char *,
const char *);
extern int ni_teamd_ctl_port_add(ni_teamd_client_t *, const char *);

extern int ni_teamd_port_enslave(ni_netdev_t *, ni_netdev_t *, ni_team_port_config_t *);

extern int ni_teamd_discover(ni_netdev_t *);

extern int ni_teamd_service_start(const char *, const ni_team_t *);
Expand Down

0 comments on commit 27c599d

Please sign in to comment.