Lines Matching refs:chunk
67 static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
73 struct sctp_chunk *chunk = skb_shinfo(skb)->destructor_arg; in sctp_control_release_owner() local
75 if (chunk->shkey) { in sctp_control_release_owner()
76 struct sctp_shared_key *shkey = chunk->shkey; in sctp_control_release_owner()
77 struct sctp_association *asoc = chunk->asoc; in sctp_control_release_owner()
93 sctp_auth_shkey_release(chunk->shkey); in sctp_control_release_owner()
97 static void sctp_control_set_owner_w(struct sctp_chunk *chunk) in sctp_control_set_owner_w() argument
99 struct sctp_association *asoc = chunk->asoc; in sctp_control_set_owner_w()
100 struct sk_buff *skb = chunk->skb; in sctp_control_set_owner_w()
109 if (chunk->auth) { in sctp_control_set_owner_w()
110 chunk->shkey = asoc->shkey; in sctp_control_set_owner_w()
111 sctp_auth_shkey_hold(chunk->shkey); in sctp_control_set_owner_w()
114 skb_shinfo(skb)->destructor_arg = chunk; in sctp_control_set_owner_w()
119 int sctp_chunk_iif(const struct sctp_chunk *chunk) in sctp_chunk_iif() argument
121 struct sk_buff *skb = chunk->skb; in sctp_chunk_iif()
143 int sctp_init_cause(struct sctp_chunk *chunk, __be16 cause_code, in sctp_init_cause() argument
154 if (skb_tailroom(chunk->skb) < len) in sctp_init_cause()
157 chunk->subh.err_hdr = sctp_addto_chunk(chunk, sizeof(err), &err); in sctp_init_cause()
380 const struct sctp_chunk *chunk, in sctp_make_init_ack() argument
411 cookie = sctp_pack_cookie(asoc->ep, asoc, chunk, &cookie_len, in sctp_make_init_ack()
485 if (chunk->transport) in sctp_make_init_ack()
488 &chunk->transport->ipaddr); in sctp_make_init_ack()
568 const struct sctp_chunk *chunk) in sctp_make_cookie_echo() argument
594 if (chunk) in sctp_make_cookie_echo()
595 retval->transport = chunk->transport; in sctp_make_cookie_echo()
620 const struct sctp_chunk *chunk) in sctp_make_cookie_ack() argument
635 if (retval && chunk && chunk->transport) in sctp_make_cookie_ack()
638 &chunk->transport->ipaddr); in sctp_make_cookie_ack()
668 const struct sctp_chunk *chunk) in sctp_make_cwr() argument
693 if (chunk) in sctp_make_cwr()
694 retval->transport = chunk->transport; in sctp_make_cwr()
855 const struct sctp_chunk *chunk) in sctp_make_shutdown() argument
861 if (chunk && chunk->asoc) in sctp_make_shutdown()
862 ctsn = sctp_tsnmap_get_ctsn(&chunk->asoc->peer.tsn_map); in sctp_make_shutdown()
876 if (chunk) in sctp_make_shutdown()
877 retval->transport = chunk->transport; in sctp_make_shutdown()
883 const struct sctp_chunk *chunk) in sctp_make_shutdown_ack() argument
899 if (retval && chunk) in sctp_make_shutdown_ack()
900 retval->transport = chunk->transport; in sctp_make_shutdown_ack()
907 const struct sctp_chunk *chunk) in sctp_make_shutdown_complete() argument
930 if (retval && chunk) in sctp_make_shutdown_complete()
931 retval->transport = chunk->transport; in sctp_make_shutdown_complete()
940 const struct sctp_chunk *chunk, in sctp_make_abort() argument
950 if (chunk && chunk->chunk_hdr && in sctp_make_abort()
951 chunk->chunk_hdr->type == SCTP_CID_INIT) in sctp_make_abort()
969 if (retval && chunk) in sctp_make_abort()
970 retval->transport = chunk->transport; in sctp_make_abort()
978 const struct sctp_chunk *chunk, in sctp_make_abort_no_data() argument
984 retval = sctp_make_abort(asoc, chunk, in sctp_make_abort_no_data()
1004 if (chunk) in sctp_make_abort_no_data()
1005 retval->transport = chunk->transport; in sctp_make_abort_no_data()
1056 static void *sctp_addto_param(struct sctp_chunk *chunk, int len, in sctp_addto_param() argument
1059 int chunklen = ntohs(chunk->chunk_hdr->length); in sctp_addto_param()
1062 target = skb_put(chunk->skb, len); in sctp_addto_param()
1070 chunk->chunk_hdr->length = htons(chunklen + len); in sctp_addto_param()
1071 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_addto_param()
1079 const struct sctp_chunk *chunk, in sctp_make_abort_violation() argument
1086 retval = sctp_make_abort(asoc, chunk, sizeof(struct sctp_errhdr) + in sctp_make_abort_violation()
1094 phdr.type = htons(chunk->chunk_hdr->type); in sctp_make_abort_violation()
1095 phdr.length = chunk->chunk_hdr->length; in sctp_make_abort_violation()
1105 const struct sctp_chunk *chunk, in sctp_make_violation_paramlen() argument
1113 retval = sctp_make_abort(asoc, chunk, payload_len); in sctp_make_violation_paramlen()
1128 const struct sctp_chunk *chunk) in sctp_make_violation_max_retrans() argument
1134 retval = sctp_make_abort(asoc, chunk, payload_len); in sctp_make_violation_max_retrans()
1176 const struct sctp_chunk *chunk, in sctp_make_heartbeat_ack() argument
1198 if (chunk) in sctp_make_heartbeat_ack()
1199 retval->transport = chunk->transport; in sctp_make_heartbeat_ack()
1210 const struct sctp_chunk *chunk, in sctp_make_op_error_space() argument
1229 if (chunk) in sctp_make_op_error_space()
1230 retval->transport = chunk->transport; in sctp_make_op_error_space()
1245 const struct sctp_chunk *chunk) in sctp_make_op_error_limited() argument
1257 return sctp_make_op_error_space(asoc, chunk, size); in sctp_make_op_error_limited()
1262 const struct sctp_chunk *chunk, in sctp_make_op_error() argument
1268 retval = sctp_make_op_error_space(asoc, chunk, paylen + reserve_tail); in sctp_make_op_error()
1353 SCTP_DBG_OBJCNT_INC(chunk); in sctp_chunkify()
1361 void sctp_init_addrs(struct sctp_chunk *chunk, union sctp_addr *src, in sctp_init_addrs() argument
1364 memcpy(&chunk->source, src, sizeof(union sctp_addr)); in sctp_init_addrs()
1365 memcpy(&chunk->dest, dest, sizeof(union sctp_addr)); in sctp_init_addrs()
1369 const union sctp_addr *sctp_source(const struct sctp_chunk *chunk) in sctp_source() argument
1372 if (chunk->transport) { in sctp_source()
1373 return &chunk->transport->ipaddr; in sctp_source()
1376 return &chunk->source; in sctp_source()
1443 struct sctp_chunk *chunk; in sctp_make_control() local
1445 chunk = _sctp_make_chunk(asoc, type, flags, paylen, gfp); in sctp_make_control()
1446 if (chunk) in sctp_make_control()
1447 sctp_control_set_owner_w(chunk); in sctp_make_control()
1449 return chunk; in sctp_make_control()
1453 static void sctp_chunk_destroy(struct sctp_chunk *chunk) in sctp_chunk_destroy() argument
1455 BUG_ON(!list_empty(&chunk->list)); in sctp_chunk_destroy()
1456 list_del_init(&chunk->transmitted_list); in sctp_chunk_destroy()
1458 consume_skb(chunk->skb); in sctp_chunk_destroy()
1459 consume_skb(chunk->auth_chunk); in sctp_chunk_destroy()
1461 SCTP_DBG_OBJCNT_DEC(chunk); in sctp_chunk_destroy()
1462 kmem_cache_free(sctp_chunk_cachep, chunk); in sctp_chunk_destroy()
1466 void sctp_chunk_free(struct sctp_chunk *chunk) in sctp_chunk_free() argument
1469 if (chunk->msg) in sctp_chunk_free()
1470 sctp_datamsg_put(chunk->msg); in sctp_chunk_free()
1472 sctp_chunk_put(chunk); in sctp_chunk_free()
1491 void *sctp_addto_chunk(struct sctp_chunk *chunk, int len, const void *data) in sctp_addto_chunk() argument
1493 int chunklen = ntohs(chunk->chunk_hdr->length); in sctp_addto_chunk()
1497 skb_put_zero(chunk->skb, padlen); in sctp_addto_chunk()
1498 target = skb_put_data(chunk->skb, data, len); in sctp_addto_chunk()
1501 chunk->chunk_hdr->length = htons(chunklen + padlen + len); in sctp_addto_chunk()
1502 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_addto_chunk()
1511 int sctp_user_addto_chunk(struct sctp_chunk *chunk, int len, in sctp_user_addto_chunk() argument
1517 target = skb_put(chunk->skb, len); in sctp_user_addto_chunk()
1524 chunk->chunk_hdr->length = in sctp_user_addto_chunk()
1525 htons(ntohs(chunk->chunk_hdr->length) + len); in sctp_user_addto_chunk()
1526 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_user_addto_chunk()
1534 void sctp_chunk_assign_ssn(struct sctp_chunk *chunk) in sctp_chunk_assign_ssn() argument
1541 if (chunk->has_ssn) in sctp_chunk_assign_ssn()
1545 sid = ntohs(chunk->subh.data_hdr->stream); in sctp_chunk_assign_ssn()
1546 stream = &chunk->asoc->stream; in sctp_chunk_assign_ssn()
1551 msg = chunk->msg; in sctp_chunk_assign_ssn()
1570 void sctp_chunk_assign_tsn(struct sctp_chunk *chunk) in sctp_chunk_assign_tsn() argument
1572 if (!chunk->has_tsn) { in sctp_chunk_assign_tsn()
1576 chunk->subh.data_hdr->tsn = in sctp_chunk_assign_tsn()
1577 htonl(sctp_association_get_next_tsn(chunk->asoc)); in sctp_chunk_assign_tsn()
1578 chunk->has_tsn = 1; in sctp_chunk_assign_tsn()
1584 struct sctp_chunk *chunk, in sctp_make_temp_asoc() argument
1592 scope = sctp_scope(sctp_source(chunk)); in sctp_make_temp_asoc()
1597 skb = chunk->skb; in sctp_make_temp_asoc()
1698 struct sctp_chunk *chunk, gfp_t gfp, in sctp_unpack_cookie() argument
1704 struct sk_buff *skb = chunk->skb; in sctp_unpack_cookie()
1717 bodysize = ntohs(chunk->chunk_hdr->length) - headersize; in sctp_unpack_cookie()
1724 len = ntohs(chunk->chunk_hdr->length); in sctp_unpack_cookie()
1733 cookie = chunk->subh.cookie_hdr; in sctp_unpack_cookie()
1767 if (ntohl(chunk->sctp_hdr->vtag) != bear_cookie->my_vtag) { in sctp_unpack_cookie()
1772 if (chunk->sctp_hdr->source != bear_cookie->peer_addr.v4.sin_port || in sctp_unpack_cookie()
1773 ntohs(chunk->sctp_hdr->dest) != bear_cookie->my_port) { in sctp_unpack_cookie()
1803 *errp = sctp_make_op_error(asoc, chunk, in sctp_unpack_cookie()
1815 scope = sctp_scope(sctp_source(chunk)); in sctp_unpack_cookie()
1823 retval->peer.port = ntohs(chunk->sctp_hdr->source); in sctp_unpack_cookie()
1836 sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, in sctp_unpack_cookie()
1837 sizeof(chunk->dest), SCTP_ADDR_SRC, in sctp_unpack_cookie()
1880 struct sctp_chunk *chunk, in sctp_process_missing_param() argument
1892 *errp = sctp_make_op_error_space(asoc, chunk, len); in sctp_process_missing_param()
1908 struct sctp_chunk *chunk, in sctp_process_inv_mandatory() argument
1914 *errp = sctp_make_op_error_space(asoc, chunk, 0); in sctp_process_inv_mandatory()
1925 const struct sctp_chunk *chunk, in sctp_process_inv_paramlength() argument
1935 *errp = sctp_make_violation_paramlen(asoc, chunk, param); in sctp_process_inv_paramlength()
1946 struct sctp_chunk *chunk, in sctp_process_hn_param() argument
1959 *errp = sctp_make_op_error(asoc, chunk, SCTP_ERROR_DNS_FAILED, in sctp_process_hn_param()
2067 struct sctp_chunk *chunk, in sctp_process_unk_param() argument
2086 *errp = sctp_make_op_error_limited(asoc, chunk); in sctp_process_unk_param()
2122 struct sctp_chunk *chunk, in sctp_verify_param() argument
2159 sctp_process_hn_param(asoc, param, chunk, err_chunk); in sctp_verify_param()
2180 chunk, err_chunk); in sctp_verify_param()
2196 chunk, err_chunk); in sctp_verify_param()
2221 sctp_process_inv_paramlength(asoc, param.p, chunk, in sctp_verify_param()
2231 retval = sctp_process_unk_param(asoc, param, chunk, err_chunk); in sctp_verify_param()
2241 struct sctp_chunk *chunk, struct sctp_chunk **errp) in sctp_verify_init() argument
2255 return sctp_process_inv_mandatory(asoc, chunk, errp); in sctp_verify_init()
2269 if (param.v != (void *)chunk->chunk_end) in sctp_verify_init()
2270 return sctp_process_inv_paramlength(asoc, param.p, chunk, errp); in sctp_verify_init()
2277 chunk, errp); in sctp_verify_init()
2282 chunk, errp); in sctp_verify_init()
2303 int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, in sctp_process_init() argument
2327 if (sctp_cmp_addr_exact(sctp_source(chunk), peer_addr)) in sctp_process_init()
2336 chunk->sctp_hdr->source, 0); in sctp_process_init()
2337 if (sctp_cmp_addr_exact(sctp_source(chunk), &addr)) in sctp_process_init()
2965 static void sctp_add_asconf_response(struct sctp_chunk *chunk, __be32 crr_id, in sctp_add_asconf_response() argument
2991 sctp_addto_chunk(chunk, sizeof(ack_param), &ack_param); in sctp_add_asconf_response()
2999 sctp_addto_chunk(chunk, err_param_len, &err_param); in sctp_add_asconf_response()
3003 sctp_addto_chunk(chunk, asconf_param_len, asconf_param); in sctp_add_asconf_response()
3150 struct sctp_chunk *chunk, bool addr_param_needed, in sctp_verify_asconf() argument
3157 addip = (struct sctp_addip_chunk *)chunk->chunk_hdr; in sctp_verify_asconf()
3209 if (param.v != chunk->chunk_end) in sctp_verify_asconf()
3824 struct sctp_chunk *chunk, in sctp_verify_reconf() argument
3832 hdr = (struct sctp_reconf_chunk *)chunk->chunk_hdr; in sctp_verify_reconf()