Lines Matching defs:sp
113 struct sockparams *sp = ksp->ks_private;
119 sps->sps_nactive.value.ui64 = sp->sp_refcnt;
128 sockparams_kstat_init(struct sockparams *sp)
132 (void) snprintf(name, KSTAT_STRLEN, "socket_%d_%d_%d", sp->sp_family,
133 sp->sp_type, sp->sp_protocol);
135 sp->sp_kstat = kstat_create("sockfs", 0, name, "misc", KSTAT_TYPE_NAMED,
139 if (sp->sp_kstat == NULL)
142 sp->sp_kstat->ks_data = &sp->sp_stats;
143 sp->sp_kstat->ks_update = sockparams_kstat_update;
144 sp->sp_kstat->ks_private = sp;
145 kstat_install(sp->sp_kstat);
149 sockparams_kstat_fini(struct sockparams *sp)
151 if (sp->sp_kstat != NULL) {
152 kstat_delete(sp->sp_kstat);
153 sp->sp_kstat = NULL;
190 struct sockparams *sp = NULL;
205 sp = kmem_zalloc(sizeof (*sp), kmflags);
206 if (sp == NULL) {
210 sp->sp_family = family;
211 sp->sp_type = type;
212 sp->sp_protocol = protocol;
213 sp->sp_refcnt = 0;
214 sp->sp_flags = flags;
216 list_create(&sp->sp_auto_filters, sizeof (sp_filter_t),
218 list_create(&sp->sp_prog_filters, sizeof (sp_filter_t),
221 kstat_named_init(&sp->sp_stats.sps_nfallback, "nfallback",
223 kstat_named_init(&sp->sp_stats.sps_nactive, "nactive",
225 kstat_named_init(&sp->sp_stats.sps_ncreate, "ncreate",
231 if (sp->sp_flags & SOCKPARAMS_EPHEMERAL)
235 sp->sp_smod_name = modname;
243 sp->sp_smod_name = modname;
244 (void) sprintf(sp->sp_smod_name, "%s", SOTPI_SMOD_NAME);
249 *errorp = sockparams_sdev_init(sp, devpath, devpathlen);
254 mutex_init(&sp->sp_lock, NULL, MUTEX_DEFAULT, NULL);
256 return (sp);
263 if (sp != NULL)
264 kmem_free(sp, sizeof (*sp));
272 sockparams_sdev_init(struct sockparams *sp, char *devpath, int devpathlen)
286 sp->sp_sdev_info.sd_vnode = vp;
287 sp->sp_sdev_info.sd_devpath = devpath;
288 sp->sp_sdev_info.sd_devpathlen = devpathlen;
294 * sockparams_destroy(struct sockparams *sp)
300 * sp: the sockparams entry to destroy.
309 sockparams_destroy(struct sockparams *sp)
311 ASSERT(sp->sp_refcnt == 0);
312 ASSERT(!list_link_active(&sp->sp_node));
314 sockparams_sdev_fini(sp);
316 if (sp->sp_smod_info != NULL)
317 SMOD_DEC_REF(sp->sp_smod_info, sp->sp_smod_name);
318 kmem_free(sp->sp_smod_name, strlen(sp->sp_smod_name) + 1);
319 sp->sp_smod_name = NULL;
320 sp->sp_smod_info = NULL;
321 mutex_destroy(&sp->sp_lock);
322 sockparams_kstat_fini(sp);
324 sof_sockparams_fini(sp);
325 list_destroy(&sp->sp_auto_filters);
326 list_destroy(&sp->sp_prog_filters);
328 kmem_free(sp, sizeof (*sp));
335 sockparams_sdev_fini(struct sockparams *sp)
343 if (!SOCKPARAMS_HAS_DEVICE(sp))
346 sd = sp->sp_sdev_info;
352 sp->sp_sdev_info.sd_vnode = NULL;
353 sp->sp_sdev_info.sd_devpath = NULL;
364 struct sockparams *sp;
366 for (sp = list_head(list); sp != NULL; sp = list_next(list, sp)) {
367 if (sp->sp_family == family && sp->sp_type == type) {
368 if (sp->sp_protocol == protocol) {
372 sp->sp_sdev_info.sd_devpath != NULL &&
373 strcmp(sp->sp_sdev_info.sd_devpath,
376 else if (strcmp(sp->sp_smod_name, name) == 0)
381 return (sp);
404 struct sockparams *sp = NULL;
411 sp = sockparams_find(&sp_ephem_list, family, type, protocol,
413 if (sp != NULL) {
414 SOCKPARAMS_INC_REF(sp);
418 return (sp);
467 sp = sockparams_find(&sp_ephem_list, family, type, protocol,
469 if (sp != NULL) {
474 SOCKPARAMS_INC_REF(sp);
489 sp = newsp;
493 return (sp);
521 sockparams_ephemeral_drop_last_ref(struct sockparams *sp)
523 ASSERT(sp->sp_flags & SOCKPARAMS_EPHEMERAL);
524 ASSERT(MUTEX_NOT_HELD(&sp->sp_lock));
527 mutex_enter(&sp->sp_lock);
529 if (--sp->sp_refcnt == 0) {
530 list_remove(&sp_ephem_list, sp);
531 mutex_exit(&sp->sp_lock);
534 sockparams_destroy(sp);
536 mutex_exit(&sp->sp_lock);
542 * sockparams_add(struct sockparams *sp)
547 * sp: the sockparms entry to add
557 sockparams_add(struct sockparams *sp)
561 ASSERT(!(sp->sp_flags & SOCKPARAMS_EPHEMERAL));
564 if (sockparams_find(&sphead, sp->sp_family, sp->sp_type,
565 sp->sp_protocol, B_TRUE, NULL) != 0) {
572 sockparams_kstat_init(sp);
578 error = sof_sockparams_init(sp);
583 list_insert_tail(&sphead, sp);
609 struct sockparams *sp;
612 sp = sockparams_find(&sphead, family, type, protocol, B_TRUE, NULL);
614 if (sp != NULL) {
620 mutex_enter(&sp->sp_lock);
621 if (sp->sp_refcnt != 0) {
622 mutex_exit(&sp->sp_lock);
626 mutex_exit(&sp->sp_lock);
628 list_remove(&sphead, sp);
631 sockparams_destroy(sp);
665 struct sockparams *sp = NULL;
679 sp = sockparams_find(&sphead, family, type, protocol, B_TRUE, NULL);
681 if (sp == NULL) {
685 for (sp = list_head(&sphead); sp != NULL;
686 sp = list_next(&sphead, sp)) {
687 if (sp->sp_family == family && found < 1)
689 if (sp->sp_family == family &&
690 sp->sp_protocol == protocol && found < 2)
718 SOCKPARAMS_INC_REF(sp);
721 if (sp->sp_smod_info == NULL) {
722 smod_info_t *smod = smod_lookup_byname(sp->sp_smod_name);
731 SOCKPARAMS_DEC_REF(sp);
735 * "bad" entries. I.e., sp->sp_mod_state |= BAD,
746 mutex_enter(&sp->sp_lock);
747 if (sp->sp_smod_info == NULL)
748 sp->sp_smod_info = smod;
750 SMOD_DEC_REF(smod, sp->sp_smod_name);
751 mutex_exit(&sp->sp_lock);
757 *spp = sp;
768 struct sockparams *sp;
774 for (sp = list_head(list); sp != NULL;
775 sp = list_next(list, sp)) {
777 &sp->sp_auto_filters : &sp->sp_prog_filters;
802 struct sockparams *sp;
807 for (sp = list_head(list); sp != NULL;
808 sp = list_next(list, sp)) {
809 if ((err = sof_entry_proc_sockparams(ent, sp)) != 0) {
837 struct sockparams *sp;
855 for (sp = list_head(&sphead); sp != NULL;
856 sp = list_next(&sphead, sp)) {
871 for (sp = list_head(&sphead); sp != NULL;
872 sp = list_next(&sphead, sp)) {
882 se[i].se_family = sp->sp_family;
883 se[i].se_type = sp->sp_type;
884 se[i].se_protocol = sp->sp_protocol;
885 (void) strncpy(se[i].se_modname, sp->sp_smod_name,
887 if (sp->sp_sdev_info.sd_devpath != NULL)
889 sp->sp_sdev_info.sd_devpath, MAXPATHLEN);
890 se[i].se_refcnt = sp->sp_refcnt;
891 se[i].se_flags = sp->sp_flags;