bond: Provide rtnl_link_bond_alloc()
Signed-off-by: Thomas Graf <tgraf@suug.ch>
This commit is contained in:
parent
ee4122a12e
commit
1ecf98a23e
|
@ -645,9 +645,8 @@ This attribute is unused and obsoleted in all recent kernels.
|
||||||
|
|
||||||
struct rtnl_link *link;
|
struct rtnl_link *link;
|
||||||
|
|
||||||
link = rtnl_link_alloc();
|
link = rtnl_link_bond_alloc();
|
||||||
rtnl_link_set_name(link, "my_bond");
|
rtnl_link_set_name(link, "my_bond");
|
||||||
rtnl_link_set_type(link, "bond");
|
|
||||||
|
|
||||||
/* requires admin privileges */
|
/* requires admin privileges */
|
||||||
if (rtnl_link_add(sk, link, NLM_F_CREATE) < 0)
|
if (rtnl_link_add(sk, link, NLM_F_CREATE) < 0)
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* License as published by the Free Software Foundation version 2.1
|
* License as published by the Free Software Foundation version 2.1
|
||||||
* of the License.
|
* of the License.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
|
* Copyright (c) 2011-2013 Thomas Graf <tgraf@suug.ch>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef NETLINK_LINK_BONDING_H_
|
#ifndef NETLINK_LINK_BONDING_H_
|
||||||
|
@ -19,6 +19,8 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern struct rtnl_link *rtnl_link_bond_alloc(void);
|
||||||
|
|
||||||
extern int rtnl_link_bond_add(struct nl_sock *, const char *,
|
extern int rtnl_link_bond_add(struct nl_sock *, const char *,
|
||||||
struct rtnl_link *);
|
struct rtnl_link *);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* License as published by the Free Software Foundation version 2.1
|
* License as published by the Free Software Foundation version 2.1
|
||||||
* of the License.
|
* of the License.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011 Thomas Graf <tgraf@suug.ch>
|
* Copyright (c) 2011-2013 Thomas Graf <tgraf@suug.ch>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,6 +24,27 @@
|
||||||
#include <netlink/netlink.h>
|
#include <netlink/netlink.h>
|
||||||
#include <netlink-private/route/link/api.h>
|
#include <netlink-private/route/link/api.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate link object of type bond
|
||||||
|
*
|
||||||
|
* @return Allocated link object or NULL.
|
||||||
|
*/
|
||||||
|
struct rtnl_link *rtnl_link_bond_alloc(void)
|
||||||
|
{
|
||||||
|
struct rtnl_link *link;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if (!(link = rtnl_link_alloc()))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if ((err = rtnl_link_set_type(link, "bond")) < 0) {
|
||||||
|
rtnl_link_put(link);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return link;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new kernel bonding device
|
* Create a new kernel bonding device
|
||||||
* @arg sock netlink socket
|
* @arg sock netlink socket
|
||||||
|
@ -54,22 +75,17 @@ int rtnl_link_bond_add(struct nl_sock *sock, const char *name,
|
||||||
struct rtnl_link *link;
|
struct rtnl_link *link;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!(link = rtnl_link_alloc()))
|
if (!(link = rtnl_link_bond_alloc()))
|
||||||
return -NLE_NOMEM;
|
return -NLE_NOMEM;
|
||||||
|
|
||||||
if (!name) {
|
if (!name && opts)
|
||||||
if (opts)
|
|
||||||
name = rtnl_link_get_name(opts);
|
name = rtnl_link_get_name(opts);
|
||||||
}
|
|
||||||
|
|
||||||
if ((err = rtnl_link_set_type(link, "bond")) < 0)
|
|
||||||
goto errout;
|
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
rtnl_link_set_name(link, name);
|
rtnl_link_set_name(link, name);
|
||||||
|
|
||||||
err = rtnl_link_add(sock, link, NLM_F_CREATE);
|
err = rtnl_link_add(sock, link, NLM_F_CREATE);
|
||||||
errout:
|
|
||||||
rtnl_link_put(link);
|
rtnl_link_put(link);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
@ -94,12 +110,9 @@ int rtnl_link_bond_enslave_ifindex(struct nl_sock *sock, int master,
|
||||||
struct rtnl_link *link;
|
struct rtnl_link *link;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (!(link = rtnl_link_alloc()))
|
if (!(link = rtnl_link_bond_alloc()))
|
||||||
return -NLE_NOMEM;
|
return -NLE_NOMEM;
|
||||||
|
|
||||||
if ((err = rtnl_link_set_type(link, "bond")) < 0)
|
|
||||||
goto errout;
|
|
||||||
|
|
||||||
rtnl_link_set_ifindex(link, slave);
|
rtnl_link_set_ifindex(link, slave);
|
||||||
rtnl_link_set_master(link, master);
|
rtnl_link_set_master(link, master);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include <netlink/netlink.h>
|
#include <netlink/netlink.h>
|
||||||
#include <netlink/route/link.h>
|
#include <netlink/route/link.h>
|
||||||
|
#include <netlink/route/link/bonding.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
@ -13,14 +14,9 @@ int main(int argc, char *argv[])
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
link = rtnl_link_alloc();
|
link = rtnl_link_bond_alloc();
|
||||||
rtnl_link_set_name(link, "my_bond");
|
rtnl_link_set_name(link, "my_bond");
|
||||||
|
|
||||||
if ((err = rtnl_link_set_type(link, "bond")) < 0) {
|
|
||||||
nl_perror(err, "Unable to set link info type");
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
|
if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {
|
||||||
nl_perror(err, "Unable to add link");
|
nl_perror(err, "Unable to add link");
|
||||||
return err;
|
return err;
|
||||||
|
|
Reference in New Issue