Changeset e73dbc1 in mainline
- Timestamp:
- 2017-08-31T23:23:55Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1ddbf81
- Parents:
- 94c5bc1
- Location:
- uspace/srv/net/tcp
- Files:
-
- 3 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tcp/Makefile
r94c5bc1 re73dbc1 37 37 BINARY = tcp 38 38 39 SOURCES = \39 SOURCES_COMMON = \ 40 40 conn.c \ 41 41 iqueue.c \ … … 44 44 rqueue.c \ 45 45 segment.c \ 46 service.c \47 46 seq_no.c \ 48 tcp.c \49 47 test.c \ 50 48 tqueue.c \ 51 49 ucall.c 52 50 51 SOURCES = \ 52 $(SOURCES_COMMON) \ 53 service.c \ 54 tcp.c 55 53 56 TEST_SOURCES = \ 54 pdu.c \ 55 segment.c \ 56 seq_no.c \ 57 $(SOURCES_COMMON) \ 57 58 test/main.c \ 58 test/pdu.c 59 test/pdu.c \ 60 test/segment.c \ 61 test/seq_no.c 59 62 60 63 include $(USPACE_PREFIX)/Makefile.common -
uspace/srv/net/tcp/seq_no.c
r94c5bc1 re73dbc1 134 134 } 135 135 136 /** Determine whether segment is fully acked */ 136 /** Determine whether segment is fully acked. 137 * 138 * @param conn Connection 139 * @param seg Segment 140 * @param ack Last received ACK (i.e. SND.UNA) 141 * 142 * @return @c true if segment is fully acked, @c false otherwise 143 */ 137 144 bool seq_no_segment_acked(tcp_conn_t *conn, tcp_segment_t *seg, uint32_t ack) 138 145 { … … 141 148 } 142 149 143 /** Determine whether initial SYN is acked */ 150 /** Determine whether initial SYN is acked. 151 * 152 * @param conn Connection 153 * @return @c true if initial SYN is acked, @c false otherwise 154 */ 144 155 bool seq_no_syn_acked(tcp_conn_t *conn) 145 156 { … … 147 158 } 148 159 149 /** Determine whether segment overlaps the receive window */ 160 /** Determine whether segment overlaps the receive window. 161 * 162 * @param conn Connection 163 * @param seg Segment 164 * @return @c true if segment overlaps the receive window, @c false otherwise 165 */ 150 166 bool seq_no_segment_acceptable(tcp_conn_t *conn, tcp_segment_t *seg) 151 167 { 152 168 bool b_in, e_in; 153 169 bool wb_in, we_in; 170 171 /* Beginning of segment is inside window */ 154 172 b_in = seq_no_le_lt(conn->rcv_nxt, seg->seq, conn->rcv_nxt 155 173 + conn->rcv_wnd); 156 174 175 /* End of segment is inside window */ 157 176 e_in = seq_no_le_lt(conn->rcv_nxt, seg->seq + seg->len - 1, 158 177 conn->rcv_nxt + conn->rcv_wnd); 178 179 /* Beginning of window is inside segment */ 180 wb_in = seq_no_le_lt(seg->seq, conn->rcv_nxt, 181 seg->seq + seg->len); 182 183 /* End of window is inside segment */ 184 we_in = seq_no_le_lt(seg->seq, conn->rcv_nxt + conn->rcv_wnd - 1, 185 seg->seq + seg->len); 159 186 160 187 if (seg->len == 0 && conn->rcv_wnd == 0) { … … 165 192 return false; 166 193 } else { 167 return b_in || e_in; 168 } 169 } 170 171 /** Determine size that control bits occupy in sequence space. */ 194 return b_in || e_in || wb_in || we_in; 195 } 196 } 197 198 /** Determine size that control bits occupy in sequence space. 199 * 200 * @param ctrl Control bits combination 201 * @return Number of sequence space units occupied 202 */ 172 203 uint32_t seq_no_control_len(tcp_control_t ctrl) 173 204 { … … 183 214 } 184 215 185 /** Calculate the amount of trim needed to fit segment in receive window. */ 216 /** Calculate the amount of trim needed to fit segment in receive window. 217 * 218 * @param conn Connection 219 * @param seg Segment 220 * @param left Place to store number of units to trim at the beginning 221 * @param right Place to store number of units to trim at the end 222 */ 186 223 void seq_no_seg_trim_calc(tcp_conn_t *conn, tcp_segment_t *seg, 187 224 uint32_t *left, uint32_t *right) -
uspace/srv/net/tcp/test/main.c
r94c5bc1 re73dbc1 27 27 */ 28 28 29 #include <mem.h> 29 30 #include <pcut/pcut.h> 31 32 #include "main.h" 33 #include "../segment.h" 34 #include "../tcp_type.h" 35 36 /** Verify that two segments have the same content */ 37 void test_seg_same(tcp_segment_t *a, tcp_segment_t *b) 38 { 39 PCUT_ASSERT_INT_EQUALS(a->ctrl, b->ctrl); 40 PCUT_ASSERT_INT_EQUALS(a->seq, b->seq); 41 PCUT_ASSERT_INT_EQUALS(a->ack, b->ack); 42 PCUT_ASSERT_INT_EQUALS(a->len, b->len); 43 PCUT_ASSERT_INT_EQUALS(a->wnd, b->wnd); 44 PCUT_ASSERT_INT_EQUALS(a->up, b->up); 45 PCUT_ASSERT_INT_EQUALS(tcp_segment_text_size(a), 46 tcp_segment_text_size(b)); 47 if (tcp_segment_text_size(a) != 0) 48 PCUT_ASSERT_NOT_NULL(a->data); 49 if (tcp_segment_text_size(b) != 0) 50 PCUT_ASSERT_NOT_NULL(b->data); 51 if (tcp_segment_text_size(a) != 0) { 52 PCUT_ASSERT_INT_EQUALS(0, memcmp(a->data, b->data, 53 tcp_segment_text_size(a))); 54 } 55 } 30 56 31 57 PCUT_INIT 32 58 33 59 PCUT_IMPORT(pdu); 60 PCUT_IMPORT(segment); 61 PCUT_IMPORT(seq_no); 34 62 35 63 PCUT_MAIN() -
uspace/srv/net/tcp/test/pdu.c
r94c5bc1 re73dbc1 29 29 #include <errno.h> 30 30 #include <inet/endpoint.h> 31 #include <mem.h> 31 32 #include <pcut/pcut.h> 32 #include <str.h>33 33 #include <stdlib.h> 34 34 35 #include "main.h" 35 36 #include "../pdu.h" 36 37 #include "../segment.h" 37 38 /** Verify that two segments have the same content */39 static void pdu_seg_cmp(tcp_segment_t *a, tcp_segment_t *b)40 {41 PCUT_ASSERT_INT_EQUALS(a->ctrl, b->ctrl);42 PCUT_ASSERT_INT_EQUALS(a->seq, b->seq);43 PCUT_ASSERT_INT_EQUALS(a->ack, b->ack);44 PCUT_ASSERT_INT_EQUALS(a->len, b->len);45 PCUT_ASSERT_INT_EQUALS(a->wnd, b->wnd);46 PCUT_ASSERT_INT_EQUALS(a->up, b->up);47 PCUT_ASSERT_INT_EQUALS(tcp_segment_text_size(a),48 tcp_segment_text_size(b));49 if (tcp_segment_text_size(a) != 0)50 PCUT_ASSERT_NOT_NULL(a->data);51 if (tcp_segment_text_size(b) != 0)52 PCUT_ASSERT_NOT_NULL(b->data);53 if (tcp_segment_text_size(a) != 0) {54 PCUT_ASSERT_INT_EQUALS(0, memcmp(a->data, b->data,55 tcp_segment_text_size(a)));56 }57 }58 38 59 39 PCUT_INIT … … 86 66 PCUT_ASSERT_INT_EQUALS(EOK, rc); 87 67 88 pdu_seg_cmp(seg, dseg);68 test_seg_same(seg, dseg); 89 69 tcp_segment_delete(seg); 90 70 } … … 124 104 PCUT_ASSERT_INT_EQUALS(EOK, rc); 125 105 126 pdu_seg_cmp(seg, dseg);106 test_seg_same(seg, dseg); 127 107 tcp_segment_delete(seg); 128 108 free(data);
Note:
See TracChangeset
for help on using the changeset viewer.