42 #include <netlink-local.h>
43 #include <netlink/netlink.h>
44 #include <netlink/utils.h>
45 #include <netlink/route/link.h>
46 #include <netlink/route/link/api.h>
48 static NL_LIST_HEAD(info_ops);
51 static NL_RW_LOCK(info_lock);
57 nl_list_for_each_entry(ops, &info_ops, io_list)
58 if (!strcmp(ops->
io_name, name))
81 nl_write_lock(&info_lock);
82 if ((ops = __rtnl_link_info_ops_lookup(name)))
84 nl_write_unlock(&info_lock);
118 nl_write_lock(&info_lock);
119 if (__rtnl_link_info_ops_lookup(ops->
io_name)) {
124 NL_DBG(1,
"Registered link info operations %s\n", ops->
io_name);
126 nl_list_add_tail(&ops->io_list, &info_ops);
128 nl_write_unlock(&info_lock);
149 int err = -NLE_OPNOTSUPP;
151 nl_write_lock(&info_lock);
153 nl_list_for_each_entry(t, &info_ops, io_list) {
160 nl_list_del(&t->io_list);
162 NL_DBG(1,
"Unregistered link info operations %s\n",
170 nl_write_unlock(&info_lock);
194 if (family == AF_UNSPEC || family >= AF_MAX)
197 nl_write_lock(&info_lock);
200 nl_write_unlock(&info_lock);
202 return af_ops[family];
239 if (!link->l_af_data[family]) {
243 link->l_af_data[family] = ops->
ao_alloc(link);
244 if (!link->l_af_data[family])
248 return link->l_af_data[family];
292 nl_write_lock(&info_lock);
301 NL_DBG(1,
"Registered link address family operations %u\n",
305 nl_write_unlock(&info_lock);
326 int err = -NLE_INVAL;
331 nl_write_lock(&info_lock);
333 err = -NLE_OBJ_NOTFOUND;
344 NL_DBG(1,
"Unregistered link address family operations %u\n",
348 nl_write_lock(&info_lock);