Lines Matching full:ops
29 static struct genl_cmd *lookup_cmd(struct genl_ops *ops, int cmd_id) in lookup_cmd() argument
34 for (i = 0; i < ops->o_ncmds; i++) { in lookup_cmd()
35 cmd = &ops->o_cmds[i]; in lookup_cmd()
44 struct genl_ops *ops, struct nl_cache_ops *cache_ops, void *arg) in cmd_msg_parser() argument
54 if (!(cmd = lookup_cmd(ops, ghdr->cmd))) in cmd_msg_parser()
65 GENL_HDRSIZE(ops->o_hdrsize), in cmd_msg_parser()
85 static int genl_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, in genl_msg_parser() argument
88 if (ops->co_genl == NULL) in genl_msg_parser()
91 return cmd_msg_parser(who, nlh, ops->co_genl, ops, pp); in genl_msg_parser()
96 struct genl_ops *ops; in lookup_family() local
98 nl_list_for_each_entry(ops, &genl_ops_list, o_list) { in lookup_family()
99 if (ops->o_id == family) in lookup_family()
100 return ops; in lookup_family()
108 struct genl_ops *ops; in lookup_family_by_name() local
110 nl_list_for_each_entry(ops, &genl_ops_list, o_list) { in lookup_family_by_name()
111 if (!strcmp(ops->o_name, name)) in lookup_family_by_name()
112 return ops; in lookup_family_by_name()
120 struct genl_ops *ops; in genl_op2name() local
123 if ((ops = lookup_family(family))) { in genl_op2name()
124 for (i = 0; i < ops->o_ncmds; i++) { in genl_op2name()
126 cmd = &ops->o_cmds[i]; in genl_op2name()
148 * @arg ops Generic Netlink family definition
164 int genl_register_family(struct genl_ops *ops) in genl_register_family() argument
166 if (!ops->o_name) in genl_register_family()
169 if (ops->o_cmds && ops->o_ncmds <= 0) in genl_register_family()
172 if (ops->o_id && lookup_family(ops->o_id)) in genl_register_family()
175 if (lookup_family_by_name(ops->o_name)) in genl_register_family()
178 nl_list_add_tail(&ops->o_list, &genl_ops_list); in genl_register_family()
185 * @arg ops Generic Netlink family definition
194 int genl_unregister_family(struct genl_ops *ops) in genl_unregister_family() argument
196 nl_list_del(&ops->o_list); in genl_unregister_family()
211 struct genl_ops *ops; in genl_handle_msg() local
216 if (!(ops = lookup_family(nlh->nlmsg_type))) in genl_handle_msg()
219 return cmd_msg_parser(nlmsg_get_src(msg), nlh, ops, NULL, arg); in genl_handle_msg()
231 * @arg ops Cache operations definition
241 int genl_register(struct nl_cache_ops *ops) in genl_register() argument
245 if (ops->co_protocol != NETLINK_GENERIC) { in genl_register()
250 if (ops->co_hdrsize < GENL_HDRSIZE(0)) { in genl_register()
255 if (ops->co_genl == NULL) { in genl_register()
260 ops->co_genl->o_cache_ops = ops; in genl_register()
261 ops->co_genl->o_hdrsize = ops->co_hdrsize - GENL_HDRLEN; in genl_register()
262 ops->co_genl->o_name = ops->co_msgtypes[0].mt_name; in genl_register()
263 ops->co_genl->o_id = ops->co_msgtypes[0].mt_id; in genl_register()
264 ops->co_msg_parser = genl_msg_parser; in genl_register()
266 if ((err = genl_register_family(ops->co_genl)) < 0) in genl_register()
269 err = nl_cache_mngt_register(ops); in genl_register()
276 * @arg ops Cache operations definition
278 void genl_unregister(struct nl_cache_ops *ops) in genl_unregister() argument
280 if (!ops) in genl_unregister()
283 nl_cache_mngt_unregister(ops); in genl_unregister()
285 genl_unregister_family(ops->co_genl); in genl_unregister()
291 static int __genl_ops_resolve(struct nl_cache *ctrl, struct genl_ops *ops) in __genl_ops_resolve() argument
295 family = genl_ctrl_search_by_name(ctrl, ops->o_name); in __genl_ops_resolve()
297 ops->o_id = genl_family_get_id(family); in __genl_ops_resolve()
299 if (ops->o_cache_ops) in __genl_ops_resolve()
300 ops->o_cache_ops->co_msgtypes[0].mt_id = ops->o_id; in __genl_ops_resolve()
310 int genl_resolve_id(struct genl_ops *ops) in genl_resolve_id() argument
316 if (ops->o_id != 0) in genl_resolve_id()
319 if (!ops->o_name) in genl_resolve_id()
328 err = genl_ops_resolve(sk, ops); in genl_resolve_id()
345 * @arg ops Generic Netlink family definition
351 int genl_ops_resolve(struct nl_sock *sk, struct genl_ops *ops) in genl_ops_resolve() argument
359 err = __genl_ops_resolve(ctrl, ops); in genl_ops_resolve()
382 struct genl_ops *ops; in genl_mngt_resolve() local
388 nl_list_for_each_entry(ops, &genl_ops_list, o_list) { in genl_mngt_resolve()
389 err = __genl_ops_resolve(ctrl, ops); in genl_mngt_resolve()