Lines Matching refs:packet

60 static sctp_xmit_t __sctp_packet_append_chunk(struct sctp_packet *packet,
62 static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet,
64 static void sctp_packet_append_data(struct sctp_packet *packet,
66 static sctp_xmit_t sctp_packet_will_fit(struct sctp_packet *packet,
70 static void sctp_packet_reset(struct sctp_packet *packet) in sctp_packet_reset() argument
72 packet->size = packet->overhead; in sctp_packet_reset()
73 packet->has_cookie_echo = 0; in sctp_packet_reset()
74 packet->has_sack = 0; in sctp_packet_reset()
75 packet->has_data = 0; in sctp_packet_reset()
76 packet->has_auth = 0; in sctp_packet_reset()
77 packet->ipfragok = 0; in sctp_packet_reset()
78 packet->auth = NULL; in sctp_packet_reset()
84 struct sctp_packet *sctp_packet_config(struct sctp_packet *packet, in sctp_packet_config() argument
89 pr_debug("%s: packet:%p vtag:0x%x\n", __func__, packet, vtag); in sctp_packet_config()
91 packet->vtag = vtag; in sctp_packet_config()
93 if (ecn_capable && sctp_packet_empty(packet)) { in sctp_packet_config()
94 chunk = sctp_get_ecne_prepend(packet->transport->asoc); in sctp_packet_config()
100 sctp_packet_append_chunk(packet, chunk); in sctp_packet_config()
103 return packet; in sctp_packet_config()
107 struct sctp_packet *sctp_packet_init(struct sctp_packet *packet, in sctp_packet_init() argument
114 pr_debug("%s: packet:%p transport:%p\n", __func__, packet, transport); in sctp_packet_init()
116 packet->transport = transport; in sctp_packet_init()
117 packet->source_port = sport; in sctp_packet_init()
118 packet->destination_port = dport; in sctp_packet_init()
119 INIT_LIST_HEAD(&packet->chunk_list); in sctp_packet_init()
127 packet->overhead = overhead; in sctp_packet_init()
128 sctp_packet_reset(packet); in sctp_packet_init()
129 packet->vtag = 0; in sctp_packet_init()
131 return packet; in sctp_packet_init()
135 void sctp_packet_free(struct sctp_packet *packet) in sctp_packet_free() argument
139 pr_debug("%s: packet:%p\n", __func__, packet); in sctp_packet_free()
141 list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) { in sctp_packet_free()
154 sctp_xmit_t sctp_packet_transmit_chunk(struct sctp_packet *packet, in sctp_packet_transmit_chunk() argument
161 pr_debug("%s: packet:%p chunk:%p\n", __func__, packet, chunk); in sctp_packet_transmit_chunk()
163 switch ((retval = (sctp_packet_append_chunk(packet, chunk)))) { in sctp_packet_transmit_chunk()
165 if (!packet->has_cookie_echo) { in sctp_packet_transmit_chunk()
166 error = sctp_packet_transmit(packet); in sctp_packet_transmit_chunk()
174 retval = sctp_packet_append_chunk(packet, in sctp_packet_transmit_chunk()
270 static sctp_xmit_t __sctp_packet_append_chunk(struct sctp_packet *packet, in __sctp_packet_append_chunk() argument
277 retval = sctp_packet_will_fit(packet, chunk, chunk_len); in __sctp_packet_append_chunk()
285 sctp_packet_append_data(packet, chunk); in __sctp_packet_append_chunk()
287 packet->has_sack = 1; in __sctp_packet_append_chunk()
289 packet->has_auth = 1; in __sctp_packet_append_chunk()
291 packet->has_data = 1; in __sctp_packet_append_chunk()
296 packet->has_cookie_echo = 1; in __sctp_packet_append_chunk()
300 packet->has_sack = 1; in __sctp_packet_append_chunk()
306 packet->has_auth = 1; in __sctp_packet_append_chunk()
307 packet->auth = chunk; in __sctp_packet_append_chunk()
312 list_add_tail(&chunk->list, &packet->chunk_list); in __sctp_packet_append_chunk()
313 packet->size += chunk_len; in __sctp_packet_append_chunk()
314 chunk->transport = packet->transport; in __sctp_packet_append_chunk()
322 sctp_xmit_t sctp_packet_append_chunk(struct sctp_packet *packet, in sctp_packet_append_chunk() argument
327 pr_debug("%s: packet:%p chunk:%p\n", __func__, packet, chunk); in sctp_packet_append_chunk()
334 retval = sctp_packet_can_append_data(packet, chunk); in sctp_packet_append_chunk()
340 retval = sctp_packet_bundle_auth(packet, chunk); in sctp_packet_append_chunk()
345 retval = sctp_packet_bundle_sack(packet, chunk); in sctp_packet_append_chunk()
349 retval = __sctp_packet_append_chunk(packet, chunk); in sctp_packet_append_chunk()
379 int sctp_packet_transmit(struct sctp_packet *packet) in sctp_packet_transmit() argument
381 struct sctp_transport *tp = packet->transport; in sctp_packet_transmit()
393 pr_debug("%s: packet:%p\n", __func__, packet); in sctp_packet_transmit()
396 if (list_empty(&packet->chunk_list)) in sctp_packet_transmit()
400 chunk = list_entry(packet->chunk_list.next, struct sctp_chunk, list); in sctp_packet_transmit()
404 nskb = alloc_skb(packet->size + MAX_HEADER, GFP_ATOMIC); in sctp_packet_transmit()
409 skb_reserve(nskb, packet->overhead + MAX_HEADER); in sctp_packet_transmit()
430 sh->source = htons(packet->source_port); in sctp_packet_transmit()
431 sh->dest = htons(packet->destination_port); in sctp_packet_transmit()
441 sh->vtag = htonl(packet->vtag); in sctp_packet_transmit()
466 list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) { in sctp_packet_transmit()
492 if (chunk == packet->auth) in sctp_packet_transmit()
538 (dst_xfrm(dst) != NULL) || packet->ipfragok) { in sctp_packet_transmit()
594 nskb->ignore_df = packet->ipfragok; in sctp_packet_transmit()
598 sctp_packet_reset(packet); in sctp_packet_transmit()
619 list_for_each_entry_safe(chunk, tmp, &packet->chunk_list, list) { in sctp_packet_transmit()
635 static sctp_xmit_t sctp_packet_can_append_data(struct sctp_packet *packet, in sctp_packet_can_append_data() argument
639 struct sctp_transport *transport = packet->transport; in sctp_packet_can_append_data()
694 if (!sctp_packet_empty(packet)) in sctp_packet_can_append_data()
708 if (chunk->skb->len + q->out_qlen >= transport->pathmtu - packet->overhead) in sctp_packet_can_append_data()
721 static void sctp_packet_append_data(struct sctp_packet *packet, in sctp_packet_append_data() argument
724 struct sctp_transport *transport = packet->transport; in sctp_packet_append_data()
749 static sctp_xmit_t sctp_packet_will_fit(struct sctp_packet *packet, in sctp_packet_will_fit() argument
758 psize = packet->size; in sctp_packet_will_fit()
759 pmtu = ((packet->transport->asoc) ? in sctp_packet_will_fit()
760 (packet->transport->asoc->pathmtu) : in sctp_packet_will_fit()
761 (packet->transport->pathmtu)); in sctp_packet_will_fit()
775 if (sctp_packet_empty(packet) || !sctp_chunk_is_data(chunk) || in sctp_packet_will_fit()
776 (!packet->has_data && chunk->auth)) { in sctp_packet_will_fit()
781 packet->ipfragok = 1; in sctp_packet_will_fit()