summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Graf <tgraf@suug.ch>2013-02-14 11:42:07 (GMT)
committerThomas Graf <tgraf@suug.ch>2013-02-14 11:42:22 (GMT)
commitee4122a12edcf7f10f03fbb7e35fe1388a8c3399 (patch)
tree537ffdd8ae52dc1e3d7f04f201d92737c7298275
parentbb9911b5a337aeba34b6be53a2ef654828a92897 (diff)
downloadlibnl-ee4122a12edcf7f10f03fbb7e35fe1388a8c3399.zip
libnl-ee4122a12edcf7f10f03fbb7e35fe1388a8c3399.tar.gz
libnl-ee4122a12edcf7f10f03fbb7e35fe1388a8c3399.tar.bz2
vlan: Provide rtnl_link_vlan_alloc()
Signed-off-by: Thomas Graf <tgraf@suug.ch>
-rw-r--r--doc/route.txt7
-rw-r--r--include/netlink/route/link/vlan.h4
-rw-r--r--lib/route/link/vlan.c23
-rw-r--r--tests/test-create-vlan.c7
4 files changed, 28 insertions, 13 deletions
diff --git a/doc/route.txt b/doc/route.txt
index 61a84c4..cd24eef 100644
--- a/doc/route.txt
+++ b/doc/route.txt
@@ -693,15 +693,12 @@ int master_index;
if (!(master_index = rtnl_link_name2i(link_cache, "eth0")))
/* error */
-/* allocate new link object to configure the vlan device */
-link = rtnl_link_alloc();
+/* allocate new link object of type vlan */
+link = rtnl_link_vlan_alloc();
/* set eth0 to be our master device */
rtnl_link_set_link(link, master_index);
-if ((err = rtnl_link_set_type(link, "vlan")) < 0)
- /* error */
-
rtnl_link_vlan_set_id(link, 10);
if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0)
diff --git a/include/netlink/route/link/vlan.h b/include/netlink/route/link/vlan.h
index 42768b6..f274163 100644
--- a/include/netlink/route/link/vlan.h
+++ b/include/netlink/route/link/vlan.h
@@ -6,7 +6,7 @@
* License as published by the Free Software Foundation version 2.1
* of the License.
*
- * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch>
+ * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>
*/
#ifndef NETLINK_LINK_VLAN_H_
@@ -27,6 +27,8 @@ struct vlan_map
#define VLAN_PRIO_MAX 7
+extern struct rtnl_link *rtnl_link_vlan_alloc(void);
+
extern int rtnl_link_is_vlan(struct rtnl_link *);
extern char * rtnl_link_vlan_flags2str(int, char *, size_t);
diff --git a/lib/route/link/vlan.c b/lib/route/link/vlan.c
index 4f44aa5..9bbe7d5 100644
--- a/lib/route/link/vlan.c
+++ b/lib/route/link/vlan.c
@@ -6,7 +6,7 @@
* License as published by the Free Software Foundation version 2.1
* of the License.
*
- * Copyright (c) 2003-2010 Thomas Graf <tgraf@suug.ch>
+ * Copyright (c) 2003-2013 Thomas Graf <tgraf@suug.ch>
*/
/**
@@ -341,6 +341,27 @@ static struct rtnl_link_info_ops vlan_info_ops = {
*/
/**
+ * Allocate link object of type VLAN
+ *
+ * @return Allocated link object or NULL.
+ */
+struct rtnl_link *rtnl_link_vlan_alloc(void)
+{
+ struct rtnl_link *link;
+ int err;
+
+ if (!(link = rtnl_link_alloc()))
+ return NULL;
+
+ if ((err = rtnl_link_set_type(link, "vlan")) < 0) {
+ rtnl_link_put(link);
+ return NULL;
+ }
+
+ return link;
+}
+
+/**
* Check if link is a VLAN link
* @arg link Link object
*
diff --git a/tests/test-create-vlan.c b/tests/test-create-vlan.c
index 00a4d91..64e478f 100644
--- a/tests/test-create-vlan.c
+++ b/tests/test-create-vlan.c
@@ -25,15 +25,10 @@ int main(int argc, char *argv[])
return -1;
}
- link = rtnl_link_alloc();
+ link = rtnl_link_vlan_alloc();
rtnl_link_set_link(link, master_index);
- if ((err = rtnl_link_set_type(link, "vlan")) < 0) {
- nl_perror(err, "Unable to set link info type");
- return err;
- }
-
rtnl_link_vlan_set_id(link, 10);
if ((err = rtnl_link_add(sk, link, NLM_F_CREATE)) < 0) {