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()
1272 sctp_del_saddr(sctp_t *sctp, sctp_saddr_ipif_t *sp) in sctp_del_saddr() argument
1274 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr()
1275 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr()
1277 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr()
1278 mutex_enter(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr()
1280 sctp_ipif_hash_remove(sctp, sp->saddr_ipifp, B_FALSE); in sctp_del_saddr()
1282 if (sctp->sctp_bound_to_all == 1) in sctp_del_saddr()
1283 sctp->sctp_bound_to_all = 0; in sctp_del_saddr()
1285 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr()
1286 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr()
1288 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr()
1289 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr()
1297 sctp_del_saddr_list(sctp_t *sctp, const void *addrs, int addcnt, in sctp_del_saddr_list() argument
1306 conn_t *connp = sctp->sctp_connp; in sctp_del_saddr_list()
1308 ASSERT(sctp->sctp_nsaddrs >= addcnt); in sctp_del_saddr_list()
1311 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr_list()
1312 mutex_enter(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr_list()
1313 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr_list()
1314 mutex_enter(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr_list()
1332 ifindex, 0, B_TRUE, sctp->sctp_sctps); in sctp_del_saddr_list()
1334 sctp_ipif_hash_remove(sctp, sctp_ipif, B_FALSE); in sctp_del_saddr_list()
1336 if (sctp->sctp_bound_to_all == 1) in sctp_del_saddr_list()
1337 sctp->sctp_bound_to_all = 0; in sctp_del_saddr_list()
1340 if (sctp->sctp_conn_tfp != NULL) in sctp_del_saddr_list()
1341 mutex_exit(&sctp->sctp_conn_tfp->tf_lock); in sctp_del_saddr_list()
1342 if (sctp->sctp_listen_tfp != NULL) in sctp_del_saddr_list()
1343 mutex_exit(&sctp->sctp_listen_tfp->tf_lock); in sctp_del_saddr_list()
1352 sctp_saddr_lookup(sctp_t *sctp, in6_addr_t *addr, uint_t ifindex) in sctp_saddr_lookup() argument
1360 rw_enter(&sctp->sctp_saddrs[hindex].ipif_hash_lock, RW_READER); in sctp_saddr_lookup()
1361 if (sctp->sctp_saddrs[hindex].ipif_count == 0) { in sctp_saddr_lookup()
1362 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1366 ipif_obj = list_head(&sctp->sctp_saddrs[hindex].sctp_ipif_list); in sctp_saddr_lookup()
1367 for (cnt = 0; cnt < sctp->sctp_saddrs[hindex].ipif_count; cnt++) { in sctp_saddr_lookup()
1376 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1379 ipif_obj = list_next(&sctp->sctp_saddrs[hindex].sctp_ipif_list, in sctp_saddr_lookup()
1382 rw_exit(&sctp->sctp_saddrs[hindex].ipif_hash_lock); in sctp_saddr_lookup()
1388 sctp_saddr_add_addr(sctp_t *sctp, in6_addr_t *addr, uint_t ifindex) in sctp_saddr_add_addr() argument
1391 conn_t *connp = sctp->sctp_connp; in sctp_saddr_add_addr()
1394 !connp->conn_allzones, ifindex, 0, B_TRUE, sctp->sctp_sctps); in sctp_saddr_add_addr()
1398 if (sctp_ipif_hash_insert(sctp, sctp_ipif, KM_NOSLEEP, B_FALSE, in sctp_saddr_add_addr()
1412 sctp_check_saddr(sctp_t *sctp, int supp_af, boolean_t delete, in sctp_check_saddr() argument
1421 conn_t *connp = sctp->sctp_connp; in sctp_check_saddr()
1423 ASSERT(!sctp->sctp_loopback && !sctp->sctp_linklocal && supp_af != 0); in sctp_check_saddr()
1432 nsaddr = sctp->sctp_nsaddrs; in sctp_check_saddr()
1434 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_WRITER); in sctp_check_saddr()
1435 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_check_saddr()
1436 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1439 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_check_saddr()
1440 naddr = sctp->sctp_saddrs[i].ipif_count; in sctp_check_saddr()
1467 if (sctp->sctp_bound_to_all == 1) in sctp_check_saddr()
1468 sctp->sctp_bound_to_all = 0; in sctp_check_saddr()
1470 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_check_saddr()
1472 sctp_ipif_hash_remove(sctp, ipif, in sctp_check_saddr()
1476 sctp_ipif_hash_remove(sctp, ipif, B_TRUE); in sctp_check_saddr()
1480 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1483 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_check_saddr()
1486 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_check_saddr()
1493 sctp_get_valid_addr(sctp_t *sctp, boolean_t isv6, boolean_t *addr_set) in sctp_get_valid_addr() argument
1502 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_READER); in sctp_get_valid_addr()
1503 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_get_valid_addr()
1504 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1507 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_get_valid_addr()
1508 for (l = 0; l < sctp->sctp_saddrs[i].ipif_count; l++) { in sctp_get_valid_addr()
1516 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1520 if (scanned >= sctp->sctp_nsaddrs) { in sctp_get_valid_addr()
1521 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1524 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_get_valid_addr()
1527 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_get_valid_addr()
1550 sctp_t *sctp = (sctp_t *)conn; in sctp_getmyaddrs() local
1551 conn_t *connp = sctp->sctp_connp; in sctp_getmyaddrs()
1561 if (sctp->sctp_nsaddrs == 0) in sctp_getmyaddrs()
1568 if (sctp->sctp_state >= SCTPS_ESTABLISHED && !sctp->sctp_loopback && in sctp_getmyaddrs()
1574 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_READER); in sctp_getmyaddrs()
1575 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_getmyaddrs()
1576 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1579 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_getmyaddrs()
1580 for (l = 0; l < sctp->sctp_saddrs[i].ipif_count; l++) { in sctp_getmyaddrs()
1588 if (scanned >= sctp->sctp_nsaddrs) { in sctp_getmyaddrs()
1589 rw_exit(&sctp-> in sctp_getmyaddrs()
1593 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_getmyaddrs()
1625 if (added >= max || scanned >= sctp->sctp_nsaddrs) { in sctp_getmyaddrs()
1626 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1629 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_getmyaddrs()
1632 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_getmyaddrs()
1649 sctp_saddr_info(sctp_t *sctp, int supp_af, uchar_t *p, boolean_t modify) in sctp_saddr_info() argument
1667 if (modify && !sctp->sctp_loopback && (cl_sctp_check_addrs == NULL)) in sctp_saddr_info()
1670 if (modify && !sctp->sctp_linklocal) in sctp_saddr_info()
1673 nsaddr = sctp->sctp_nsaddrs; in sctp_saddr_info()
1675 rw_enter(&sctp->sctp_saddrs[i].ipif_hash_lock, RW_WRITER); in sctp_saddr_info()
1676 if (sctp->sctp_saddrs[i].ipif_count == 0) { in sctp_saddr_info()
1677 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1680 obj = list_head(&sctp->sctp_saddrs[i].sctp_ipif_list); in sctp_saddr_info()
1681 naddr = sctp->sctp_saddrs[i].ipif_count; in sctp_saddr_info()
1701 if (sctp->sctp_bound_to_all == 1) in sctp_saddr_info()
1702 sctp->sctp_bound_to_all = 0; in sctp_saddr_info()
1704 obj = list_next(&sctp->sctp_saddrs[i]. in sctp_saddr_info()
1706 sctp_ipif_hash_remove(sctp, ipif, in sctp_saddr_info()
1710 sctp_ipif_hash_remove(sctp, ipif, B_TRUE); in sctp_saddr_info()
1743 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1746 obj = list_next(&sctp->sctp_saddrs[i].sctp_ipif_list, in sctp_saddr_info()
1749 rw_exit(&sctp->sctp_saddrs[i].ipif_hash_lock); in sctp_saddr_info()
1770 sctp_get_addrlist(sctp_t *sctp, const void *addrs, uint32_t *addrcnt, in sctp_get_addrlist() argument
1780 sctp_stack_t *sctps = sctp->sctp_sctps; in sctp_get_addrlist()
1781 conn_t *connp = sctp->sctp_connp; in sctp_get_addrlist()
1807 if (sctp->sctp_state > SCTPS_LISTEN) { in sctp_get_addrlist()
1832 if (sctp->sctp_state > SCTPS_LISTEN) { in sctp_get_addrlist()
1886 !SCTP_IPIF_ZONE_MATCH(sctp, sctp_ipif) || in sctp_get_addrlist()
1889 (sctp->sctp_connp->conn_ipv6_v6only && in sctp_get_addrlist()
1926 sctp_get_saddr_list(sctp_t *sctp, uchar_t *p, size_t psize) in sctp_get_saddr_list() argument
1935 rw_enter(&sctp->sctp_saddrs[cnt].ipif_hash_lock, RW_READER); in sctp_get_saddr_list()
1936 if (sctp->sctp_saddrs[cnt].ipif_count == 0) { in sctp_get_saddr_list()
1937 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1940 obj = list_head(&sctp->sctp_saddrs[cnt].sctp_ipif_list); in sctp_get_saddr_list()
1941 naddr = sctp->sctp_saddrs[cnt].ipif_count; in sctp_get_saddr_list()
1946 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1956 if (scanned >= sctp->sctp_nsaddrs) { in sctp_get_saddr_list()
1957 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1961 &sctp->sctp_saddrs[icnt].sctp_ipif_list, in sctp_get_saddr_list()
1964 rw_exit(&sctp->sctp_saddrs[cnt].ipif_hash_lock); in sctp_get_saddr_list()
1973 sctp_get_faddr_list(sctp_t *sctp, uchar_t *p, size_t psize) in sctp_get_faddr_list() argument
1977 for (fp = sctp->sctp_faddrs; fp != NULL; fp = fp->sf_next) { in sctp_get_faddr_list()