/* * netlink/route/link/info-api.h Link Info API * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation version 2.1 * of the License. * * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> */ #ifndef NETLINK_LINK_INFO_API_H_ #define NETLINK_LINK_INFO_API_H_ #include <netlink/netlink.h> #ifdef __cplusplus extern "C" { #endif /** * @ingroup link_info * * Link info operations */ struct rtnl_link_info_ops { /** Name of operations, must match name on kernel side */ char * io_name; /** Reference count (internal, do not use) */ int io_refcnt; /** Called to assign an info type to a link. * Has to allocate enough resources to hold attributes. Can * use link->l_info to store a pointer. */ int (*io_alloc)(struct rtnl_link *); /** Called to parse the link info attribute. * Must parse the attribute and assign all values to the link. */ int (*io_parse)(struct rtnl_link *, struct nlattr *, struct nlattr *); /** Called when the link object is dumped. * Must dump the info type specific attributes. */ void (*io_dump[NL_DUMP_MAX+1])(struct rtnl_link *, struct nl_dump_params *); /** Called when a link object is cloned. * Must clone all info type specific attributes. */ int (*io_clone)(struct rtnl_link *, struct rtnl_link *); /** Called when construction a link netlink message. * Must append all info type specific attributes to the message. */ int (*io_put_attrs)(struct nl_msg *, struct rtnl_link *); /** Called to release all resources previously allocated * in either io_alloc() or io_parse(). */ void (*io_free)(struct rtnl_link *); struct rtnl_link_info_ops * io_next; }; extern struct rtnl_link_info_ops *rtnl_link_info_ops_lookup(const char *); extern int rtnl_link_register_info(struct rtnl_link_info_ops *); extern int rtnl_link_unregister_info(struct rtnl_link_info_ops *); #endif