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 + * Copyright (c) 2003-2013 Thomas Graf */ #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 + * Copyright (c) 2003-2013 Thomas Graf */ /** @@ -340,6 +340,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) {