Lines Matching refs:sctp_ifap
275 sctp_free_ifa(struct sctp_ifa *sctp_ifap) in sctp_free_ifa() argument
277 if (SCTP_DECREMENT_AND_CHECK_REFCOUNT(&sctp_ifap->refcount)) { in sctp_free_ifa()
279 if (sctp_ifap->ifn_p) { in sctp_free_ifa()
280 sctp_free_ifn(sctp_ifap->ifn_p); in sctp_free_ifa()
282 SCTP_FREE(sctp_ifap, SCTP_M_IFA); in sctp_free_ifa()
316 struct sctp_ifa *sctp_ifap; in sctp_mark_ifa_addr_down() local
325 sctp_ifap = sctp_find_ifa_by_addr(addr, vrf->vrf_id, SCTP_ADDR_LOCKED); in sctp_mark_ifa_addr_down()
326 if (sctp_ifap == NULL) { in sctp_mark_ifa_addr_down()
330 if (sctp_ifap->ifn_p == NULL) { in sctp_mark_ifa_addr_down()
335 if (strncmp(if_name, sctp_ifap->ifn_p->ifn_name, SCTP_IFNAMSIZ) != 0) { in sctp_mark_ifa_addr_down()
337 sctp_ifap->ifn_p->ifn_name, if_name); in sctp_mark_ifa_addr_down()
341 if (sctp_ifap->ifn_p->ifn_index != ifn_index) { in sctp_mark_ifa_addr_down()
343 sctp_ifap->ifn_p->ifn_index, ifn_index); in sctp_mark_ifa_addr_down()
348 sctp_ifap->localifa_flags &= (~SCTP_ADDR_VALID); in sctp_mark_ifa_addr_down()
349 sctp_ifap->localifa_flags |= SCTP_ADDR_IFA_UNUSEABLE; in sctp_mark_ifa_addr_down()
360 struct sctp_ifa *sctp_ifap; in sctp_mark_ifa_addr_up() local
369 sctp_ifap = sctp_find_ifa_by_addr(addr, vrf->vrf_id, SCTP_ADDR_LOCKED); in sctp_mark_ifa_addr_up()
370 if (sctp_ifap == NULL) { in sctp_mark_ifa_addr_up()
374 if (sctp_ifap->ifn_p == NULL) { in sctp_mark_ifa_addr_up()
379 if (strncmp(if_name, sctp_ifap->ifn_p->ifn_name, SCTP_IFNAMSIZ) != 0) { in sctp_mark_ifa_addr_up()
381 sctp_ifap->ifn_p->ifn_name, if_name); in sctp_mark_ifa_addr_up()
385 if (sctp_ifap->ifn_p->ifn_index != ifn_index) { in sctp_mark_ifa_addr_up()
387 sctp_ifap->ifn_p->ifn_index, ifn_index); in sctp_mark_ifa_addr_up()
392 sctp_ifap->localifa_flags &= (~SCTP_ADDR_IFA_UNUSEABLE); in sctp_mark_ifa_addr_up()
393 sctp_ifap->localifa_flags |= SCTP_ADDR_VALID; in sctp_mark_ifa_addr_up()
405 sctp_add_ifa_to_ifn(struct sctp_ifn *sctp_ifnp, struct sctp_ifa *sctp_ifap) in sctp_add_ifa_to_ifn() argument
409 LIST_INSERT_HEAD(&sctp_ifnp->ifalist, sctp_ifap, next_ifa); in sctp_add_ifa_to_ifn()
410 sctp_ifap->ifn_p = sctp_ifnp; in sctp_add_ifa_to_ifn()
411 atomic_add_int(&sctp_ifap->ifn_p->refcount, 1); in sctp_add_ifa_to_ifn()
414 ifa_af = sctp_ifap->address.sa.sa_family; in sctp_add_ifa_to_ifn()
444 sctp_remove_ifa_from_ifn(struct sctp_ifa *sctp_ifap) in sctp_remove_ifa_from_ifn() argument
446 LIST_REMOVE(sctp_ifap, next_ifa); in sctp_remove_ifa_from_ifn()
447 if (sctp_ifap->ifn_p) { in sctp_remove_ifa_from_ifn()
449 sctp_ifap->ifn_p->ifa_count--; in sctp_remove_ifa_from_ifn()
450 switch (sctp_ifap->address.sa.sa_family) { in sctp_remove_ifa_from_ifn()
453 sctp_ifap->ifn_p->num_v4--; in sctp_remove_ifa_from_ifn()
458 sctp_ifap->ifn_p->num_v6--; in sctp_remove_ifa_from_ifn()
465 if (LIST_EMPTY(&sctp_ifap->ifn_p->ifalist)) { in sctp_remove_ifa_from_ifn()
467 sctp_delete_ifn(sctp_ifap->ifn_p, SCTP_ADDR_LOCKED); in sctp_remove_ifa_from_ifn()
470 if ((sctp_ifap->ifn_p->num_v6 == 0) && in sctp_remove_ifa_from_ifn()
471 (sctp_ifap->ifn_p->registered_af == AF_INET6)) { in sctp_remove_ifa_from_ifn()
472 SCTP_DEREGISTER_INTERFACE(sctp_ifap->ifn_p->ifn_index, AF_INET6); in sctp_remove_ifa_from_ifn()
473 SCTP_REGISTER_INTERFACE(sctp_ifap->ifn_p->ifn_index, AF_INET); in sctp_remove_ifa_from_ifn()
474 sctp_ifap->ifn_p->registered_af = AF_INET; in sctp_remove_ifa_from_ifn()
475 } else if ((sctp_ifap->ifn_p->num_v4 == 0) && in sctp_remove_ifa_from_ifn()
476 (sctp_ifap->ifn_p->registered_af == AF_INET)) { in sctp_remove_ifa_from_ifn()
477 SCTP_DEREGISTER_INTERFACE(sctp_ifap->ifn_p->ifn_index, AF_INET); in sctp_remove_ifa_from_ifn()
478 SCTP_REGISTER_INTERFACE(sctp_ifap->ifn_p->ifn_index, AF_INET6); in sctp_remove_ifa_from_ifn()
479 sctp_ifap->ifn_p->registered_af = AF_INET6; in sctp_remove_ifa_from_ifn()
482 sctp_free_ifn(sctp_ifap->ifn_p); in sctp_remove_ifa_from_ifn()
484 sctp_ifap->ifn_p = NULL; in sctp_remove_ifa_from_ifn()
497 struct sctp_ifa *sctp_ifap = NULL; in sctp_add_addr_to_vrf() local
556 sctp_ifap = sctp_find_ifa_by_addr(addr, vrf->vrf_id, SCTP_ADDR_LOCKED); in sctp_add_addr_to_vrf()
557 if (sctp_ifap) { in sctp_add_addr_to_vrf()
559 if ((sctp_ifap->ifn_p) && in sctp_add_addr_to_vrf()
560 (sctp_ifap->ifn_p->ifn_index == ifn_index)) { in sctp_add_addr_to_vrf()
562 sctp_ifap->ifn_p->ifn_name, ifn_index, in sctp_add_addr_to_vrf()
563 (void *)sctp_ifap); in sctp_add_addr_to_vrf()
568 if (sctp_ifap->localifa_flags & SCTP_BEING_DELETED) { in sctp_add_addr_to_vrf()
571 sctp_ifap->localifa_flags = SCTP_ADDR_VALID; in sctp_add_addr_to_vrf()
572 sctp_ifap->ifn_p = sctp_ifnp; in sctp_add_addr_to_vrf()
573 atomic_add_int(&sctp_ifap->ifn_p->refcount, 1); in sctp_add_addr_to_vrf()
577 return (sctp_ifap); in sctp_add_addr_to_vrf()
579 if (sctp_ifap->ifn_p) { in sctp_add_addr_to_vrf()
585 (void *)sctp_ifap, sctp_ifap->ifn_p->ifn_name, in sctp_add_addr_to_vrf()
586 sctp_ifap->ifn_p->ifn_index, if_name, in sctp_add_addr_to_vrf()
589 sctp_remove_ifa_from_ifn(sctp_ifap); in sctp_add_addr_to_vrf()
591 sctp_add_ifa_to_ifn(sctp_ifnp, sctp_ifap); in sctp_add_addr_to_vrf()
595 sctp_ifap->localifa_flags = SCTP_ADDR_VALID; in sctp_add_addr_to_vrf()
597 (void *)sctp_ifnp, (void *)sctp_ifap); in sctp_add_addr_to_vrf()
598 sctp_add_ifa_to_ifn(sctp_ifnp, sctp_ifap); in sctp_add_addr_to_vrf()
604 SCTP_MALLOC(sctp_ifap, struct sctp_ifa *, sizeof(struct sctp_ifa), SCTP_M_IFA); in sctp_add_addr_to_vrf()
605 if (sctp_ifap == NULL) { in sctp_add_addr_to_vrf()
611 memset(sctp_ifap, 0, sizeof(struct sctp_ifa)); in sctp_add_addr_to_vrf()
612 sctp_ifap->ifn_p = sctp_ifnp; in sctp_add_addr_to_vrf()
614 sctp_ifap->vrf_id = vrf_id; in sctp_add_addr_to_vrf()
615 sctp_ifap->ifa = ifa; in sctp_add_addr_to_vrf()
616 memcpy(&sctp_ifap->address, addr, addr->sa_len); in sctp_add_addr_to_vrf()
617 sctp_ifap->localifa_flags = SCTP_ADDR_VALID | SCTP_ADDR_DEFER_USE; in sctp_add_addr_to_vrf()
618 sctp_ifap->flags = ifa_flags; in sctp_add_addr_to_vrf()
620 switch (sctp_ifap->address.sa.sa_family) { in sctp_add_addr_to_vrf()
626 sin = (struct sockaddr_in *)&sctp_ifap->address.sin; in sctp_add_addr_to_vrf()
627 if (SCTP_IFN_IS_IFT_LOOP(sctp_ifap->ifn_p) || in sctp_add_addr_to_vrf()
629 sctp_ifap->src_is_loop = 1; in sctp_add_addr_to_vrf()
632 sctp_ifap->src_is_priv = 1; in sctp_add_addr_to_vrf()
646 sin6 = (struct sockaddr_in6 *)&sctp_ifap->address.sin6; in sctp_add_addr_to_vrf()
647 if (SCTP_IFN_IS_IFT_LOOP(sctp_ifap->ifn_p) || in sctp_add_addr_to_vrf()
649 sctp_ifap->src_is_loop = 1; in sctp_add_addr_to_vrf()
652 sctp_ifap->src_is_priv = 1; in sctp_add_addr_to_vrf()
664 hash_of_addr = sctp_get_ifa_hash_val(&sctp_ifap->address.sa); in sctp_add_addr_to_vrf()
666 if ((sctp_ifap->src_is_priv == 0) && in sctp_add_addr_to_vrf()
667 (sctp_ifap->src_is_loop == 0)) { in sctp_add_addr_to_vrf()
668 sctp_ifap->src_is_glob = 1; in sctp_add_addr_to_vrf()
672 LIST_INSERT_HEAD(hash_addr_head, sctp_ifap, next_bucket); in sctp_add_addr_to_vrf()
673 sctp_ifap->refcount = 1; in sctp_add_addr_to_vrf()
674 LIST_INSERT_HEAD(&sctp_ifnp->ifalist, sctp_ifap, next_ifa); in sctp_add_addr_to_vrf()
690 atomic_add_int(&sctp_ifap->refcount, 1); in sctp_add_addr_to_vrf()
706 wi->ifa = sctp_ifap; in sctp_add_addr_to_vrf()
719 sctp_ifap->localifa_flags &= ~SCTP_ADDR_DEFER_USE; in sctp_add_addr_to_vrf()
721 return (sctp_ifap); in sctp_add_addr_to_vrf()
729 struct sctp_ifa *sctp_ifap = NULL; in sctp_del_addr_from_vrf() local
741 sctp_ifap = sctp_find_ifa_by_addr(addr, vrf->vrf_id, SCTP_ADDR_LOCKED); in sctp_del_addr_from_vrf()
742 if (sctp_ifap) { in sctp_del_addr_from_vrf()
744 if (sctp_ifap->ifn_p) { in sctp_del_addr_from_vrf()
753 if (strncmp(if_name, sctp_ifap->ifn_p->ifn_name, SCTP_IFNAMSIZ) == 0) { in sctp_del_addr_from_vrf()
760 if (ifn_index == sctp_ifap->ifn_p->ifn_index) { in sctp_del_addr_from_vrf()
768 sctp_ifap->ifn_p->ifn_index, sctp_ifap->ifn_p->ifn_name); in sctp_del_addr_from_vrf()
773 SCTPDBG(SCTP_DEBUG_PCB4, "Deleting ifa %p\n", (void *)sctp_ifap); in sctp_del_addr_from_vrf()
774 sctp_ifap->localifa_flags &= SCTP_ADDR_VALID; in sctp_del_addr_from_vrf()
784 LIST_REMOVE(sctp_ifap, next_bucket); in sctp_del_addr_from_vrf()
785 sctp_remove_ifa_from_ifn(sctp_ifap); in sctp_del_addr_from_vrf()
797 if (sctp_ifap) { in sctp_del_addr_from_vrf()
809 sctp_free_ifa(sctp_ifap); in sctp_del_addr_from_vrf()
815 wi->ifa = sctp_ifap; in sctp_del_addr_from_vrf()
2793 struct sctp_ifa *sctp_ifap, struct thread *p) in sctp_inpcb_bind() argument
3152 if (sctp_ifap != NULL) { in sctp_inpcb_bind()
3153 ifa = sctp_ifap; in sctp_inpcb_bind()