* VIMAGE: assume curvnet set by caller. */
| 499 | * VIMAGE: assume curvnet set by caller. |
| 500 | */ |
| 501 | static struct mld_ifsoftc * |
| 502 | mli_alloc_locked(/*const*/ struct ifnet *ifp) |
| 503 | { |
| 504 | struct mld_ifsoftc *mli; |
| 505 | |
| 506 | MLD_LOCK_ASSERT(); |
| 507 | |
| 508 | mli = malloc(sizeof(struct mld_ifsoftc), M_MLD, M_NOWAIT|M_ZERO); |
| 509 | if (mli == NULL) |
| 510 | goto out; |
| 511 | |
| 512 | mli->mli_ifp = ifp; |
| 513 | mli->mli_version = MLD_VERSION_2; |
| 514 | mli->mli_flags = 0; |
| 515 | mli->mli_rv = MLD_RV_INIT; |
| 516 | mli->mli_qi = MLD_QI_INIT; |
| 517 | mli->mli_qri = MLD_QRI_INIT; |
| 518 | mli->mli_uri = MLD_URI_INIT; |
| 519 | mbufq_init(&mli->mli_gq, MLD_MAX_RESPONSE_PACKETS); |
| 520 | |
| 521 | LIST_INSERT_HEAD(&V_mli_head, mli, mli_link); |
| 522 | |
| 523 | CTR2(KTR_MLD, "allocate mld_ifsoftc for ifp %p(%s)", |
| 524 | ifp, if_name(ifp)); |
| 525 | |
| 526 | out: |
| 527 | return (mli); |
| 528 | } |
| 529 | |
| 530 | /* |
| 531 | * Hook for ifdetach. |
no test coverage detected