Lines Matching refs:fd_data

770 static void necp_fd_insert_stats_arena(struct necp_fd_data *fd_data, struct necp_arena_info *nai);
771 static void necp_fd_remove_stats_arena(struct necp_fd_data *fd_data, struct necp_arena_info *nai);
772 static struct necp_arena_info *necp_fd_mredirect_stats_arena(struct necp_fd_data *fd_data, struct p…
779 static int necp_arena_initialize(struct necp_fd_data *fd_data, bool locked);
780 static int necp_stats_initialize(struct necp_fd_data *fd_data, struct necp_client *client,
782 static int necp_arena_create(struct necp_fd_data *fd_data, size_t obj_size, size_t obj_cnt, struct …
783 static int necp_arena_stats_obj_alloc(struct necp_fd_data *fd_data, mach_vm_offset_t *off, struct n…
784 static void necp_arena_stats_obj_free(struct necp_fd_data *fd_data, struct necp_arena_info *stats_a…
785 static void necp_stats_arenas_destroy(struct necp_fd_data *fd_data, boolean_t closing);
787 static int necp_sysctl_arena_initialize(struct necp_fd_data *fd_data, bool locked);
788 static void necp_sysctl_arena_destroy(struct necp_fd_data *fd_data);
789 static void *necp_arena_sysctls_obj(struct necp_fd_data *fd_data, mach_vm_offset_t *off, size_t *si…
911 necp_fd_notify(struct necp_fd_data *fd_data, bool locked) in necp_fd_notify() argument
913 struct selinfo *si = &fd_data->si; in necp_fd_notify()
916 NECP_FD_LOCK(fd_data); in necp_fd_notify()
926 NECP_FD_UNLOCK(fd_data); in necp_fd_notify()
944 necp_fd_poll(struct necp_fd_data *fd_data, int events, void *wql, struct proc *p, int is_kevent) in necp_fd_poll() argument
951 if (fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER) { in necp_fd_poll()
953 if (!TAILQ_EMPTY(&fd_data->update_list)) { in necp_fd_poll()
960 RB_FOREACH(client, _necp_client_tree, &fd_data->clients) { in necp_fd_poll()
971 if (has_unread_clients || fd_data->request_in_process_flow_divert) { in necp_fd_poll()
1094 struct necp_fd_data *fd_data = NULL; in necpop_select() local
1099 fd_data = (struct necp_fd_data *)fp_get_data(fp); in necpop_select()
1100 if (fd_data == NULL) { in necpop_select()
1117 NECP_FD_LOCK(fd_data); in necpop_select()
1118 revents = necp_fd_poll(fd_data, events, wql, procp, 0); in necpop_select()
1119 NECP_FD_UNLOCK(fd_data); in necpop_select()
1127 struct necp_fd_data *fd_data = (struct necp_fd_data *)knote_kn_hook_get_raw(kn); in necp_fd_knrdetach() local
1128 struct selinfo *si = &fd_data->si; in necp_fd_knrdetach()
1130 NECP_FD_LOCK(fd_data); in necp_fd_knrdetach()
1132 NECP_FD_UNLOCK(fd_data); in necp_fd_knrdetach()
1145 struct necp_fd_data *fd_data; in necp_fd_knrprocess() local
1149 fd_data = (struct necp_fd_data *)knote_kn_hook_get_raw(kn); in necp_fd_knrprocess()
1151 NECP_FD_LOCK(fd_data); in necp_fd_knrprocess()
1152 revents = necp_fd_poll(fd_data, POLLIN, NULL, current_proc(), 1); in necp_fd_knrprocess()
1157 NECP_FD_UNLOCK(fd_data); in necp_fd_knrprocess()
1165 struct necp_fd_data *fd_data; in necp_fd_knrtouch() local
1168 fd_data = (struct necp_fd_data *)knote_kn_hook_get_raw(kn); in necp_fd_knrtouch()
1170 NECP_FD_LOCK(fd_data); in necp_fd_knrtouch()
1171 revents = necp_fd_poll(fd_data, POLLIN, NULL, current_proc(), 1); in necp_fd_knrtouch()
1172 NECP_FD_UNLOCK(fd_data); in necp_fd_knrtouch()
1189 struct necp_fd_data *fd_data = NULL; in necpop_kqfilter() local
1198 fd_data = (struct necp_fd_data *)fp_get_data(fp); in necpop_kqfilter()
1199 if (fd_data == NULL) { in necpop_kqfilter()
1205 NECP_FD_LOCK(fd_data); in necpop_kqfilter()
1207 knote_kn_hook_set_raw(kn, fd_data); in necpop_kqfilter()
1208 KNOTE_ATTACH(&fd_data->si.si_note, kn); in necpop_kqfilter()
1210 revents = necp_fd_poll(fd_data, POLLIN, NULL, current_proc(), 1); in necpop_kqfilter()
1212 NECP_FD_UNLOCK(fd_data); in necpop_kqfilter()
1443 necp_destroy_flow_stats(struct necp_fd_data *fd_data, in necp_destroy_flow_stats() argument
1448 NECP_FD_ASSERT_LOCKED(fd_data); in necp_destroy_flow_stats()
1476 …necp_arena_stats_obj_free(fd_data, flow_registration->stats_arena, &flow_registration->kstats_kadd… in necp_destroy_flow_stats()
2015 struct necp_fd_data * __single fd_data = NULL; in necpop_close() local
2018 fd_data = (struct necp_fd_data *)fg_get_data(fg); in necpop_close()
2021 if (fd_data != NULL) { in necpop_close()
2026 if (fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER) { in necpop_close()
2028 LIST_REMOVE(fd_data, chain); in necpop_close()
2032 LIST_REMOVE(fd_data, chain); in necpop_close()
2036 NECP_FD_LOCK(fd_data); in necpop_close()
2037 pid_t pid = fd_data->proc_pid; in necpop_close()
2042 (void)necp_defunct_client_fd_locked_inner(fd_data, &defunct_list, false); in necpop_close()
2046 RB_FOREACH_SAFE(flow_registration, _necp_fd_flow_tree, &fd_data->flows, temp_flow_registration) { in necpop_close()
2048 necp_destroy_flow_stats(fd_data, flow_registration, NULL, TRUE); in necpop_close()
2053 RB_REMOVE(_necp_fd_flow_tree, &fd_data->flows, flow_registration); in necpop_close()
2058 RB_FOREACH_SAFE(client, _necp_client_tree, &fd_data->clients, temp_client) { in necpop_close()
2067 RB_REMOVE(_necp_client_tree, &fd_data->clients, client); in necpop_close()
2073 TAILQ_FOREACH_SAFE(client_update, &fd_data->update_list, chain, temp_update) { in necpop_close()
2075 TAILQ_REMOVE(&fd_data->update_list, client_update, chain); in necpop_close()
2078 fd_data->update_count = 0; in necpop_close()
2082 necp_stats_arenas_destroy(fd_data, TRUE); in necpop_close()
2083 ASSERT(fd_data->stats_arena_active == NULL); in necpop_close()
2084 ASSERT(LIST_EMPTY(&fd_data->stats_arena_list)); in necpop_close()
2087 necp_sysctl_arena_destroy(fd_data); in necpop_close()
2088 ASSERT(fd_data->sysctl_arena == NULL); in necpop_close()
2091 NECP_FD_UNLOCK(fd_data); in necpop_close()
2093 selthreadclear(&fd_data->si); in necpop_close()
2095 lck_mtx_destroy(&fd_data->fd_lock, &necp_fd_mtx_grp); in necpop_close()
2097 if (fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER) { in necpop_close()
2103 kfree_type(struct necp_fd_data, fd_data); in necpop_close()
2127 struct fileproc **fpp, struct necp_fd_data **fd_data) in necp_find_fd_data() argument
2133 *fd_data = (struct necp_fd_data *)fp_get_data(fp); in necp_find_fd_data()
2136 if ((*fd_data)->necp_fd_type != necp_fd_type_client) { in necp_find_fd_data()
3596 necp_client_create_flow_registration(struct necp_fd_data *fd_data, struct necp_client *client) in necp_client_create_flow_registration() argument
3598 NECP_FD_ASSERT_LOCKED(fd_data); in necp_client_create_flow_registration()
3612 RB_INSERT(_necp_fd_flow_tree, &fd_data->flows, new_registration); in necp_client_create_flow_registration()
7711 struct necp_fd_data * __single fd_data = NULL; in necp_open() local
7737 fd_data = kalloc_type(struct necp_fd_data, Z_WAITOK | Z_ZERO | Z_NOFAIL); in necp_open()
7739 fd_data->necp_fd_type = necp_fd_type_client; in necp_open()
7740 fd_data->flags = uap->flags; in necp_open()
7741 RB_INIT(&fd_data->clients); in necp_open()
7742 RB_INIT(&fd_data->flows); in necp_open()
7743 TAILQ_INIT(&fd_data->update_list); in necp_open()
7744 lck_mtx_init(&fd_data->fd_lock, &necp_fd_mtx_grp, &necp_fd_mtx_attr); in necp_open()
7745 klist_init(&fd_data->si.si_note); in necp_open()
7746 fd_data->proc_pid = proc_pid(p); in necp_open()
7748 LIST_INIT(&fd_data->stats_arena_list); in necp_open()
7754 fp_set_data(fp, fd_data); in necp_open()
7763 if (fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER) { in necp_open()
7765 LIST_INSERT_HEAD(&necp_fd_observer_list, fd_data, chain); in necp_open()
7774 necp_client_update_observer_add_internal(fd_data, existing_client); in necp_open()
7775 necp_client_update_observer_update_internal(fd_data, existing_client); in necp_open()
7781 LIST_INSERT_HEAD(&necp_fd_list, fd_data, chain); in necp_open()
7794 if (fd_data != NULL) { in necp_open()
7795 kfree_type(struct necp_fd_data, fd_data); in necp_open()
7808 necp_client_add(struct proc *p, struct necp_fd_data *fd_data, struct necp_client_action_args *uap, … in necp_client_add() argument
7815 if (fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER) { in necp_client_add()
7839 client->proc_pid = fd_data->proc_pid; // Save off proc pid in case the client will persist past fd in necp_client_add()
7840 client->agent_handle = (void *)fd_data; in necp_client_add()
7998 NECP_FD_LOCK(fd_data); in necp_client_add()
7999 parent = necp_client_fd_find_client_unlocked(fd_data, parsed_parameters.parent_uuid); in necp_client_add()
8009 NECP_FD_UNLOCK(fd_data); in necp_client_add()
8077 NECP_FD_LOCK(fd_data); in necp_client_add()
8078 RB_INSERT(_necp_client_tree, &fd_data->clients, client); in necp_client_add()
8086 (void)necp_update_client_result(current_proc(), fd_data, client, NULL); in necp_client_add()
8089 NECP_FD_UNLOCK(fd_data); in necp_client_add()
8108 necp_client_claim(struct proc *p, struct necp_fd_data *fd_data, struct necp_client_action_args *uap… in necp_client_claim() argument
8163 client->proc_pid = fd_data->proc_pid; // Transfer client to claiming pid in necp_client_claim()
8164 client->agent_handle = (void *)fd_data; in necp_client_claim()
8170 NECP_FD_LOCK(fd_data); in necp_client_claim()
8171 RB_INSERT(_necp_client_tree, &fd_data->clients, client); in necp_client_claim()
8173 (void)necp_update_client_result(current_proc(), fd_data, client, NULL); in necp_client_claim()
8175 NECP_FD_UNLOCK(fd_data); in necp_client_claim()
8186 necp_client_remove(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *retval) in necp_client_remove() argument
8216 NECP_FD_LOCK(fd_data); in necp_client_remove()
8218 pid_t pid = fd_data->proc_pid; in necp_client_remove()
8219 struct necp_client *client = necp_client_fd_find_client_unlocked(fd_data, client_id); in necp_client_remove()
8227 RB_FOREACH_SAFE(flow_registration, _necp_fd_flow_tree, &fd_data->flows, temp_flow_registration) { in necp_client_remove()
8230 necp_destroy_flow_stats(fd_data, flow_registration, NULL, TRUE); in necp_client_remove()
8235 RB_REMOVE(_necp_fd_flow_tree, &fd_data->flows, flow_registration); in necp_client_remove()
8251 RB_REMOVE(_necp_client_tree, &fd_data->clients, client); in necp_client_remove()
8259 if ((fd_data->stats_arena_active != NULL && fd_data->stats_arena_active->nai_use_count == 3) || in necp_client_remove()
8260 (fd_data->stats_arena_active == NULL && !LIST_EMPTY(&fd_data->stats_arena_list))) { in necp_client_remove()
8271 NECP_FD_UNLOCK(fd_data); in necp_client_remove()
8302 necp_client_remove_flow(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *ret… in necp_client_remove_flow() argument
8331 NECP_FD_LOCK(fd_data); in necp_client_remove_flow()
8333 …struct necp_client_flow_registration *flow_registration = necp_client_fd_find_flow(fd_data, flow_i… in necp_client_remove_flow()
8337 necp_destroy_flow_stats(fd_data, flow_registration, &flow_ifnet_stats, TRUE); in necp_client_remove_flow()
8342 RB_REMOVE(_necp_fd_flow_tree, &fd_data->flows, flow_registration); in necp_client_remove_flow()
8349 NECP_FD_UNLOCK(fd_data); in necp_client_remove_flow()
8357 necp_destroy_client_flow_registration(client, flow_registration, fd_data->proc_pid, abort); in necp_client_remove_flow()
8921 necp_client_copy(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *retval) in necp_client_copy() argument
8956 NECP_FD_LOCK(fd_data); in necp_client_copy()
8964 RB_FOREACH(find_client, _necp_client_tree, &fd_data->clients) { in necp_client_copy()
8974 if (client == NULL && fd_data->request_in_process_flow_divert) { in necp_client_copy()
8980 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_copy()
8992 fd_data->request_in_process_flow_divert = false; in necp_client_copy()
9011 NECP_FD_UNLOCK(fd_data); in necp_client_copy()
9014 if (fd_data->flags & NECP_OPEN_FLAG_OBSERVER) { in necp_client_copy()
9047 necp_client_copy_client_update(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, i… in necp_client_copy_client_update() argument
9053 if (!(fd_data->flags & NECP_OPEN_FLAG_PUSH_OBSERVER)) { in necp_client_copy_client_update()
9068 NECP_FD_LOCK(fd_data); in necp_client_copy_client_update()
9069 struct necp_client_update *client_update = TAILQ_FIRST(&fd_data->update_list); in necp_client_copy_client_update()
9071 TAILQ_REMOVE(&fd_data->update_list, client_update, chain); in necp_client_copy_client_update()
9072 VERIFY(fd_data->update_count > 0); in necp_client_copy_client_update()
9073 fd_data->update_count--; in necp_client_copy_client_update()
9075 NECP_FD_UNLOCK(fd_data); in necp_client_copy_client_update()
9221 necp_client_list(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *retval) in necp_client_list() argument
9235 if (!(fd_data->flags & NECP_OPEN_FLAG_OBSERVER)) { in necp_client_list()
9312 necp_client_add_flow(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *retval) in necp_client_add_flow() argument
9368 NECP_FD_LOCK(fd_data); in necp_client_add_flow()
9369 pid_t pid = fd_data->proc_pid; in necp_client_add_flow()
9372 NECP_FD_UNLOCK(fd_data); in necp_client_add_flow()
9378 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_add_flow()
9381 NECP_FD_UNLOCK(fd_data); in necp_client_add_flow()
9391 …client_flow_registration *new_registration = necp_client_create_flow_registration(fd_data, client); in necp_client_add_flow()
9395 NECP_FD_UNLOCK(fd_data); in necp_client_add_flow()
9509 …if (!necp_assign_client_result_locked(proc, fd_data, client, new_registration, add_request->agent_… in necp_client_add_flow()
9540 …if (error == 0 && add_request->stats_request_count > 0 && necp_arena_initialize(fd_data, true) == … in necp_client_add_flow()
9551 (void)necp_stats_initialize(fd_data, client, new_registration, &bufreq); in necp_client_add_flow()
9607 necp_destroy_flow_stats(fd_data, new_registration, NULL, false); in necp_client_add_flow()
9612 RB_REMOVE(_necp_fd_flow_tree, &fd_data->flows, new_registration); in necp_client_add_flow()
9613 necp_destroy_client_flow_registration(client, new_registration, fd_data->proc_pid, true); in necp_client_add_flow()
9618 NECP_FD_UNLOCK(fd_data); in necp_client_add_flow()
9651 necp_client_request_nexus(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *r… in necp_client_request_nexus() argument
9671 NECP_FD_LOCK(fd_data); in necp_client_request_nexus()
9672 pid_t pid = fd_data->proc_pid; in necp_client_request_nexus()
9675 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9681 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_request_nexus()
9683 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9724 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9731 …client_flow_registration *new_registration = necp_client_create_flow_registration(fd_data, client); in necp_client_request_nexus()
9735 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9758 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9767 if (!necp_assign_client_result_locked(proc, fd_data, client, new_registration, nexus_uuid, in necp_client_request_nexus()
9774 necp_arena_initialize(fd_data, true) == 0) { in necp_client_request_nexus()
9780 (void)necp_stats_initialize(fd_data, client, new_registration, &bufreq); in necp_client_request_nexus()
9790 NECP_FD_UNLOCK(fd_data); in necp_client_request_nexus()
9843 necp_client_agent_action(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *re… in necp_client_agent_action() argument
9883 NECP_FD_LOCK(fd_data); in necp_client_agent_action()
9884 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_agent_action()
9932 fd_data->proc_pid, in necp_client_agent_action()
9965 fd_data->proc_pid, in necp_client_agent_action()
9986 if (uuid_compare(agent_uuid, fd_data->reported_agents.agent_uuid[agent_i]) == 0) { in necp_client_agent_action()
9997 if (uuid_is_null(fd_data->reported_agents.agent_uuid[agent_i])) { in necp_client_agent_action()
9998 uuid_copy(fd_data->reported_agents.agent_uuid[agent_i], agent_uuid); in necp_client_agent_action()
10007 …uuid_copy(fd_data->reported_agents.agent_uuid[agent_i], fd_data->reported_agents.agent_uuid[agent_… in necp_client_agent_action()
10009 uuid_copy(fd_data->reported_agents.agent_uuid[agent_i], agent_uuid); in necp_client_agent_action()
10018 fd_data->proc_pid, in necp_client_agent_action()
10036 NECP_FD_UNLOCK(fd_data); in necp_client_agent_action()
10053 necp_client_copy_agent(__unused struct necp_fd_data *fd_data, struct necp_client_action_args *uap, … in necp_client_copy_agent() argument
10084 necp_client_agent_use(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *retva… in necp_client_agent_use() argument
10110 NECP_FD_LOCK(fd_data); in necp_client_agent_use()
10111 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_agent_use()
10119 NECP_FD_UNLOCK(fd_data); in necp_client_agent_use()
10136 necp_client_acquire_agent_token(__unused struct necp_fd_data *fd_data, struct necp_client_action_ar… in necp_client_acquire_agent_token() argument
10163 necp_client_copy_interface(__unused struct necp_fd_data *fd_data, struct necp_client_action_args *u… in necp_client_copy_interface() argument
10334 necp_client_get_interface_address(__unused struct necp_fd_data *fd_data, struct necp_client_action_… in necp_client_get_interface_address() argument
10458 necp_fd_insert_stats_arena(struct necp_fd_data *fd_data, struct necp_arena_info *nai) in necp_fd_insert_stats_arena() argument
10460 NECP_FD_ASSERT_LOCKED(fd_data); in necp_fd_insert_stats_arena()
10464 LIST_INSERT_HEAD(&fd_data->stats_arena_list, nai, nai_chain); in necp_fd_insert_stats_arena()
10470 necp_fd_remove_stats_arena(struct necp_fd_data *fd_data, struct necp_arena_info *nai) in necp_fd_remove_stats_arena() argument
10472 #pragma unused(fd_data) in necp_fd_remove_stats_arena()
10473 NECP_FD_ASSERT_LOCKED(fd_data); in necp_fd_remove_stats_arena()
10485 necp_fd_mredirect_stats_arena(struct necp_fd_data *fd_data, struct proc *proc) in necp_fd_mredirect_stats_arena() argument
10489 NECP_FD_ASSERT_LOCKED(fd_data); in necp_fd_mredirect_stats_arena()
10494 if ((nai = fd_data->stats_arena_active) != NULL) { in necp_fd_mredirect_stats_arena()
10511 fd_data->stats_arena_active = nai = NULL; in necp_fd_mredirect_stats_arena()
10516 LIST_FOREACH(nai, &fd_data->stats_arena_list, nai_chain) { in necp_fd_mredirect_stats_arena()
10572 necp_arena_create(struct necp_fd_data *fd_data, size_t obj_size, size_t obj_cnt, struct proc *p) in necp_arena_create() argument
10581 NECP_FD_ASSERT_LOCKED(fd_data); in necp_arena_create()
10582 ASSERT(fd_data->stats_arena_active == NULL); in necp_arena_create()
10584 ASSERT(proc_pid(p) == fd_data->proc_pid); in necp_arena_create()
10602 nai->nai_proc_pid = fd_data->proc_pid; in necp_arena_create()
10603 …snprintf(name, sizeof(name), "stats-%u.%s.%d", fd_data->stats_arena_gencnt, proc_name_address(p), in necp_arena_create()
10607 NECPLOG(LOG_ERR, "failed to create stats arena for pid %d\n", fd_data->proc_pid); in necp_arena_create()
10621 NECPLOG(LOG_ERR, "failed to map stats arena for pid %d\n", fd_data->proc_pid); in necp_arena_create()
10626 fd_data->stats_arena_active = nai; in necp_arena_create()
10628 necp_fd_insert_stats_arena(fd_data, nai); in necp_arena_create()
10629 ++fd_data->stats_arena_gencnt; in necp_arena_create()
10638 necp_arena_stats_obj_alloc(struct necp_fd_data *fd_data, in necp_arena_stats_obj_alloc() argument
10657 NECP_FD_ASSERT_LOCKED(fd_data); in necp_arena_stats_obj_alloc()
10658 ASSERT(fd_data->stats_arena_active != NULL); in necp_arena_stats_obj_alloc()
10659 ASSERT(fd_data->stats_arena_active->nai_arena != NULL); in necp_arena_stats_obj_alloc()
10661 kstats_cp = skmem_arena_necp(fd_data->stats_arena_active->nai_arena)->arc_kstats_cache; in necp_arena_stats_obj_alloc()
10676 *stats_arena = fd_data->stats_arena_active; in necp_arena_stats_obj_alloc()
10679 *off = fd_data->stats_arena_active->nai_roff + SKMEM_OBJ_ROFF(&kstats_oi); in necp_arena_stats_obj_alloc()
10685 necp_arena_stats_obj_free(struct necp_fd_data *fd_data, struct necp_arena_info *stats_arena, void *… in necp_arena_stats_obj_free() argument
10687 #pragma unused(fd_data) in necp_arena_stats_obj_free()
10688 NECP_FD_ASSERT_LOCKED(fd_data); in necp_arena_stats_obj_free()
10704 necp_arena_sysctls_obj(struct necp_fd_data *fd_data, mach_vm_offset_t *off, size_t *size) in necp_arena_sysctls_obj() argument
10708 NECP_FD_ASSERT_LOCKED(fd_data); in necp_arena_sysctls_obj()
10709 ASSERT(fd_data->sysctl_arena != NULL); in necp_arena_sysctls_obj()
10712 objaddr = skmem_arena_system_sysctls_obj_addr(fd_data->sysctl_arena); in necp_arena_sysctls_obj()
10721 *off = fd_data->system_sysctls_roff; in necp_arena_sysctls_obj()
10725 *size = skmem_arena_system_sysctls_obj_size(fd_data->sysctl_arena); in necp_arena_sysctls_obj()
10733 necp_stats_arenas_destroy(struct necp_fd_data *fd_data, boolean_t closing) in necp_stats_arenas_destroy() argument
10737 NECP_FD_ASSERT_LOCKED(fd_data); in necp_stats_arenas_destroy()
10741 if ((nai = fd_data->stats_arena_active) != NULL && (closing || nai->nai_use_count == 2)) { in necp_stats_arenas_destroy()
10744 fd_data->stats_arena_active = NULL; in necp_stats_arenas_destroy()
10748 LIST_FOREACH_SAFE(nai, &fd_data->stats_arena_list, nai_chain, nai_tmp) { in necp_stats_arenas_destroy()
10753 necp_fd_remove_stats_arena(fd_data, nai); in necp_stats_arenas_destroy()
10759 necp_sysctl_arena_destroy(struct necp_fd_data *fd_data) in necp_sysctl_arena_destroy() argument
10761 NECP_FD_ASSERT_LOCKED(fd_data); in necp_sysctl_arena_destroy()
10765 if (fd_data->sysctl_arena != NULL) { in necp_sysctl_arena_destroy()
10766 skmem_arena_munmap(fd_data->sysctl_arena, &fd_data->sysctl_mmap); in necp_sysctl_arena_destroy()
10767 skmem_arena_release(fd_data->sysctl_arena); in necp_sysctl_arena_destroy()
10769 fd_data->sysctl_arena = NULL; in necp_sysctl_arena_destroy()
10770 fd_data->system_sysctls_roff = 0; in necp_sysctl_arena_destroy()
10775 necp_arena_initialize(struct necp_fd_data *fd_data, bool locked) in necp_arena_initialize() argument
10781 NECP_FD_LOCK(fd_data); in necp_arena_initialize()
10783 if (fd_data->stats_arena_active == NULL) { in necp_arena_initialize()
10784 error = necp_arena_create(fd_data, stats_obj_size, in necp_arena_initialize()
10789 NECP_FD_UNLOCK(fd_data); in necp_arena_initialize()
10796 necp_sysctl_arena_initialize(struct necp_fd_data *fd_data, bool locked) in necp_sysctl_arena_initialize() argument
10801 NECP_FD_LOCK(fd_data); in necp_sysctl_arena_initialize()
10804 NECP_FD_ASSERT_LOCKED(fd_data); in necp_sysctl_arena_initialize()
10806 if (fd_data->sysctl_arena == NULL) { in necp_sysctl_arena_initialize()
10812 ASSERT(proc_pid(p) == fd_data->proc_pid); in necp_sysctl_arena_initialize()
10814 name_ptr = tsnprintf(name, sizeof(name), "sysctl.%s.%d", proc_name_address(p), fd_data->proc_pid); in necp_sysctl_arena_initialize()
10815 fd_data->sysctl_arena = skmem_arena_create_for_system(name_ptr, &error); in necp_sysctl_arena_initialize()
10816 ASSERT(fd_data->sysctl_arena != NULL || error != 0); in necp_sysctl_arena_initialize()
10818 NECPLOG(LOG_ERR, "failed to create arena for pid %d\n", fd_data->proc_pid); in necp_sysctl_arena_initialize()
10825fd_data->system_sysctls_roff = skmem_arena_get_region_offset(fd_data->sysctl_arena, SKMEM_REGION_S… in necp_sysctl_arena_initialize()
10830 error = skmem_arena_mmap(fd_data->sysctl_arena, p, &fd_data->sysctl_mmap); in necp_sysctl_arena_initialize()
10832 NECPLOG(LOG_ERR, "failed to map sysctl arena for pid %d\n", fd_data->proc_pid); in necp_sysctl_arena_initialize()
10833 necp_sysctl_arena_destroy(fd_data); in necp_sysctl_arena_initialize()
10839 NECP_FD_UNLOCK(fd_data); in necp_sysctl_arena_initialize()
10846 necp_client_stats_bufreq(struct necp_fd_data *fd_data, in necp_client_stats_bufreq() argument
10854 NECP_FD_ASSERT_LOCKED(fd_data); in necp_client_stats_bufreq()
10871 …error = necp_arena_stats_obj_alloc(fd_data, &off, &flow_registration->stats_arena, &flow_registrat… in necp_client_stats_bufreq()
10972 necp_stats_initialize(struct necp_fd_data *fd_data, in necp_stats_initialize() argument
10981 NECP_FD_ASSERT_LOCKED(fd_data); in necp_stats_initialize()
10982 VERIFY(fd_data->stats_arena_active != NULL); in necp_stats_initialize()
10983 VERIFY(fd_data->stats_arena_active->nai_arena != NULL); in necp_stats_initialize()
10984 VERIFY(!(fd_data->stats_arena_active->nai_flags & (NAIF_REDIRECT | NAIF_DEFUNCT))); in necp_stats_initialize()
10991 error = necp_client_stats_bufreq(fd_data, client, flow_registration, bufreq, &stats_hdr); in necp_stats_initialize()
11053 necp_client_map_sysctls(__unused struct necp_fd_data *fd_data, struct necp_client_action_args *uap,… in necp_client_map_sysctls() argument
11067 *retval = necp_sysctl_arena_initialize(fd_data, false); in necp_client_map_sysctls()
11074 NECP_FD_LOCK(fd_data); in necp_client_map_sysctls()
11075 location = necp_arena_sysctls_obj(fd_data, &off, NULL); in necp_client_map_sysctls()
11076 NECP_FD_UNLOCK(fd_data); in necp_client_map_sysctls()
11083 uaddr = fd_data->sysctl_mmap.ami_mapaddr + off; in necp_client_map_sysctls()
11093 necp_client_copy_route_statistics(__unused struct necp_fd_data *fd_data, struct necp_client_action_… in necp_client_copy_route_statistics() argument
11113 NECP_FD_LOCK(fd_data); in necp_client_copy_route_statistics()
11114 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_copy_route_statistics()
11144 NECP_FD_UNLOCK(fd_data); in necp_client_copy_route_statistics()
11152 NECP_FD_UNLOCK(fd_data); in necp_client_copy_route_statistics()
11163 necp_client_update_cache(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *re… in necp_client_update_cache() argument
11180 NECP_FD_LOCK(fd_data); in necp_client_update_cache()
11181 client = necp_client_fd_find_client_and_lock(fd_data, client_id); in necp_client_update_cache()
11183 NECP_FD_UNLOCK(fd_data); in necp_client_update_cache()
11191 NECP_FD_UNLOCK(fd_data); in necp_client_update_cache()
11279 NECP_FD_UNLOCK(fd_data); in necp_client_update_cache()
11293 necp_client_sign(__unused struct necp_fd_data *fd_data, struct necp_client_action_args *uap, int *r… in necp_client_sign() argument
11430 necp_client_validate(__unused struct necp_fd_data *fd_data, struct necp_client_action_args *uap, in… in necp_client_validate() argument
11490 necp_client_get_signed_client_id(__unused struct necp_fd_data *fd_data, struct necp_client_action_a… in necp_client_get_signed_client_id() argument
11548 necp_client_set_signed_client_id(__unused struct necp_fd_data *fd_data, struct necp_client_action_a… in necp_client_set_signed_client_id() argument
11640 necp_client_get_flow_statistics(struct necp_fd_data *fd_data, struct necp_client_action_args *uap, … in necp_client_get_flow_statistics() argument
11676 NECP_FD_LOCK(fd_data); in necp_client_get_flow_statistics()
11678 …struct necp_client_flow_registration *flow_registration = necp_client_fd_find_flow(fd_data, flow_i… in necp_client_get_flow_statistics()
11685 NECP_FD_UNLOCK(fd_data); in necp_client_get_flow_statistics()
11718 struct necp_fd_data * __single fd_data = NULL; in necp_client_action() local
11720 error = necp_find_fd_data(p, uap->necp_fd, &fp, &fd_data); in necp_client_action()
11738 return_value = necp_client_add(p, fd_data, uap, retval); in necp_client_action()
11742 return_value = necp_client_claim(p, fd_data, uap, retval); in necp_client_action()
11746 return_value = necp_client_remove(fd_data, uap, retval); in necp_client_action()
11753 return_value = necp_client_copy(fd_data, uap, retval); in necp_client_action()
11757 return_value = necp_client_list(fd_data, uap, retval); in necp_client_action()
11761 return_value = necp_client_add_flow(fd_data, uap, retval); in necp_client_action()
11765 return_value = necp_client_remove_flow(fd_data, uap, retval); in necp_client_action()
11770 return_value = necp_client_request_nexus(fd_data, uap, retval); in necp_client_action()
11775 return_value = necp_client_agent_action(fd_data, uap, retval); in necp_client_action()
11779 return_value = necp_client_copy_agent(fd_data, uap, retval); in necp_client_action()
11783 return_value = necp_client_agent_use(fd_data, uap, retval); in necp_client_action()
11787 return_value = necp_client_acquire_agent_token(fd_data, uap, retval); in necp_client_action()
11791 return_value = necp_client_copy_interface(fd_data, uap, retval); in necp_client_action()
11796 return_value = necp_client_get_interface_address(fd_data, uap, retval); in necp_client_action()
11804 return_value = necp_client_map_sysctls(fd_data, uap, retval); in necp_client_action()
11809 return_value = necp_client_copy_route_statistics(fd_data, uap, retval); in necp_client_action()
11813 return_value = necp_client_update_cache(fd_data, uap, retval); in necp_client_action()
11817 return_value = necp_client_copy_client_update(fd_data, uap, retval); in necp_client_action()
11821 return_value = necp_client_sign(fd_data, uap, retval); in necp_client_action()
11825 return_value = necp_client_validate(fd_data, uap, retval); in necp_client_action()
11829 return_value = necp_client_get_signed_client_id(fd_data, uap, retval); in necp_client_action()
11833 return_value = necp_client_set_signed_client_id(fd_data, uap, retval); in necp_client_action()
11837 return_value = necp_client_get_flow_statistics(fd_data, uap, retval); in necp_client_action()
12537 …struct necp_fd_data * __single fd_data = __unsafe_forge_single(struct necp_fd_data *, container_of… in necp_client_get_proc_pid_from_arena_info() local
12538 return fd_data->proc_pid; in necp_client_get_proc_pid_from_arena_info()