Lines Matching +full:module +full:- +full:instance

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
8 #include <linux/module.h>
33 [QRTR_TYPE_NEW_SERVER] = "new-server",
34 [QRTR_TYPE_DEL_SERVER] = "del-server",
35 [QRTR_TYPE_DEL_CLIENT] = "del-client",
36 [QRTR_TYPE_RESUME_TX] = "resume-tx",
39 [QRTR_TYPE_NEW_LOOKUP] = "new-lookup",
40 [QRTR_TYPE_DEL_LOOKUP] = "del-lookup",
45 unsigned int instance; member
51 unsigned int instance; member
59 unsigned int instance; member
85 node->id = node_id; in node_get()
86 xa_init(&node->servers); in node_get()
99 unsigned int ifilter = f->ifilter; in server_match()
101 if (f->service != 0 && srv->service != f->service) in server_match()
103 if (!ifilter && f->instance) in server_match()
106 return (srv->instance & ifilter) == f->instance; in server_match()
116 trace_qrtr_ns_service_announce_new(srv->service, srv->instance, in service_announce_new()
117 srv->node, srv->port); in service_announce_new()
124 pkt.server.service = cpu_to_le32(srv->service); in service_announce_new()
125 pkt.server.instance = cpu_to_le32(srv->instance); in service_announce_new()
126 pkt.server.node = cpu_to_le32(srv->node); in service_announce_new()
127 pkt.server.port = cpu_to_le32(srv->port); in service_announce_new()
143 trace_qrtr_ns_service_announce_del(srv->service, srv->instance, in service_announce_del()
144 srv->node, srv->port); in service_announce_del()
151 pkt.server.service = cpu_to_le32(srv->service); in service_announce_del()
152 pkt.server.instance = cpu_to_le32(srv->instance); in service_announce_del()
153 pkt.server.node = cpu_to_le32(srv->node); in service_announce_del()
154 pkt.server.port = cpu_to_le32(srv->port); in service_announce_del()
160 if (ret < 0 && ret != -ENODEV) in service_announce_del()
181 pkt.server.service = cpu_to_le32(srv->service); in lookup_notify()
182 pkt.server.instance = cpu_to_le32(srv->instance); in lookup_notify()
183 pkt.server.node = cpu_to_le32(srv->node); in lookup_notify()
184 pkt.server.port = cpu_to_le32(srv->port); in lookup_notify()
191 if (ret < 0 && ret != -ENODEV) in lookup_notify()
207 xa_for_each(&node->servers, index, srv) { in announce_servers()
210 if (ret == -ENODEV) in announce_servers()
221 unsigned int instance, in server_add() argument
236 srv->service = service; in server_add()
237 srv->instance = instance; in server_add()
238 srv->node = node_id; in server_add()
239 srv->port = port; in server_add()
246 old = xa_store(&node->servers, port, srv, GFP_KERNEL); in server_add()
250 srv->service, srv->instance, xa_err(old)); in server_add()
257 trace_qrtr_ns_server_add(srv->service, srv->instance, in server_add()
258 srv->node, srv->port); in server_add()
273 srv = xa_load(&node->servers, port); in server_del()
275 return -ENOENT; in server_del()
277 xa_erase(&node->servers, port); in server_del()
280 if (srv->node == qrtr_ns.local_node && bcast) in server_del()
286 if (lookup->service && lookup->service != srv->service) in server_del()
288 if (lookup->instance && lookup->instance != srv->instance) in server_del()
291 lookup_notify(&lookup->sq, srv, false); in server_del()
349 node = node_get(from->sq_node); in ctrl_cmd_bye()
354 xa_for_each(&node->servers, index, srv) in ctrl_cmd_bye()
355 server_del(node, srv->port, true); in ctrl_cmd_bye()
364 pkt.client.node = cpu_to_le32(from->sq_node); in ctrl_cmd_bye()
366 xa_for_each(&local_node->servers, index, srv) { in ctrl_cmd_bye()
368 sq.sq_node = srv->node; in ctrl_cmd_bye()
369 sq.sq_port = srv->port; in ctrl_cmd_bye()
375 if (ret < 0 && ret != -ENODEV) { in ctrl_cmd_bye()
403 if (from->sq_node != node_id) in ctrl_cmd_del_client()
404 return -EINVAL; in ctrl_cmd_del_client()
407 if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) in ctrl_cmd_del_client()
408 return -EINVAL; in ctrl_cmd_del_client()
413 if (lookup->sq.sq_node != node_id) in ctrl_cmd_del_client()
415 if (lookup->sq.sq_port != port) in ctrl_cmd_del_client()
418 list_del(&lookup->li); in ctrl_cmd_del_client()
440 xa_for_each(&local_node->servers, index, srv) { in ctrl_cmd_del_client()
442 sq.sq_node = srv->node; in ctrl_cmd_del_client()
443 sq.sq_port = srv->port; in ctrl_cmd_del_client()
449 if (ret < 0 && ret != -ENODEV) { in ctrl_cmd_del_client()
458 unsigned int service, unsigned int instance, in ctrl_cmd_new_server() argument
467 if (from->sq_node == qrtr_ns.local_node) { in ctrl_cmd_new_server()
468 node_id = from->sq_node; in ctrl_cmd_new_server()
469 port = from->sq_port; in ctrl_cmd_new_server()
472 srv = server_add(service, instance, node_id, port); in ctrl_cmd_new_server()
474 return -EINVAL; in ctrl_cmd_new_server()
476 if (srv->node == qrtr_ns.local_node) { in ctrl_cmd_new_server()
487 if (lookup->service && lookup->service != service) in ctrl_cmd_new_server()
489 if (lookup->instance && lookup->instance != instance) in ctrl_cmd_new_server()
492 lookup_notify(&lookup->sq, srv, true); in ctrl_cmd_new_server()
499 unsigned int service, unsigned int instance, in ctrl_cmd_del_server() argument
505 if (from->sq_node == qrtr_ns.local_node) { in ctrl_cmd_del_server()
506 node_id = from->sq_node; in ctrl_cmd_del_server()
507 port = from->sq_port; in ctrl_cmd_del_server()
511 if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) in ctrl_cmd_del_server()
512 return -EINVAL; in ctrl_cmd_del_server()
516 return -ENOENT; in ctrl_cmd_del_server()
524 unsigned int service, unsigned int instance) in ctrl_cmd_new_lookup() argument
534 if (from->sq_node != qrtr_ns.local_node) in ctrl_cmd_new_lookup()
535 return -EINVAL; in ctrl_cmd_new_lookup()
539 return -ENOMEM; in ctrl_cmd_new_lookup()
541 lookup->sq = *from; in ctrl_cmd_new_lookup()
542 lookup->service = service; in ctrl_cmd_new_lookup()
543 lookup->instance = instance; in ctrl_cmd_new_lookup()
544 list_add_tail(&lookup->li, &qrtr_ns.lookups); in ctrl_cmd_new_lookup()
548 filter.instance = instance; in ctrl_cmd_new_lookup()
551 xa_for_each(&node->servers, srv_idx, srv) { in ctrl_cmd_new_lookup()
566 unsigned int service, unsigned int instance) in ctrl_cmd_del_lookup() argument
574 if (lookup->sq.sq_node != from->sq_node) in ctrl_cmd_del_lookup()
576 if (lookup->sq.sq_port != from->sq_port) in ctrl_cmd_del_lookup()
578 if (lookup->service != service) in ctrl_cmd_del_lookup()
580 if (lookup->instance && lookup->instance != instance) in ctrl_cmd_del_lookup()
583 list_del(&lookup->li); in ctrl_cmd_del_lookup()
614 if (msglen == -EAGAIN) in qrtr_ns_worker()
623 cmd = le32_to_cpu(pkt->cmd); in qrtr_ns_worker()
639 le32_to_cpu(pkt->client.node), in qrtr_ns_worker()
640 le32_to_cpu(pkt->client.port)); in qrtr_ns_worker()
644 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
645 le32_to_cpu(pkt->server.instance), in qrtr_ns_worker()
646 le32_to_cpu(pkt->server.node), in qrtr_ns_worker()
647 le32_to_cpu(pkt->server.port)); in qrtr_ns_worker()
651 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
652 le32_to_cpu(pkt->server.instance), in qrtr_ns_worker()
653 le32_to_cpu(pkt->server.node), in qrtr_ns_worker()
654 le32_to_cpu(pkt->server.port)); in qrtr_ns_worker()
662 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
663 le32_to_cpu(pkt->server.instance)); in qrtr_ns_worker()
667 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
668 le32_to_cpu(pkt->server.instance)); in qrtr_ns_worker()
708 ret = -ENOMEM; in qrtr_ns_init()
712 qrtr_ns.sock->sk->sk_data_ready = qrtr_ns_data_ready; in qrtr_ns_init()
731 /* As the qrtr ns socket owner and creator is the same module, we have in qrtr_ns_init()
732 * to decrease the qrtr module reference count to guarantee that it in qrtr_ns_init()
734 * "rmmod" command is unable to make the qrtr module deleted after the in qrtr_ns_init()
735 * qrtr module is inserted successfully. in qrtr_ns_init()
741 * decrement the module reference count twice to ensure that it keeps in qrtr_ns_init()
743 * must bump the module reference count twice as well before the socket in qrtr_ns_init()
746 module_put(qrtr_ns.sock->ops->owner); in qrtr_ns_init()
747 module_put(qrtr_ns.sock->sk->sk_prot_creator->owner); in qrtr_ns_init()
765 * qrtr_ns_init(). This function is only called during module remove, in qrtr_ns_remove()
770 __module_get(qrtr_ns.sock->ops->owner); in qrtr_ns_remove()
771 __module_get(qrtr_ns.sock->sk->sk_prot_creator->owner); in qrtr_ns_remove()