Changeset 3819ce5 in mainline for uspace/srv
- Timestamp:
- 2011-12-25T10:05:28Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ecf823a
- Parents:
- 1440eae (diff), 7e1b130 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/srv/net/tl/tcp
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tl/tcp/conn.c
r1440eae r3819ce5 491 491 conn->snd_una, seg->ack, conn->snd_nxt); 492 492 if (!seq_no_ack_acceptable(conn, seg->ack)) { 493 log_msg(LVL_WARN, "ACK not acceptable, send RST."); 494 tcp_reply_rst(&conn->ident, seg); 493 if ((seg->ctrl & CTL_RST) == 0) { 494 log_msg(LVL_WARN, "ACK not acceptable, send RST"); 495 tcp_reply_rst(&conn->ident, seg); 496 } else { 497 log_msg(LVL_WARN, "RST,ACK not acceptable, drop"); 498 } 495 499 return; 496 500 } … … 498 502 499 503 if ((seg->ctrl & CTL_RST) != 0) { 500 log_msg(LVL_DEBUG, "%s: Connection reset. -> Closed", 501 conn->name); 502 /* Reset connection */ 503 tcp_conn_reset(conn); 504 /* XXX delete connection */ 505 return; 504 /* If we get here, we have either an acceptable ACK or no ACK */ 505 if ((seg->ctrl & CTL_ACK) != 0) { 506 log_msg(LVL_DEBUG, "%s: Connection reset. -> Closed", 507 conn->name); 508 /* Reset connection */ 509 tcp_conn_reset(conn); 510 return; 511 } else { 512 log_msg(LVL_DEBUG, "%s: RST without ACK, drop", 513 conn->name); 514 return; 515 } 506 516 } 507 517 -
uspace/srv/net/tl/tcp/segment.c
r1440eae r3819ce5 119 119 return NULL; 120 120 121 rseg->ctrl = CTL_RST; 122 rseg->seq = seg->ack; 121 if ((seg->ctrl & CTL_ACK) == 0) { 122 rseg->ctrl = CTL_RST | CTL_ACK; 123 rseg->seq = 0; 124 rseg->ack = seg->seq + seg->len; 125 } else { 126 rseg->ctrl = CTL_RST; 127 rseg->seq = seg->ack; 128 } 123 129 124 130 return rseg; -
uspace/srv/net/tl/tcp/tcp.c
r1440eae r3819ce5 36 36 37 37 #include <async.h> 38 #include <bitops.h> 38 39 #include <byteorder.h> 39 40 #include <errno.h> … … 191 192 tcp_pdu_t *pdu; 192 193 size_t hdr_size; 193 194 /* XXX Header options */ 195 hdr_size = sizeof(tcp_header_t); 194 tcp_header_t *hdr; 195 uint32_t data_offset; 196 197 if (pdu_raw_size < sizeof(tcp_header_t)) { 198 log_msg(LVL_WARN, "pdu_raw_size = %zu < sizeof(tcp_header_t) = %zu", 199 pdu_raw_size, sizeof(tcp_header_t)); 200 pq_release_remote(net_sess, packet_get_id(packet)); 201 return EINVAL; 202 } 203 204 hdr = (tcp_header_t *)pdu_raw; 205 data_offset = BIT_RANGE_EXTRACT(uint32_t, DF_DATA_OFFSET_h, DF_DATA_OFFSET_l, 206 uint16_t_be2host(hdr->doff_flags)); 207 208 hdr_size = sizeof(uint32_t) * data_offset; 196 209 197 210 if (pdu_raw_size < hdr_size) { 198 211 log_msg(LVL_WARN, "pdu_raw_size = %zu < hdr_size = %zu", 199 212 pdu_raw_size, hdr_size); 213 pq_release_remote(net_sess, packet_get_id(packet)); 214 return EINVAL; 215 } 216 217 if (hdr_size < sizeof(tcp_header_t)) { 218 log_msg(LVL_WARN, "hdr_size = %zu < sizeof(tcp_header_t) = %zu", 219 hdr_size, sizeof(tcp_header_t)); 200 220 pq_release_remote(net_sess, packet_get_id(packet)); 201 221 return EINVAL;
Note:
See TracChangeset
for help on using the changeset viewer.
