Lines Matching full:service
51 * struct service_range - container for all bindings of a service range
52 * @lower: service range lower bound
53 * @upper: service range upper bound
54 * @tree_node: member of service range RB tree
71 * struct tipc_service - container for all published instances of a service type
72 * @type: 32 bit 'type' value for service
73 * @publ_cnt: increasing counter for publications in this service
74 * @ranges: rb tree containing all service ranges for this service
76 * @subscriptions: list of subscriptions for this service type
77 * @lock: spinlock controlling access to pertaining service ranges/publications
86 spinlock_t lock; /* Covers service range list */
102 * service_range_foreach_match - iterate over tipc service rbtree for each in RB_DECLARE_CALLBACKS_MAX()
104 * @sr: the service range pointer as a loop cursor in RB_DECLARE_CALLBACKS_MAX()
105 * @sc: the pointer to tipc service which holds the service range rbtree in RB_DECLARE_CALLBACKS_MAX()
118 * service_range_match_first - find first service range matching a range
119 * @n: the root node of service range rbtree for searching
122 * Return: the leftmost service range node in the rbtree that overlaps the
167 * service_range_match_next - find next service range matching a range
168 * @n: a node in service range rbtree from which the searching starts
171 * Return: the next service range node to the given node in the rbtree that
247 * tipc_service_create - create a service structure for the specified 'type'
253 struct tipc_service *service = kzalloc(sizeof(*service), GFP_ATOMIC); in tipc_service_create() local
255 if (!service) { in tipc_service_create()
256 pr_warn("Service creation failed, no memory\n"); in tipc_service_create()
260 spin_lock_init(&service->lock); in tipc_service_create()
261 service->type = type; in tipc_service_create()
262 service->ranges = RB_ROOT; in tipc_service_create()
263 INIT_HLIST_NODE(&service->service_list); in tipc_service_create()
264 INIT_LIST_HEAD(&service->subscriptions); in tipc_service_create()
265 hlist_add_head_rcu(&service->service_list, hd); in tipc_service_create()
266 return service; in tipc_service_create()
269 /* tipc_service_find_range - find service range matching publication parameters
363 * tipc_service_remove_publ - remove a publication from a service
396 * issue the prescribed number of events if there is any service
399 static void tipc_service_subscribe(struct tipc_service *service, in tipc_service_subscribe() argument
415 list_add(&sub->service_list, &service->subscriptions); in tipc_service_subscribe()
421 service_range_foreach_match(sr, service, ns.lower, ns.upper) { in tipc_service_subscribe()
448 struct tipc_service *service; in tipc_service_find() local
451 hlist_for_each_entry_rcu(service, service_head, service_list) { in tipc_service_find()
452 if (service->type == type) in tipc_service_find()
453 return service; in tipc_service_find()
513 /* Remove service range item if this was its last publication */ in tipc_nametbl_remove_publ()
519 /* Delete service item if this no more publications and subscriptions */ in tipc_nametbl_remove_publ()
530 * tipc_nametbl_translate - perform service instance to socket translation
722 /* tipc_nametbl_publish - add service binding to name table
758 * tipc_nametbl_withdraw - withdraw a service binding
841 /* Delete service item if no more publications and subscriptions */ in tipc_nametbl_unsubscribe()
873 * tipc_service_delete - purge all publications for a service and delete it
899 struct tipc_service *service; in tipc_nametbl_stop() local
910 hlist_for_each_entry_rcu(service, service_head, service_list) { in tipc_nametbl_stop()
911 tipc_service_delete(net, service); in tipc_nametbl_stop()
921 struct tipc_service *service, in __tipc_nl_add_nametable_publ() argument
959 if (nla_put_u32(msg->skb, TIPC_NLA_PUBL_TYPE, service->type)) in __tipc_nl_add_nametable_publ()
1018 struct tipc_service *service = NULL; in tipc_nl_service_list() local
1033 service = tipc_service_find(net, *last_type); in tipc_nl_service_list()
1034 if (!service) in tipc_nl_service_list()
1037 hlist_for_each_entry_rcu(service, head, service_list) in tipc_nl_service_list()
1039 if (!service) in tipc_nl_service_list()
1043 hlist_for_each_entry_from_rcu(service, service_list) { in tipc_nl_service_list()
1044 spin_lock_bh(&service->lock); in tipc_nl_service_list()
1045 err = __tipc_nl_service_range_list(msg, service, in tipc_nl_service_list()
1050 *last_type = service->type; in tipc_nl_service_list()
1051 spin_unlock_bh(&service->lock); in tipc_nl_service_list()
1054 spin_unlock_bh(&service->lock); in tipc_nl_service_list()