Lines Matching refs:sctp

95 #define	SCTP_IPIF_ZONE_MATCH(sctp, ipif) 				\  argument
96 IPCL_ZONE_MATCH((sctp)->sctp_connp, (ipif)->sctp_ipif_zoneid)
232 sctp_get_all_ipifs(sctp_t *sctp, int sleep) in sctp_get_all_ipifs() argument
238 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_get_all_ipifs()
240 conn_t *connp = sctp->sctp_connp; in sctp_get_all_ipifs()
252 !SCTP_IPIF_ZONE_MATCH(sctp, sctp_ipif) || in sctp_get_all_ipifs()
265 error = sctp_ipif_hash_insert(sctp, sctp_ipif, sleep, in sctp_get_all_ipifs()
278 sctp_free_saddrs(sctp); in sctp_get_all_ipifs()
293 sctp_valid_addr_list(sctp_t *sctp, const void *addrs, uint32_t addrcnt, in sctp_valid_addr_list() argument
308 conn_t *connp = sctp->sctp_connp; in sctp_valid_addr_list()
317 if (sctp->sctp_state >= SCTPS_BOUND) { in sctp_valid_addr_list()
319 if (sctp->sctp_state > SCTPS_LISTEN) in sctp_valid_addr_list()
323 if (sctp->sctp_conn_tfp != NULL) in sctp_valid_addr_list()
324 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_valid_addr_list()
325 if (sctp->sctp_listen_tfp != NULL) in sctp_valid_addr_list()
326 mutex_enter(&sctp->sctp_listen_tfp->tf_lock); in sctp_valid_addr_list()
389 ifindex, 0, B_TRUE, sctp->sctp_sctps); in sctp_valid_addr_list()
409 err = sctp_ipif_hash_insert(sctp, ipif, KM_SLEEP, in sctp_valid_addr_list()
430 if (sctp->sctp_nsaddrs > 0) { in sctp_valid_addr_list()
431 sctp_free_saddrs(sctp); in sctp_valid_addr_list()
432 ASSERT(sctp->sctp_nsaddrs == 0); in sctp_valid_addr_list()
434 err = sctp_get_all_ipifs(sctp, KM_SLEEP); in sctp_valid_addr_list()
437 sctp->sctp_bound_to_all = 1; in sctp_valid_addr_list()
439 if (sctp->sctp_listen_tfp != NULL) in sctp_valid_addr_list()
440 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_valid_addr_list()
441 if (sctp->sctp_conn_tfp != NULL) in sctp_valid_addr_list()
442 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_valid_addr_list()
446 sctp_del_saddr_list(sctp, addrs, saddr_cnt, B_TRUE); in sctp_valid_addr_list()
447 if (sctp->sctp_listen_tfp != NULL) in sctp_valid_addr_list()
448 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_valid_addr_list()
449 if (sctp->sctp_conn_tfp != NULL) in sctp_valid_addr_list()
450 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_valid_addr_list()
455 sctp_ipif_hash_insert(sctp_t *sctp, sctp_ipif_t *ipif, int sleep, in sctp_ipif_hash_insert() argument
464 rw_enter(&sctp->sctp_saddrs[hindex].ipif_hash_lock, RW_WRITER); in sctp_ipif_hash_insert()
465 ipif_obj = list_head(&sctp->sctp_saddrs[hindex].sctp_ipif_list); in sctp_ipif_hash_insert()
466 for (cnt = 0; cnt < sctp->sctp_saddrs[hindex].ipif_count; cnt++) { in sctp_ipif_hash_insert()
478 &sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_ipif_hash_insert()
483 &sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_ipif_hash_insert()
487 ipif_obj = list_next(&sctp->sctp_saddrs[hindex].sctp_ipif_list, in sctp_ipif_hash_insert()
492 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_ipif_hash_insert()
498 list_insert_tail(&sctp->sctp_saddrs[hindex].sctp_ipif_list, ipif_obj); in sctp_ipif_hash_insert()
499 sctp->sctp_saddrs[hindex].ipif_count++; in sctp_ipif_hash_insert()
500 sctp->sctp_nsaddrs++; in sctp_ipif_hash_insert()
501 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_ipif_hash_insert()
512 sctp_fix_saddr(sctp_t *sctp, in6_addr_t *saddr) in sctp_fix_saddr() argument
516 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_fix_saddr()
524 sctp_ipif_hash_remove(sctp_t *sctp, sctp_ipif_t *ipif, boolean_t locked) in sctp_ipif_hash_remove() argument
533 rw_enter(&sctp->sctp_saddrs[hindex].ipif_hash_lock, RW_WRITER); in sctp_ipif_hash_remove()
534 ipif_obj = list_head(&sctp->sctp_saddrs[hindex].sctp_ipif_list); in sctp_ipif_hash_remove()
535 for (cnt = 0; cnt < sctp->sctp_saddrs[hindex].ipif_count; cnt++) { in sctp_ipif_hash_remove()
538 list_remove(&sctp->sctp_saddrs[hindex].sctp_ipif_list, in sctp_ipif_hash_remove()
540 sctp->sctp_saddrs[hindex].ipif_count--; in sctp_ipif_hash_remove()
541 sctp->sctp_nsaddrs--; in sctp_ipif_hash_remove()
542 sctp_fix_saddr(sctp, &ipif->sctp_ipif_saddr); in sctp_ipif_hash_remove()
547 ipif_obj = list_next(&sctp->sctp_saddrs[hindex].sctp_ipif_list, in sctp_ipif_hash_remove()
551 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_ipif_hash_remove()
661 sctp_free_saddrs(sctp_t *sctp) in sctp_free_saddrs() argument
667 if (sctp->sctp_nsaddrs == 0) in sctp_free_saddrs()
670 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_WRITER); in sctp_free_saddrs()
671 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_free_saddrs()
672 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_free_saddrs()
675 obj = list_tail(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_free_saddrs()
676 for (l = 0; l < sctp->sctp_saddrs[i].ipif_count; l++) { in sctp_free_saddrs()
677 list_remove(&sctp->sctp_saddrs[i].sctp_ipif_list, obj); in sctp_free_saddrs()
679 sctp->sctp_nsaddrs--; in sctp_free_saddrs()
681 obj = list_tail(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_free_saddrs()
683 sctp->sctp_saddrs[i].ipif_count = 0; in sctp_free_saddrs()
684 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_free_saddrs()
686 if (sctp->sctp_bound_to_all == 1) in sctp_free_saddrs()
687 sctp->sctp_bound_to_all = 0; in sctp_free_saddrs()
688 ASSERT(sctp->sctp_nsaddrs == 0); in sctp_free_saddrs()
901 sctp_t *sctp; in sctp_update_saddrs() local
907 sctp = list_head(&sctps->sctps_g_list); in sctp_update_saddrs()
908 while (sctp != NULL && oipif->sctp_ipif_refcnt > 0) { in sctp_update_saddrs()
909 mutex_enter(&sctp->sctp_reflock); in sctp_update_saddrs()
910 if (sctp->sctp_condemned || in sctp_update_saddrs()
911 sctp->sctp_saddrs[idx].ipif_count <= 0) { in sctp_update_saddrs()
912 mutex_exit(&sctp->sctp_reflock); in sctp_update_saddrs()
913 sctp = list_next(&sctps->sctps_g_list, sctp); in sctp_update_saddrs()
916 sctp->sctp_refcnt++; in sctp_update_saddrs()
917 mutex_exit(&sctp->sctp_reflock); in sctp_update_saddrs()
922 RUN_SCTP(sctp); in sctp_update_saddrs()
923 sobj = list_head(&sctp->sctp_saddrs[idx].sctp_ipif_list); in sctp_update_saddrs()
925 sctp->sctp_saddrs[idx].ipif_count; count++) { in sctp_update_saddrs()
938 sobj = list_next(&sctp->sctp_saddrs[idx].sctp_ipif_list, in sctp_update_saddrs()
941 WAKE_SCTP(sctp); in sctp_update_saddrs()
942 sctp_prev = sctp; in sctp_update_saddrs()
944 sctp = list_next(&sctps->sctps_g_list, sctp); in sctp_update_saddrs()
1271 sctp_del_saddr(sctp_t *sctp, sctp_saddr_ipif_t *sp) in sctp_del_saddr() argument
1273 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr()
1274 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr()
1276 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr()
1277 mutex_enter(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr()
1279 sctp_ipif_hash_remove(sctp, sp->saddr_ipifp, B_FALSE); in sctp_del_saddr()
1281 if (sctp->sctp_bound_to_all == 1) in sctp_del_saddr()
1282 sctp->sctp_bound_to_all = 0; in sctp_del_saddr()
1284 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr()
1285 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr()
1287 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr()
1288 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr()
1296 sctp_del_saddr_list(sctp_t *sctp, const void *addrs, int addcnt, in sctp_del_saddr_list() argument
1305 conn_t *connp = sctp->sctp_connp; in sctp_del_saddr_list()
1307 ASSERT(sctp->sctp_nsaddrs >= addcnt); in sctp_del_saddr_list()
1310 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr_list()
1311 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr_list()
1312 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr_list()
1313 mutex_enter(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr_list()
1331 ifindex, 0, B_TRUE, sctp->sctp_sctps); in sctp_del_saddr_list()
1333 sctp_ipif_hash_remove(sctp, sctp_ipif, B_FALSE); in sctp_del_saddr_list()
1335 if (sctp->sctp_bound_to_all == 1) in sctp_del_saddr_list()
1336 sctp->sctp_bound_to_all = 0; in sctp_del_saddr_list()
1339 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr_list()
1340 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr_list()
1341 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr_list()
1342 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr_list()
1351 sctp_saddr_lookup(sctp_t *sctp, in6_addr_t *addr, uint_t ifindex) in sctp_saddr_lookup() argument
1359 rw_enter(&sctp->sctp_saddrs[hindex].ipif_hash_lock, RW_READER); in sctp_saddr_lookup()
1360 if (sctp->sctp_saddrs[hindex].ipif_count == 0) { in sctp_saddr_lookup()
1361 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1365 ipif_obj = list_head(&sctp->sctp_saddrs[hindex].sctp_ipif_list); in sctp_saddr_lookup()
1366 for (cnt = 0; cnt < sctp->sctp_saddrs[hindex].ipif_count; cnt++) { in sctp_saddr_lookup()
1375 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1378 ipif_obj = list_next(&sctp->sctp_saddrs[hindex].sctp_ipif_list, in sctp_saddr_lookup()
1381 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1387 sctp_saddr_add_addr(sctp_t *sctp, in6_addr_t *addr, uint_t ifindex) in sctp_saddr_add_addr() argument
1390 conn_t *connp = sctp->sctp_connp; in sctp_saddr_add_addr()
1393 !connp->conn_allzones, ifindex, 0, B_TRUE, sctp->sctp_sctps); in sctp_saddr_add_addr()
1397 if (sctp_ipif_hash_insert(sctp, sctp_ipif, KM_NOSLEEP, B_FALSE, in sctp_saddr_add_addr()
1411 sctp_check_saddr(sctp_t *sctp, int supp_af, boolean_t delete, in sctp_check_saddr() argument
1420 conn_t *connp = sctp->sctp_connp; in sctp_check_saddr()
1422 ASSERT(!sctp->sctp_loopback && !sctp->sctp_linklocal && supp_af != 0); in sctp_check_saddr()
1431 nsaddr = sctp->sctp_nsaddrs; in sctp_check_saddr()
1433 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_WRITER); in sctp_check_saddr()
1434 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_check_saddr()
1435 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1438 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_check_saddr()
1439 naddr = sctp->sctp_saddrs[i].ipif_count; in sctp_check_saddr()
1466 if (sctp->sctp_bound_to_all == 1) in sctp_check_saddr()
1467 sctp->sctp_bound_to_all = 0; in sctp_check_saddr()
1469 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_check_saddr()
1471 sctp_ipif_hash_remove(sctp, ipif, in sctp_check_saddr()
1475 sctp_ipif_hash_remove(sctp, ipif, B_TRUE); in sctp_check_saddr()
1479 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1482 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_check_saddr()
1485 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1492 sctp_get_valid_addr(sctp_t *sctp, boolean_t isv6, boolean_t *addr_set) in sctp_get_valid_addr() argument
1501 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_READER); in sctp_get_valid_addr()
1502 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_get_valid_addr()
1503 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1506 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_get_valid_addr()
1507 for (l = 0; l < sctp->sctp_saddrs[i].ipif_count; l++) { in sctp_get_valid_addr()
1515 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1519 if (scanned >= sctp->sctp_nsaddrs) { in sctp_get_valid_addr()
1520 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1523 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_get_valid_addr()
1526 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1549 sctp_t *sctp = (sctp_t *)conn; in sctp_getmyaddrs() local
1550 conn_t *connp = sctp->sctp_connp; in sctp_getmyaddrs()
1560 if (sctp->sctp_nsaddrs == 0) in sctp_getmyaddrs()
1567 if (sctp->sctp_state >= SCTPS_ESTABLISHED && !sctp->sctp_loopback && in sctp_getmyaddrs()
1573 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_READER); in sctp_getmyaddrs()
1574 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_getmyaddrs()
1575 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1578 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_getmyaddrs()
1579 for (l = 0; l < sctp->sctp_saddrs[i].ipif_count; l++) { in sctp_getmyaddrs()
1587 if (scanned >= sctp->sctp_nsaddrs) { in sctp_getmyaddrs()
1588 rw_exit(&sctp-> in sctp_getmyaddrs()
1592 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_getmyaddrs()
1624 if (added >= max || scanned >= sctp->sctp_nsaddrs) { in sctp_getmyaddrs()
1625 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1628 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_getmyaddrs()
1631 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1648 sctp_saddr_info(sctp_t *sctp, int supp_af, uchar_t *p, boolean_t modify) in sctp_saddr_info() argument
1666 if (modify && !sctp->sctp_loopback && (cl_sctp_check_addrs == NULL)) in sctp_saddr_info()
1669 if (modify && !sctp->sctp_linklocal) in sctp_saddr_info()
1672 nsaddr = sctp->sctp_nsaddrs; in sctp_saddr_info()
1674 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_WRITER); in sctp_saddr_info()
1675 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_saddr_info()
1676 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1679 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_saddr_info()
1680 naddr = sctp->sctp_saddrs[i].ipif_count; in sctp_saddr_info()
1700 if (sctp->sctp_bound_to_all == 1) in sctp_saddr_info()
1701 sctp->sctp_bound_to_all = 0; in sctp_saddr_info()
1703 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_saddr_info()
1705 sctp_ipif_hash_remove(sctp, ipif, in sctp_saddr_info()
1709 sctp_ipif_hash_remove(sctp, ipif, B_TRUE); in sctp_saddr_info()
1742 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1745 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_saddr_info()
1748 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1769 sctp_get_addrlist(sctp_t *sctp, const void *addrs, uint32_t *addrcnt, in sctp_get_addrlist() argument
1779 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_get_addrlist()
1780 conn_t *connp = sctp->sctp_connp; in sctp_get_addrlist()
1806 if (sctp->sctp_state > SCTPS_LISTEN) { in sctp_get_addrlist()
1831 if (sctp->sctp_state > SCTPS_LISTEN) { in sctp_get_addrlist()
1885 !SCTP_IPIF_ZONE_MATCH(sctp, sctp_ipif) || in sctp_get_addrlist()
1888 (sctp->sctp_connp->conn_ipv6_v6only && in sctp_get_addrlist()
1925 sctp_get_saddr_list(sctp_t *sctp, uchar_t *p, size_t psize) in sctp_get_saddr_list() argument
1934 rw_enter(&sctp->sctp_saddrs[cnt].ipif_hash_lock, RW_READER); in sctp_get_saddr_list()
1935 if (sctp->sctp_saddrs[cnt].ipif_count == 0) { in sctp_get_saddr_list()
1936 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1939 obj = list_head(&sctp->sctp_saddrs[cnt].sctp_ipif_list); in sctp_get_saddr_list()
1940 naddr = sctp->sctp_saddrs[cnt].ipif_count; in sctp_get_saddr_list()
1945 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1955 if (scanned >= sctp->sctp_nsaddrs) { in sctp_get_saddr_list()
1956 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1960 &sctp->sctp_saddrs[icnt].sctp_ipif_list, in sctp_get_saddr_list()
1963 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1972 sctp_get_faddr_list(sctp_t *sctp, uchar_t *p, size_t psize) in sctp_get_faddr_list() argument
1976 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_get_faddr_list()