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()
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()
207 xa_for_each(&node->servers, index, srv) { in announce_servers()
218 unsigned int instance, in server_add() argument
233 srv->service = service; in server_add()
234 srv->instance = instance; in server_add()
235 srv->node = node_id; in server_add()
236 srv->port = port; in server_add()
243 old = xa_store(&node->servers, port, srv, GFP_KERNEL); in server_add()
247 srv->service, srv->instance, xa_err(old)); in server_add()
254 trace_qrtr_ns_server_add(srv->service, srv->instance, in server_add()
255 srv->node, srv->port); in server_add()
270 srv = xa_load(&node->servers, port); in server_del()
272 return -ENOENT; in server_del()
274 xa_erase(&node->servers, port); in server_del()
277 if (srv->node == qrtr_ns.local_node && bcast) in server_del()
283 if (lookup->service && lookup->service != srv->service) in server_del()
285 if (lookup->instance && lookup->instance != srv->instance) in server_del()
288 lookup_notify(&lookup->sq, srv, false); in server_del()
346 node = node_get(from->sq_node); in ctrl_cmd_bye()
351 xa_for_each(&node->servers, index, srv) in ctrl_cmd_bye()
352 server_del(node, srv->port, true); in ctrl_cmd_bye()
361 pkt.client.node = cpu_to_le32(from->sq_node); in ctrl_cmd_bye()
363 xa_for_each(&local_node->servers, index, srv) { in ctrl_cmd_bye()
365 sq.sq_node = srv->node; in ctrl_cmd_bye()
366 sq.sq_port = srv->port; in ctrl_cmd_bye()
400 if (from->sq_node != node_id) in ctrl_cmd_del_client()
401 return -EINVAL; in ctrl_cmd_del_client()
404 if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) in ctrl_cmd_del_client()
405 return -EINVAL; in ctrl_cmd_del_client()
410 if (lookup->sq.sq_node != node_id) in ctrl_cmd_del_client()
412 if (lookup->sq.sq_port != port) in ctrl_cmd_del_client()
415 list_del(&lookup->li); in ctrl_cmd_del_client()
437 xa_for_each(&local_node->servers, index, srv) { in ctrl_cmd_del_client()
439 sq.sq_node = srv->node; in ctrl_cmd_del_client()
440 sq.sq_port = srv->port; in ctrl_cmd_del_client()
455 unsigned int service, unsigned int instance, in ctrl_cmd_new_server() argument
464 if (from->sq_node == qrtr_ns.local_node) { in ctrl_cmd_new_server()
465 node_id = from->sq_node; in ctrl_cmd_new_server()
466 port = from->sq_port; in ctrl_cmd_new_server()
469 srv = server_add(service, instance, node_id, port); in ctrl_cmd_new_server()
471 return -EINVAL; in ctrl_cmd_new_server()
473 if (srv->node == qrtr_ns.local_node) { in ctrl_cmd_new_server()
484 if (lookup->service && lookup->service != service) in ctrl_cmd_new_server()
486 if (lookup->instance && lookup->instance != instance) in ctrl_cmd_new_server()
489 lookup_notify(&lookup->sq, srv, true); in ctrl_cmd_new_server()
496 unsigned int service, unsigned int instance, in ctrl_cmd_del_server() argument
502 if (from->sq_node == qrtr_ns.local_node) { in ctrl_cmd_del_server()
503 node_id = from->sq_node; in ctrl_cmd_del_server()
504 port = from->sq_port; in ctrl_cmd_del_server()
508 if (from->sq_node == qrtr_ns.local_node && from->sq_port != port) in ctrl_cmd_del_server()
509 return -EINVAL; in ctrl_cmd_del_server()
513 return -ENOENT; in ctrl_cmd_del_server()
521 unsigned int service, unsigned int instance) in ctrl_cmd_new_lookup() argument
531 if (from->sq_node != qrtr_ns.local_node) in ctrl_cmd_new_lookup()
532 return -EINVAL; in ctrl_cmd_new_lookup()
536 return -ENOMEM; in ctrl_cmd_new_lookup()
538 lookup->sq = *from; in ctrl_cmd_new_lookup()
539 lookup->service = service; in ctrl_cmd_new_lookup()
540 lookup->instance = instance; in ctrl_cmd_new_lookup()
541 list_add_tail(&lookup->li, &qrtr_ns.lookups); in ctrl_cmd_new_lookup()
545 filter.instance = instance; in ctrl_cmd_new_lookup()
548 xa_for_each(&node->servers, srv_idx, srv) { in ctrl_cmd_new_lookup()
563 unsigned int service, unsigned int instance) in ctrl_cmd_del_lookup() argument
571 if (lookup->sq.sq_node != from->sq_node) in ctrl_cmd_del_lookup()
573 if (lookup->sq.sq_port != from->sq_port) in ctrl_cmd_del_lookup()
575 if (lookup->service != service) in ctrl_cmd_del_lookup()
577 if (lookup->instance && lookup->instance != instance) in ctrl_cmd_del_lookup()
580 list_del(&lookup->li); in ctrl_cmd_del_lookup()
611 if (msglen == -EAGAIN) in qrtr_ns_worker()
620 cmd = le32_to_cpu(pkt->cmd); in qrtr_ns_worker()
636 le32_to_cpu(pkt->client.node), in qrtr_ns_worker()
637 le32_to_cpu(pkt->client.port)); in qrtr_ns_worker()
641 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
642 le32_to_cpu(pkt->server.instance), in qrtr_ns_worker()
643 le32_to_cpu(pkt->server.node), in qrtr_ns_worker()
644 le32_to_cpu(pkt->server.port)); in qrtr_ns_worker()
648 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
649 le32_to_cpu(pkt->server.instance), in qrtr_ns_worker()
650 le32_to_cpu(pkt->server.node), in qrtr_ns_worker()
651 le32_to_cpu(pkt->server.port)); in qrtr_ns_worker()
659 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
660 le32_to_cpu(pkt->server.instance)); in qrtr_ns_worker()
664 le32_to_cpu(pkt->server.service), in qrtr_ns_worker()
665 le32_to_cpu(pkt->server.instance)); in qrtr_ns_worker()
705 ret = -ENOMEM; in qrtr_ns_init()
709 qrtr_ns.sock->sk->sk_data_ready = qrtr_ns_data_ready; in qrtr_ns_init()
728 /* As the qrtr ns socket owner and creator is the same module, we have in qrtr_ns_init()
729 * to decrease the qrtr module reference count to guarantee that it in qrtr_ns_init()
731 * "rmmod" command is unable to make the qrtr module deleted after the in qrtr_ns_init()
732 * qrtr module is inserted successfully. in qrtr_ns_init()
738 * decrement the module reference count twice to ensure that it keeps in qrtr_ns_init()
740 * must bump the module reference count twice as well before the socket in qrtr_ns_init()
743 module_put(qrtr_ns.sock->ops->owner); in qrtr_ns_init()
744 module_put(qrtr_ns.sock->sk->sk_prot_creator->owner); in qrtr_ns_init()
762 * qrtr_ns_init(). This function is only called during module remove, in qrtr_ns_remove()
767 __module_get(qrtr_ns.sock->ops->owner); in qrtr_ns_remove()
768 __module_get(qrtr_ns.sock->sk->sk_prot_creator->owner); in qrtr_ns_remove()