Lines Matching refs:chunk
79 static void *sctp_addto_param(struct sctp_chunk *chunk, int len,
90 static void sctp_control_set_owner_w(struct sctp_chunk *chunk) in sctp_control_set_owner_w() argument
92 struct sctp_association *asoc = chunk->asoc; in sctp_control_set_owner_w()
93 struct sk_buff *skb = chunk->skb; in sctp_control_set_owner_w()
107 int sctp_chunk_iif(const struct sctp_chunk *chunk) in sctp_chunk_iif() argument
112 af = sctp_get_af_specific(ipver2af(ip_hdr(chunk->skb)->version)); in sctp_chunk_iif()
114 iif = af->skb_iif(chunk->skb); in sctp_chunk_iif()
137 void sctp_init_cause(struct sctp_chunk *chunk, __be16 cause_code, in sctp_init_cause() argument
147 chunk->subh.err_hdr = sctp_addto_chunk(chunk, sizeof(sctp_errhdr_t), &err); in sctp_init_cause()
155 static int sctp_init_cause_fixed(struct sctp_chunk *chunk, __be16 cause_code, in sctp_init_cause_fixed() argument
166 if (skb_tailroom(chunk->skb) < len) in sctp_init_cause_fixed()
168 chunk->subh.err_hdr = sctp_addto_chunk_fixed(chunk, in sctp_init_cause_fixed()
383 const struct sctp_chunk *chunk, in sctp_make_init_ack() argument
416 cookie = sctp_pack_cookie(asoc->ep, asoc, chunk, &cookie_len, in sctp_make_init_ack()
481 retval->transport = chunk->transport; in sctp_make_init_ack()
563 const struct sctp_chunk *chunk) in sctp_make_cookie_echo() argument
588 if (chunk) in sctp_make_cookie_echo()
589 retval->transport = chunk->transport; in sctp_make_cookie_echo()
614 const struct sctp_chunk *chunk) in sctp_make_cookie_ack() argument
629 if (retval && chunk) in sctp_make_cookie_ack()
630 retval->transport = chunk->transport; in sctp_make_cookie_ack()
660 const struct sctp_chunk *chunk) in sctp_make_cwr() argument
685 if (chunk) in sctp_make_cwr()
686 retval->transport = chunk->transport; in sctp_make_cwr()
854 const struct sctp_chunk *chunk) in sctp_make_shutdown() argument
871 if (chunk) in sctp_make_shutdown()
872 retval->transport = chunk->transport; in sctp_make_shutdown()
878 const struct sctp_chunk *chunk) in sctp_make_shutdown_ack() argument
893 if (retval && chunk) in sctp_make_shutdown_ack()
894 retval->transport = chunk->transport; in sctp_make_shutdown_ack()
901 const struct sctp_chunk *chunk) in sctp_make_shutdown_complete() argument
923 if (retval && chunk) in sctp_make_shutdown_complete()
924 retval->transport = chunk->transport; in sctp_make_shutdown_complete()
933 const struct sctp_chunk *chunk, in sctp_make_abort() argument
943 if (chunk && chunk->chunk_hdr && in sctp_make_abort()
944 chunk->chunk_hdr->type == SCTP_CID_INIT) in sctp_make_abort()
961 if (retval && chunk) in sctp_make_abort()
962 retval->transport = chunk->transport; in sctp_make_abort()
970 const struct sctp_chunk *chunk, __u32 tsn) in sctp_make_abort_no_data() argument
975 retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t) in sctp_make_abort_no_data()
995 if (chunk) in sctp_make_abort_no_data()
996 retval->transport = chunk->transport; in sctp_make_abort_no_data()
1046 static void *sctp_addto_param(struct sctp_chunk *chunk, int len, in sctp_addto_param() argument
1050 int chunklen = ntohs(chunk->chunk_hdr->length); in sctp_addto_param()
1052 target = skb_put(chunk->skb, len); in sctp_addto_param()
1060 chunk->chunk_hdr->length = htons(chunklen + len); in sctp_addto_param()
1061 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_addto_param()
1069 const struct sctp_chunk *chunk, in sctp_make_abort_violation() argument
1076 retval = sctp_make_abort(asoc, chunk, sizeof(sctp_errhdr_t) + paylen in sctp_make_abort_violation()
1084 phdr.type = htons(chunk->chunk_hdr->type); in sctp_make_abort_violation()
1085 phdr.length = chunk->chunk_hdr->length; in sctp_make_abort_violation()
1095 const struct sctp_chunk *chunk, in sctp_make_violation_paramlen() argument
1103 retval = sctp_make_abort(asoc, chunk, payload_len); in sctp_make_violation_paramlen()
1118 const struct sctp_chunk *chunk) in sctp_make_violation_max_retrans() argument
1124 retval = sctp_make_abort(asoc, chunk, payload_len); in sctp_make_violation_max_retrans()
1165 const struct sctp_chunk *chunk, in sctp_make_heartbeat_ack() argument
1185 if (chunk) in sctp_make_heartbeat_ack()
1186 retval->transport = chunk->transport; in sctp_make_heartbeat_ack()
1197 const struct sctp_chunk *chunk, in sctp_make_op_error_space() argument
1215 if (chunk) in sctp_make_op_error_space()
1216 retval->transport = chunk->transport; in sctp_make_op_error_space()
1230 const struct sctp_chunk *chunk) in sctp_make_op_error_fixed() argument
1237 return sctp_make_op_error_space(asoc, chunk, size); in sctp_make_op_error_fixed()
1242 const struct sctp_chunk *chunk, in sctp_make_op_error() argument
1248 retval = sctp_make_op_error_space(asoc, chunk, paylen + reserve_tail); in sctp_make_op_error()
1333 SCTP_DBG_OBJCNT_INC(chunk); in sctp_chunkify()
1341 void sctp_init_addrs(struct sctp_chunk *chunk, union sctp_addr *src, in sctp_init_addrs() argument
1344 memcpy(&chunk->source, src, sizeof(union sctp_addr)); in sctp_init_addrs()
1345 memcpy(&chunk->dest, dest, sizeof(union sctp_addr)); in sctp_init_addrs()
1349 const union sctp_addr *sctp_source(const struct sctp_chunk *chunk) in sctp_source() argument
1352 if (chunk->transport) { in sctp_source()
1353 return &chunk->transport->ipaddr; in sctp_source()
1356 return &chunk->source; in sctp_source()
1411 struct sctp_chunk *chunk = _sctp_make_chunk(asoc, type, flags, paylen); in sctp_make_control() local
1413 if (chunk) in sctp_make_control()
1414 sctp_control_set_owner_w(chunk); in sctp_make_control()
1416 return chunk; in sctp_make_control()
1420 static void sctp_chunk_destroy(struct sctp_chunk *chunk) in sctp_chunk_destroy() argument
1422 BUG_ON(!list_empty(&chunk->list)); in sctp_chunk_destroy()
1423 list_del_init(&chunk->transmitted_list); in sctp_chunk_destroy()
1425 consume_skb(chunk->skb); in sctp_chunk_destroy()
1426 consume_skb(chunk->auth_chunk); in sctp_chunk_destroy()
1428 SCTP_DBG_OBJCNT_DEC(chunk); in sctp_chunk_destroy()
1429 kmem_cache_free(sctp_chunk_cachep, chunk); in sctp_chunk_destroy()
1433 void sctp_chunk_free(struct sctp_chunk *chunk) in sctp_chunk_free() argument
1436 if (chunk->msg) in sctp_chunk_free()
1437 sctp_datamsg_put(chunk->msg); in sctp_chunk_free()
1439 sctp_chunk_put(chunk); in sctp_chunk_free()
1458 void *sctp_addto_chunk(struct sctp_chunk *chunk, int len, const void *data) in sctp_addto_chunk() argument
1462 int chunklen = ntohs(chunk->chunk_hdr->length); in sctp_addto_chunk()
1465 padding = skb_put(chunk->skb, padlen); in sctp_addto_chunk()
1466 target = skb_put(chunk->skb, len); in sctp_addto_chunk()
1472 chunk->chunk_hdr->length = htons(chunklen + padlen + len); in sctp_addto_chunk()
1473 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_addto_chunk()
1481 static void *sctp_addto_chunk_fixed(struct sctp_chunk *chunk, in sctp_addto_chunk_fixed() argument
1484 if (skb_tailroom(chunk->skb) >= len) in sctp_addto_chunk_fixed()
1485 return sctp_addto_chunk(chunk, len, data); in sctp_addto_chunk_fixed()
1494 int sctp_user_addto_chunk(struct sctp_chunk *chunk, int len, in sctp_user_addto_chunk() argument
1501 target = skb_put(chunk->skb, len); in sctp_user_addto_chunk()
1509 chunk->chunk_hdr->length = in sctp_user_addto_chunk()
1510 htons(ntohs(chunk->chunk_hdr->length) + len); in sctp_user_addto_chunk()
1511 chunk->chunk_end = skb_tail_pointer(chunk->skb); in sctp_user_addto_chunk()
1519 void sctp_chunk_assign_ssn(struct sctp_chunk *chunk) in sctp_chunk_assign_ssn() argument
1527 if (chunk->has_ssn) in sctp_chunk_assign_ssn()
1531 sid = ntohs(chunk->subh.data_hdr->stream); in sctp_chunk_assign_ssn()
1532 stream = &chunk->asoc->ssnmap->out; in sctp_chunk_assign_ssn()
1537 msg = chunk->msg; in sctp_chunk_assign_ssn()
1556 void sctp_chunk_assign_tsn(struct sctp_chunk *chunk) in sctp_chunk_assign_tsn() argument
1558 if (!chunk->has_tsn) { in sctp_chunk_assign_tsn()
1562 chunk->subh.data_hdr->tsn = in sctp_chunk_assign_tsn()
1563 htonl(sctp_association_get_next_tsn(chunk->asoc)); in sctp_chunk_assign_tsn()
1564 chunk->has_tsn = 1; in sctp_chunk_assign_tsn()
1570 struct sctp_chunk *chunk, in sctp_make_temp_asoc() argument
1579 scope = sctp_scope(sctp_source(chunk)); in sctp_make_temp_asoc()
1584 skb = chunk->skb; in sctp_make_temp_asoc()
1692 struct sctp_chunk *chunk, gfp_t gfp, in sctp_unpack_cookie() argument
1703 struct sk_buff *skb = chunk->skb; in sctp_unpack_cookie()
1713 bodysize = ntohs(chunk->chunk_hdr->length) - headersize; in sctp_unpack_cookie()
1720 len = ntohs(chunk->chunk_hdr->length); in sctp_unpack_cookie()
1729 cookie = chunk->subh.cookie_hdr; in sctp_unpack_cookie()
1761 if (ntohl(chunk->sctp_hdr->vtag) != bear_cookie->my_vtag) { in sctp_unpack_cookie()
1766 if (chunk->sctp_hdr->source != bear_cookie->peer_addr.v4.sin_port || in sctp_unpack_cookie()
1767 ntohs(chunk->sctp_hdr->dest) != bear_cookie->my_port) { in sctp_unpack_cookie()
1794 len = ntohs(chunk->chunk_hdr->length); in sctp_unpack_cookie()
1795 *errp = sctp_make_op_error_space(asoc, chunk, len); in sctp_unpack_cookie()
1811 scope = sctp_scope(sctp_source(chunk)); in sctp_unpack_cookie()
1819 retval->peer.port = ntohs(chunk->sctp_hdr->source); in sctp_unpack_cookie()
1832 sctp_add_bind_addr(&retval->base.bind_addr, &chunk->dest, in sctp_unpack_cookie()
1874 struct sctp_chunk *chunk, in sctp_process_missing_param() argument
1886 *errp = sctp_make_op_error_space(asoc, chunk, len); in sctp_process_missing_param()
1902 struct sctp_chunk *chunk, in sctp_process_inv_mandatory() argument
1908 *errp = sctp_make_op_error_space(asoc, chunk, 0); in sctp_process_inv_mandatory()
1919 const struct sctp_chunk *chunk, in sctp_process_inv_paramlength() argument
1929 *errp = sctp_make_violation_paramlen(asoc, chunk, param); in sctp_process_inv_paramlength()
1940 struct sctp_chunk *chunk, in sctp_process_hn_param() argument
1953 *errp = sctp_make_op_error_space(asoc, chunk, len); in sctp_process_hn_param()
2055 struct sctp_chunk *chunk, in sctp_process_unk_param() argument
2074 *errp = sctp_make_op_error_fixed(asoc, chunk); in sctp_process_unk_param()
2110 struct sctp_chunk *chunk, in sctp_verify_param() argument
2147 sctp_process_hn_param(asoc, param, chunk, err_chunk); in sctp_verify_param()
2168 chunk, err_chunk); in sctp_verify_param()
2184 chunk, err_chunk); in sctp_verify_param()
2208 sctp_process_inv_paramlength(asoc, param.p, chunk, in sctp_verify_param()
2218 retval = sctp_process_unk_param(asoc, param, chunk, err_chunk); in sctp_verify_param()
2227 sctp_init_chunk_t *peer_init, struct sctp_chunk *chunk, in sctp_verify_init() argument
2242 return sctp_process_inv_mandatory(asoc, chunk, errp); in sctp_verify_init()
2256 if (param.v != (void *)chunk->chunk_end) in sctp_verify_init()
2257 return sctp_process_inv_paramlength(asoc, param.p, chunk, errp); in sctp_verify_init()
2264 chunk, errp); in sctp_verify_init()
2269 chunk, errp); in sctp_verify_init()
2290 int sctp_process_init(struct sctp_association *asoc, struct sctp_chunk *chunk, in sctp_process_init() argument
2316 if (sctp_cmp_addr_exact(sctp_source(chunk), peer_addr)) in sctp_process_init()
2325 chunk->sctp_hdr->source, 0); in sctp_process_init()
2326 if (sctp_cmp_addr_exact(sctp_source(chunk), &addr)) in sctp_process_init()
2956 static void sctp_add_asconf_response(struct sctp_chunk *chunk, __be32 crr_id, in sctp_add_asconf_response() argument
2981 sctp_addto_chunk(chunk, sizeof(ack_param), &ack_param); in sctp_add_asconf_response()
2989 sctp_addto_chunk(chunk, err_param_len, &err_param); in sctp_add_asconf_response()
2993 sctp_addto_chunk(chunk, asconf_param_len, asconf_param); in sctp_add_asconf_response()
3118 struct sctp_chunk *chunk, bool addr_param_needed, in sctp_verify_asconf() argument
3121 sctp_addip_chunk_t *addip = (sctp_addip_chunk_t *) chunk->chunk_hdr; in sctp_verify_asconf()
3169 if (param.v != chunk->chunk_end) in sctp_verify_asconf()