summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 61a84c45..cd24eefa 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 42768b60..f2741635 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 4f44aa55..9bbe7d5b 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 00a4d91b..64e478f4 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) {