Like genl_ops_resolve() but uses its own socket.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
#define GENL_HDRSIZE(hdrlen) (GENL_HDRLEN + (hdrlen))
+extern int genl_resolve_id(struct genl_ops *ops);
+
#endif
return -NLE_OBJ_NOTFOUND;
}
+
+int genl_resolve_id(struct genl_ops *ops)
+{
+ struct nl_sock *sk;
+ int err = 0;
+
+ /* Check if resolved already */
+ if (ops->o_id != GENL_ID_GENERATE)
+ return 0;
+
+ if (!ops->o_name)
+ return -NLE_INVAL;
+
+ if (!(sk = nl_socket_alloc()))
+ return -NLE_NOMEM;
+
+ if ((err = genl_connect(sk)) < 0)
+ goto errout_free;
+
+ err = genl_ops_resolve(sk, ops);
+
+errout_free:
+ nl_socket_free(sk);
+
+ return err;
+}
/** @endcond */
/**