• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/net/sctp/

Lines Matching refs:asoc

102 static int sctp_send_asconf(struct sctp_association *asoc,
113 static inline int sctp_wspace(struct sctp_association *asoc)
115 struct sock *sk = asoc->base.sk;
118 if (asoc->ep->sndbuf_policy) {
120 amt = sk->sk_sndbuf - asoc->sndbuf_used;
143 struct sctp_association *asoc = chunk->asoc;
144 struct sock *sk = asoc->base.sk;
147 sctp_association_hold(asoc);
155 asoc->sndbuf_used += SCTP_DATA_SNDSIZE(chunk) +
188 struct sctp_association *asoc = NULL;
201 asoc = list_entry(sctp_sk(sk)->ep->asocs.next,
203 return asoc;
211 asoc = (struct sctp_association *)idr_find(&sctp_assocs_id, (int)id);
214 if (!asoc || (asoc->base.sk != sk) || asoc->base.dead)
217 return asoc;
399 static int sctp_send_asconf(struct sctp_association *asoc,
407 if (asoc->addip_last_asconf) {
408 list_add_tail(&chunk->list, &asoc->addip_chunk_list);
414 retval = sctp_primitive_ASCONF(asoc, chunk);
418 asoc->addip_last_asconf = chunk;
492 struct sctp_association *asoc;
515 asoc = list_entry(pos, struct sctp_association, asocs);
517 if (!asoc->peer.asconf_capable)
520 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_ADD_IP)
523 if (!sctp_state(asoc, ESTABLISHED))
540 if (sctp_assoc_lookup_laddr(asoc, addr))
551 sctp_read_lock(&asoc->base.addr_lock);
552 bp = &asoc->base.bind_addr;
555 sctp_read_unlock(&asoc->base.addr_lock);
557 chunk = sctp_make_asconf_update_ip(asoc, &laddr->a, addrs,
564 retval = sctp_send_asconf(asoc, chunk);
572 sctp_write_lock(&asoc->base.addr_lock);
582 sctp_write_unlock(&asoc->base.addr_lock);
685 struct sctp_association *asoc;
707 asoc = list_entry(pos, struct sctp_association, asocs);
709 if (!asoc->peer.asconf_capable)
712 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_DEL_IP)
715 if (!sctp_state(asoc, ESTABLISHED))
732 if (!sctp_assoc_lookup_laddr(asoc, laddr))
745 sctp_read_lock(&asoc->base.addr_lock);
746 bp = &asoc->base.bind_addr;
749 sctp_read_unlock(&asoc->base.addr_lock);
753 chunk = sctp_make_asconf_update_ip(asoc, laddr, addrs, addrcnt,
764 sctp_write_lock(&asoc->base.addr_lock);
778 sctp_write_unlock(&asoc->base.addr_lock);
785 list_for_each(pos1, &asoc->peer.transport_addr_list) {
790 sctp_sk(asoc->base.sk));
793 retval = sctp_send_asconf(asoc, chunk);
963 struct sctp_association *asoc = NULL;
1014 if (asoc && asoc->peer.port && asoc->peer.port != port)
1023 if (asoc2 && asoc2 != asoc) {
1040 if (!asoc) {
1067 asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL);
1068 if (!asoc) {
1075 transport = sctp_assoc_add_peer(asoc, sa_addr, GFP_KERNEL,
1087 err = sctp_assoc_set_bind_addr_from_ep(asoc, GFP_KERNEL);
1092 err = sctp_primitive_ASSOCIATE(asoc, NULL);
1098 inet_sk(sk)->dport = htons(asoc->peer.port);
1111 err = sctp_wait_for_connect(asoc, &timeo);
1114 asoc = NULL;
1118 SCTP_DEBUG_PRINTK("About to exit __sctp_connect() free asoc: %p"
1120 asoc, kaddrs, err);
1121 if (asoc)
1122 sctp_association_free(asoc);
1220 struct sctp_association *asoc;
1232 asoc = list_entry(pos, struct sctp_association, asocs);
1240 if (sctp_state(asoc, CLOSED)) {
1241 sctp_unhash_established(asoc);
1242 sctp_association_free(asoc);
1250 chunk = sctp_make_abort_user(asoc, NULL, 0);
1252 sctp_primitive_ABORT(asoc, chunk);
1254 sctp_primitive_SHUTDOWN(asoc, NULL);
1328 struct sctp_association *new_asoc=NULL, *asoc=NULL;
1434 asoc = sctp_endpoint_lookup_assoc(ep, &to, &transport);
1435 if (!asoc) {
1449 asoc = sctp_id2assoc(sk, associd);
1450 if (!asoc) {
1456 if (asoc) {
1457 SCTP_DEBUG_PRINTK("Just looked up association: %p.\n", asoc);
1464 if (sctp_state(asoc, CLOSED) && sctp_style(sk, TCP)) {
1471 asoc);
1472 sctp_primitive_SHUTDOWN(asoc, NULL);
1479 chunk = sctp_make_abort_user(asoc, msg, msg_len);
1485 SCTP_DEBUG_PRINTK("Aborting association: %p\n", asoc);
1486 sctp_primitive_ABORT(asoc, chunk);
1493 if (!asoc) {
1555 asoc = new_asoc;
1562 asoc->c.sinit_num_ostreams =
1566 asoc->c.sinit_max_instreams =
1570 asoc->max_init_attempts
1574 asoc->max_init_timeo =
1580 transport = sctp_assoc_add_peer(asoc, &to, GFP_KERNEL, SCTP_UNKNOWN);
1585 err = sctp_assoc_set_bind_addr_from_ep(asoc, GFP_KERNEL);
1599 default_sinfo.sinfo_stream = asoc->default_stream;
1600 default_sinfo.sinfo_flags = asoc->default_flags;
1601 default_sinfo.sinfo_ppid = asoc->default_ppid;
1602 default_sinfo.sinfo_context = asoc->default_context;
1603 default_sinfo.sinfo_timetolive = asoc->default_timetolive;
1604 default_sinfo.sinfo_assoc_id = sctp_assoc2id(asoc);
1616 if (asoc->pmtu_pending)
1617 sctp_assoc_pending_pmtu(asoc);
1624 if (sctp_sk(sk)->disable_fragments && (msg_len > asoc->frag_point)) {
1631 if (sinfo->sinfo_stream >= asoc->c.sinit_num_ostreams) {
1638 if (!sctp_wspace(asoc)) {
1639 err = sctp_wait_for_sndbuf(asoc, &timeo, msg_len);
1650 chunk_tp = sctp_assoc_lookup_paddr(asoc, &to);
1659 if (sctp_state(asoc, CLOSED)) {
1660 err = sctp_primitive_ASSOCIATE(asoc, NULL);
1667 datamsg = sctp_datamsg_from_user(asoc, sinfo, msg, msg_len);
1688 err = sctp_primitive_SEND(asoc, chunk);
1708 sctp_association_free(asoc);
1840 sctp_assoc_rwnd_increase(event->asoc, copied);
2025 struct sctp_association *asoc,
2034 error = sctp_primitive_REQUESTHEARTBEAT (trans->asoc, trans);
2057 } else if (asoc) {
2058 asoc->hbinterval =
2070 } else if (asoc) {
2071 asoc->param_flags =
2072 (asoc->param_flags & ~SPP_HB) | hb_change;
2087 sctp_assoc_sync_pmtu(asoc);
2088 } else if (asoc) {
2089 asoc->pathmtu = params->spp_pathmtu;
2104 sctp_assoc_sync_pmtu(asoc);
2106 } else if (asoc) {
2107 asoc->param_flags =
2108 (asoc->param_flags & ~SPP_PMTUD) | pmtud_change;
2123 } else if (asoc) {
2124 asoc->sackdelay =
2136 } else if (asoc) {
2137 asoc->param_flags =
2138 (asoc->param_flags & ~SPP_SACKDELAY) |
2154 } else if (asoc) {
2155 asoc->pathmaxrxt = params->spp_pathmaxrxt;
2169 struct sctp_association *asoc = NULL;
2207 asoc = sctp_id2assoc(sk, params.spp_assoc_id);
2208 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP))
2214 if (params.spp_flags & SPP_HB_DEMAND && !trans && !asoc)
2218 error = sctp_apply_peer_addr_params(&params, trans, asoc, sp,
2228 if (!trans && asoc) {
2231 list_for_each(pos, &asoc->peer.transport_addr_list) {
2234 sctp_apply_peer_addr_params(&params, trans, asoc, sp,
2276 struct sctp_association *asoc = NULL;
2293 asoc = sctp_id2assoc(sk, params.assoc_id);
2294 if (!asoc && params.assoc_id && sctp_style(sk, UDP))
2298 if (asoc) {
2299 asoc->sackdelay =
2301 asoc->param_flags =
2302 (asoc->param_flags & ~SPP_SACKDELAY) |
2311 if (asoc) {
2312 asoc->param_flags =
2313 (asoc->param_flags & ~SPP_SACKDELAY) |
2323 if (asoc) {
2326 list_for_each(pos, &asoc->peer.transport_addr_list) {
2397 struct sctp_association *asoc;
2405 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
2406 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP))
2409 if (asoc) {
2410 asoc->default_stream = info.sinfo_stream;
2411 asoc->default_flags = info.sinfo_flags;
2412 asoc->default_ppid = info.sinfo_ppid;
2413 asoc->default_context = info.sinfo_context;
2414 asoc->default_timetolive = info.sinfo_timetolive;
2448 sctp_assoc_set_primary(trans->asoc, trans);
2489 struct sctp_association *asoc;
2497 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
2500 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP))
2503 if (asoc) {
2505 asoc->rto_initial =
2508 asoc->rto_max = msecs_to_jiffies(rtoinfo.srto_max);
2510 asoc->rto_min = msecs_to_jiffies(rtoinfo.srto_min);
2543 struct sctp_association *asoc;
2550 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
2552 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP))
2556 if (asoc) {
2563 list_for_each(pos, &asoc->peer.transport_addr_list) {
2580 asoc->max_retrans = assocparams.sasoc_asocmaxrxt;
2584 asoc->cookie_life.tv_sec =
2586 asoc->cookie_life.tv_usec =
2643 struct sctp_association *asoc;
2658 asoc = list_entry(pos, struct sctp_association, asocs);
2659 asoc->frag_point = sctp_frag_point(sp, asoc->pathmtu);
2679 struct sctp_association *asoc = NULL;
2696 asoc = sctp_id2assoc(sk, prim.sspp_assoc_id);
2697 if (!asoc)
2700 if (!asoc->peer.asconf_capable)
2703 if (asoc->peer.addip_disabled_mask & SCTP_PARAM_SET_PRIMARY)
2706 if (!sctp_state(asoc, ESTABLISHED))
2709 if (!sctp_assoc_lookup_laddr(asoc, (union sctp_addr *)&prim.sspp_addr))
2713 chunk = sctp_make_asconf_set_prim(asoc,
2718 err = sctp_send_asconf(asoc, chunk);
2759 struct sctp_association *asoc;
2769 asoc = sctp_id2assoc(sk, params.assoc_id);
2770 if (!asoc)
2772 asoc->default_rcv_context = params.assoc_value;
3069 struct sctp_association *asoc;
3097 asoc = list_entry(ep->asocs.next, struct sctp_association, asocs);
3099 newsk = sp->pf->create_accept_sk(sk, asoc);
3106 * asoc to the newsk.
3108 sctp_sock_migrate(sk, newsk, asoc, SCTP_SOCKET_TCP);
3278 struct sctp_association *asoc;
3286 asoc = list_entry(ep->asocs.next,
3288 sctp_primitive_SHUTDOWN(asoc, NULL);
3305 struct sctp_association *asoc = NULL;
3322 asoc = sctp_id2assoc(sk, associd);
3323 if (!asoc) {
3328 transport = asoc->peer.primary_path;
3330 status.sstat_assoc_id = sctp_assoc2id(asoc);
3331 status.sstat_state = asoc->state;
3332 status.sstat_rwnd = asoc->peer.rwnd;
3333 status.sstat_unackdata = asoc->unack_data;
3335 status.sstat_penddata = sctp_tsnmap_pending(&asoc->peer.tsn_map);
3336 status.sstat_instrms = asoc->c.sinit_max_instreams;
3337 status.sstat_outstrms = asoc->c.sinit_num_ostreams;
3338 status.sstat_fragmentation_point = asoc->frag_point;
3339 status.sstat_primary.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
3404 pinfo.spinfo_assoc_id = sctp_assoc2id(transport->asoc);
3497 SCTP_STATIC int sctp_do_peeloff(struct sctp_association *asoc,
3500 struct sock *sk = asoc->base.sk;
3518 * asoc to the newsk.
3520 sctp_sock_migrate(sk, sock->sk, asoc, SCTP_SOCKET_UDP_HIGH_BANDWIDTH);
3525 af = sctp_get_af_specific(asoc->peer.primary_addr.sa.sa_family);
3526 af->to_sk_daddr(&asoc->peer.primary_addr, sk);
3528 inetsk->id = asoc->next_tsn ^ jiffies;
3540 struct sctp_association *asoc;
3548 asoc = sctp_id2assoc(sk, peeloff.associd);
3549 if (!asoc) {
3554 SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p\n", __FUNCTION__, sk, asoc);
3556 retval = sctp_do_peeloff(asoc, &newsock);
3567 SCTP_DEBUG_PRINTK("%s: sk: %p asoc: %p newsk: %p sd: %d\n",
3568 __FUNCTION__, sk, asoc, newsock->sk, retval);
3679 struct sctp_association *asoc = NULL;
3704 asoc = sctp_id2assoc(sk, params.spp_assoc_id);
3705 if (!asoc && params.spp_assoc_id && sctp_style(sk, UDP)) {
3719 } else if (asoc) {
3721 params.spp_hbinterval = jiffies_to_msecs(asoc->hbinterval);
3722 params.spp_pathmtu = asoc->pathmtu;
3723 params.spp_pathmaxrxt = asoc->pathmaxrxt;
3724 params.spp_sackdelay = jiffies_to_msecs(asoc->sackdelay);
3727 params.spp_flags = asoc->param_flags;
3780 struct sctp_association *asoc = NULL;
3795 asoc = sctp_id2assoc(sk, params.assoc_id);
3796 if (!asoc && params.assoc_id && sctp_style(sk, UDP))
3799 if (asoc) {
3801 if (asoc->param_flags & SPP_SACKDELAY_ENABLE)
3803 asoc->sackdelay);
3851 struct sctp_association *asoc;
3862 asoc = sctp_id2assoc(sk, id);
3863 if (!asoc)
3866 list_for_each(pos, &asoc->peer.transport_addr_list) {
3881 struct sctp_association *asoc;
3902 asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
3903 if (!asoc)
3907 list_for_each(pos, &asoc->peer.transport_addr_list) {
3930 struct sctp_association *asoc;
3949 asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
3950 if (!asoc)
3956 list_for_each(pos, &asoc->peer.transport_addr_list) {
3985 struct sctp_association *asoc;
4007 asoc = sctp_id2assoc(sk, id);
4008 if (!asoc)
4010 bp = &asoc->base.bind_addr;
4011 addr_lock = &asoc->base.addr_lock;
4118 struct sctp_association *asoc;
4151 asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
4152 if (!asoc)
4154 bp = &asoc->base.bind_addr;
4155 addr_lock = &asoc->base.addr_lock;
4221 struct sctp_association *asoc;
4253 asoc = sctp_id2assoc(sk, getaddrs.assoc_id);
4254 if (!asoc)
4256 bp = &asoc->base.bind_addr;
4257 addr_lock = &asoc->base.addr_lock;
4331 struct sctp_association *asoc;
4342 asoc = sctp_id2assoc(sk, prim.ssp_assoc_id);
4343 if (!asoc)
4346 if (!asoc->peer.primary_path)
4349 memcpy(&prim.ssp_addr, &asoc->peer.primary_path->ipaddr,
4350 asoc->peer.primary_path->af_specific->sockaddr_len);
4413 struct sctp_association *asoc;
4424 asoc = sctp_id2assoc(sk, info.sinfo_assoc_id);
4425 if (!asoc && info.sinfo_assoc_id && sctp_style(sk, UDP))
4428 if (asoc) {
4429 info.sinfo_stream = asoc->default_stream;
4430 info.sinfo_flags = asoc->default_flags;
4431 info.sinfo_ppid = asoc->default_ppid;
4432 info.sinfo_context = asoc->default_context;
4433 info.sinfo_timetolive = asoc->default_timetolive;
4493 struct sctp_association *asoc;
4503 asoc = sctp_id2assoc(sk, rtoinfo.srto_assoc_id);
4505 if (!asoc && rtoinfo.srto_assoc_id && sctp_style(sk, UDP))
4509 if (asoc) {
4510 rtoinfo.srto_initial = jiffies_to_msecs(asoc->rto_initial);
4511 rtoinfo.srto_max = jiffies_to_msecs(asoc->rto_max);
4512 rtoinfo.srto_min = jiffies_to_msecs(asoc->rto_min);
4548 struct sctp_association *asoc;
4560 asoc = sctp_id2assoc(sk, assocparams.sasoc_assoc_id);
4562 if (!asoc && assocparams.sasoc_assoc_id && sctp_style(sk, UDP))
4566 if (asoc) {
4567 assocparams.sasoc_asocmaxrxt = asoc->max_retrans;
4568 assocparams.sasoc_peer_rwnd = asoc->peer.rwnd;
4569 assocparams.sasoc_local_rwnd = asoc->a_rwnd;
4570 assocparams.sasoc_cookie_life = (asoc->cookie_life.tv_sec
4572 (asoc->cookie_life.tv_usec
4575 list_for_each(pos, &asoc->peer.transport_addr_list) {
4641 struct sctp_association *asoc;
4654 asoc = sctp_id2assoc(sk, params.assoc_id);
4655 if (!asoc)
4657 params.assoc_value = asoc->default_rcv_context;
5609 static void __sctp_write_space(struct sctp_association *asoc)
5611 struct sock *sk = asoc->base.sk;
5614 if ((sctp_wspace(asoc) > 0) && sock) {
5615 if (waitqueue_active(&asoc->wait))
5616 wake_up_interruptible(&asoc->wait);
5639 struct sctp_association *asoc;
5645 asoc = chunk->asoc;
5646 sk = asoc->base.sk;
5647 asoc->sndbuf_used -= SCTP_DATA_SNDSIZE(chunk) +
5654 __sctp_write_space(asoc);
5656 sctp_association_put(asoc);
5674 static int sctp_wait_for_sndbuf(struct sctp_association *asoc, long *timeo_p,
5677 struct sock *sk = asoc->base.sk;
5682 SCTP_DEBUG_PRINTK("wait_for_sndbuf: asoc=%p, timeo=%ld, msg_len=%zu\n",
5683 asoc, (long)(*timeo_p), msg_len);
5686 sctp_association_hold(asoc);
5690 prepare_to_wait_exclusive(&asoc->wait, &wait,
5694 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING ||
5695 asoc->base.dead)
5699 if (msg_len <= sctp_wspace(asoc))
5707 BUG_ON(sk != asoc->base.sk);
5714 finish_wait(&asoc->wait, &wait);
5717 sctp_association_put(asoc);
5737 struct sctp_association *asoc;
5742 asoc = list_entry(pos, struct sctp_association, asocs);
5743 __sctp_write_space(asoc);
5771 static int sctp_wait_for_connect(struct sctp_association *asoc, long *timeo_p)
5773 struct sock *sk = asoc->base.sk;
5778 SCTP_DEBUG_PRINTK("%s: asoc=%p, timeo=%ld\n", __FUNCTION__, asoc,
5782 sctp_association_hold(asoc);
5785 prepare_to_wait_exclusive(&asoc->wait, &wait,
5791 if (sk->sk_err || asoc->state >= SCTP_STATE_SHUTDOWN_PENDING ||
5792 asoc->base.dead)
5797 if (sctp_state(asoc, ESTABLISHED))
5811 finish_wait(&asoc->wait, &wait);
5814 sctp_association_put(asoc);
5819 if (asoc->init_err_counter + 1 > asoc->max_init_attempts)
5974 if (event->asoc == assoc) {
6005 if (event->asoc == assoc) {