Home | History | Annotate | Download | only in netinet

Lines Matching defs:imo

230     struct ip_moptions *imo, struct inpcb *inp)
349 imo != NULL && imo->imo_multicast_if_index != 0) {
350 ifp = mifp = if_get_byindex(imo->imo_multicast_if_index, &psref);
419 if (imo != NULL)
420 ip->ip_ttl = imo->imo_multicast_ttl;
478 if (inmgroup && (imo == NULL || imo->imo_multicast_loop)) {
805 imo, inp);
1444 struct ip_moptions *imo;
1484 imo = &pktopts->ippo_imobuf; /* local buf in pktopts */
1486 memcpy(imo, pktopts->ippo_imo, sizeof(*imo));
1488 memset(imo, 0, sizeof(*imo));
1489 imo->imo_multicast_ttl = IP_DEFAULT_MULTICAST_TTL;
1490 imo->imo_multicast_loop = IP_DEFAULT_MULTICAST_LOOP;
1492 imo->imo_multicast_if_index = pktinfo->ipi_ifindex;
1493 pktopts->ippo_imo = imo;
1824 ip_add_membership(struct ip_moptions *imo, const struct sockopt *sopt)
1831 /* imo is protected by solock or referenced only by the caller */
1860 for (i = 0; i < imo->imo_num_memberships; ++i) {
1861 if (imo->imo_membership[i]->inm_ifp == ifp &&
1862 in_hosteq(imo->imo_membership[i]->inm_addr, ia))
1865 if (i < imo->imo_num_memberships) {
1879 imo->imo_membership[i] = in_addmulti(&ia, ifp);
1880 if (imo->imo_membership[i] == NULL) {
1885 ++imo->imo_num_memberships;
1898 ip_drop_membership(struct ip_moptions *imo, const struct sockopt *sopt)
1905 /* imo is protected by solock or referenced only by the caller */
1924 for (i = 0; i < imo->imo_num_memberships; ++i) {
1926 imo->imo_membership[i]->inm_ifp == ifp) &&
1927 in_hosteq(imo->imo_membership[i]->inm_addr, ia))
1930 if (i == imo->imo_num_memberships) {
1939 in_delmulti(imo->imo_membership[i]);
1944 for (++i; i < imo->imo_num_memberships; ++i)
1945 imo->imo_membership[i-1] = imo->imo_membership[i];
1946 --imo->imo_num_memberships;
1960 struct ip_moptions *imo = *pimo;
1965 /* The passed imo isn't NULL, it should be protected by solock */
1967 if (!imo) {
1972 imo = kmem_intr_alloc(sizeof(*imo), KM_NOSLEEP);
1973 if (imo == NULL)
1976 imo->imo_multicast_if_index = 0;
1977 imo->imo_multicast_addr.s_addr = INADDR_ANY;
1978 imo->imo_multicast_ttl = IP_DEFAULT_MULTICAST_TTL;
1979 imo->imo_multicast_loop = IP_DEFAULT_MULTICAST_LOOP;
1980 imo->imo_num_memberships = 0;
1981 *pimo = imo;
2000 imo->imo_multicast_if_index = 0;
2015 imo->imo_multicast_if_index = ifp->if_index;
2018 imo
2020 imo->imo_multicast_addr.s_addr = INADDR_ANY;
2028 error = ip_getoptval(sopt, &imo->imo_multicast_ttl, MAXTTL);
2036 error = ip_getoptval(sopt, &imo->imo_multicast_loop, 1);
2040 error = ip_add_membership(imo, sopt);
2044 error = ip_drop_membership(imo, sopt);
2055 if (imo->imo_multicast_if_index == 0 &&
2056 imo->imo_multicast_ttl == IP_DEFAULT_MULTICAST_TTL &&
2057 imo->imo_multicast_loop == IP_DEFAULT_MULTICAST_LOOP &&
2058 imo->imo_num_memberships == 0) {
2059 kmem_intr_free(imo, sizeof(*imo));
2070 ip_getmoptions(struct ip_moptions *imo, struct sockopt *sopt)
2076 /* imo is protected by solock or referenced only by the caller */
2080 if (imo == NULL || imo->imo_multicast_if_index == 0)
2082 else if (imo->imo_multicast_addr.s_addr) {
2084 addr = imo->imo_multicast_addr;
2090 ifp = if_byindex(imo->imo_multicast_if_index);
2101 optval = imo ? imo->imo_multicast_ttl
2108 optval = imo ? imo->imo_multicast_loop
2125 ip_freemoptions(struct ip_moptions *imo)
2129 /* The owner of imo (inp) should be protected by solock */
2131 if (imo != NULL) {
2132 for (i = 0; i < imo->imo_num_memberships; ++i) {
2133 struct in_multi *inm = imo->imo_membership[i];
2138 kmem_intr_free(imo, sizeof(*imo));