Changeset a2e3ee6 in mainline for uspace/srv/net/tcp
- Timestamp:
- 2013-06-20T16:45:58Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 08bb73b
- Parents:
- 19a4f73
- Location:
- uspace/srv/net/tcp
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tcp/conn.c
r19a4f73 ra2e3ee6 312 312 static bool tcp_socket_match(tcp_sock_t *sock, tcp_sock_t *patt) 313 313 { 314 log_msg(LOG_DEFAULT, LVL_DEBUG2, "tcp_socket_match(sock=(%x,%u), pat=(%x,%u))", 315 sock->addr.ipv4, sock->port, patt->addr.ipv4, patt->port); 316 317 if (patt->addr.ipv4 != TCP_IPV4_ANY && 318 patt->addr.ipv4 != sock->addr.ipv4) 314 if ((!inet_addr_is_any(&patt->addr)) && 315 (!inet_addr_compare(&patt->addr, &sock->addr))) 319 316 return false; 320 317 321 if ( patt->port != TCP_PORT_ANY&&322 patt->port != sock->port)318 if ((patt->port != TCP_PORT_ANY) && 319 (patt->port != sock->port)) 323 320 return false; 324 321 … … 354 351 { 355 352 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_find_ref(%p)", sp); 356 357 log_msg(LOG_DEFAULT, LVL_DEBUG2, "compare conn (f:(%x,%u), l:(%x,%u))",358 sp->foreign.addr.ipv4, sp->foreign.port,359 sp->local.addr.ipv4, sp->local.port);360 353 361 354 fibril_mutex_lock(&conn_list_lock); … … 364 357 tcp_conn_t *conn = list_get_instance(link, tcp_conn_t, link); 365 358 tcp_sockpair_t *csp = &conn->ident; 366 367 log_msg(LOG_DEFAULT, LVL_DEBUG2, " - with (f:(%x,%u), l:(%x,%u))",368 csp->foreign.addr.ipv4, csp->foreign.port,369 csp->local.addr.ipv4, csp->local.port);370 359 371 360 if (tcp_sockpair_match(sp, csp)) { -
uspace/srv/net/tcp/pdu.c
r19a4f73 ra2e3ee6 146 146 static void tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr) 147 147 { 148 phdr->src_addr = host2uint32_t_be(pdu->src_addr.ipv4); 149 phdr->dest_addr = host2uint32_t_be(pdu->dest_addr.ipv4); 148 // FIXME: Check for correctness 149 150 uint32_t src_addr; 151 inet_addr_pack(&pdu->src_addr, &src_addr); 152 153 uint32_t dest_addr; 154 inet_addr_pack(&pdu->dest_addr, &dest_addr); 155 156 phdr->src_addr = host2uint32_t_be(src_addr); 157 phdr->dest_addr = host2uint32_t_be(dest_addr); 150 158 phdr->zero = 0; 151 159 phdr->protocol = 6; /* XXX Magic number */ -
uspace/srv/net/tcp/sock.c
r19a4f73 ra2e3ee6 179 179 } 180 180 181 sock->laddr.ipv4 = TCP_IPV4_ANY;181 inet_addr_any(&sock->laddr); 182 182 sock->lconn = NULL; 183 183 sock->backlog = 0; … … 314 314 log_msg(LOG_DEFAULT, LVL_DEBUG, " - open connections"); 315 315 316 lsocket.addr.ipv4 = TCP_IPV4_ANY;316 inet_addr_any(&lsocket.addr); 317 317 lsocket.port = sock_core->port; 318 fsocket.addr.ipv4 = TCP_IPV4_ANY; 318 319 inet_addr_any(&fsocket.addr); 319 320 fsocket.port = TCP_PORT_ANY; 320 321 … … 396 397 fibril_mutex_lock(&socket->lock); 397 398 398 if ( socket->laddr.ipv4 == TCP_IPV4_ANY) {399 if (inet_addr_is_any(&socket->laddr)) { 399 400 /* Determine local IP address */ 400 inet_addr_t loc_addr, rem_addr; 401 402 rem_addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 401 inet_addr_t loc_addr; 402 inet_addr_t rem_addr; 403 404 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr), 405 &rem_addr); 403 406 rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr); 404 407 if (rc != EOK) { … … 409 412 return; 410 413 } 411 412 socket->laddr.ipv4 = loc_addr.ipv4; 413 log_msg(LOG_DEFAULT, LVL_DEBUG, "Local IP address is %x", socket->laddr.ipv4); 414 } 415 416 lsocket.addr.ipv4 = socket->laddr.ipv4; 414 415 socket->laddr = loc_addr; 416 } 417 418 lsocket.addr = socket->laddr; 417 419 lsocket.port = sock_core->port; 418 fsocket.addr.ipv4 = uint32_t_be2host(addr->sin_addr.s_addr); 420 421 inet_addr_unpack(uint32_t_be2host(addr->sin_addr.s_addr), 422 &fsocket.addr); 419 423 fsocket.port = uint16_t_be2host(addr->sin_port); 420 424 … … 507 511 /* Replenish listening connection */ 508 512 509 lsocket.addr.ipv4 = TCP_IPV4_ANY;513 inet_addr_any(&lsocket.addr); 510 514 lsocket.port = sock_core->port; 511 fsocket.addr.ipv4 = TCP_IPV4_ANY; 515 516 inet_addr_any(&fsocket.addr); 512 517 fsocket.port = TCP_PORT_ANY; 513 518 … … 728 733 729 734 if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) { 730 /* Fill addr */735 /* Fill address */ 731 736 rsock = &socket->conn->ident.foreign; 737 738 uint32_t rsock_addr; 739 int rc = inet_addr_pack(&rsock->addr, &rsock_addr); 740 if (rc != EOK) { 741 fibril_mutex_unlock(&socket->recv_buffer_lock); 742 fibril_mutex_unlock(&socket->lock); 743 async_answer_0(callid, rc); 744 return; 745 } 746 732 747 addr.sin_family = AF_INET; 733 addr.sin_addr.s_addr = host2uint32_t_be(rsock ->addr.ipv4);748 addr.sin_addr.s_addr = host2uint32_t_be(rsock_addr); 734 749 addr.sin_port = host2uint16_t_be(rsock->port); 735 750 -
uspace/srv/net/tcp/tcp.c
r19a4f73 ra2e3ee6 115 115 } 116 116 117 pdu->src_addr.ipv4 = dgram->src.ipv4; 118 pdu->dest_addr.ipv4 = dgram->dest.ipv4; 119 log_msg(LOG_DEFAULT, LVL_DEBUG, "src: 0x%08x, dest: 0x%08x", 120 pdu->src_addr.ipv4, pdu->dest_addr.ipv4); 117 pdu->src_addr = dgram->src; 118 pdu->dest_addr = dgram->dest; 121 119 122 120 tcp_received_pdu(pdu); … … 145 143 pdu->text_size); 146 144 147 dgram.src .ipv4 = pdu->src_addr.ipv4;148 dgram.dest .ipv4 = pdu->dest_addr.ipv4;145 dgram.src = pdu->src_addr; 146 dgram.dest = pdu->dest_addr; 149 147 dgram.tos = 0; 150 148 dgram.data = pdu_raw; -
uspace/srv/net/tcp/tcp_type.h
r19a4f73 ra2e3ee6 43 43 #include <socket_core.h> 44 44 #include <sys/types.h> 45 #include <inet/addr.h> 45 46 46 47 struct tcp_conn; … … 112 113 113 114 typedef struct { 114 uint32_t ipv4; 115 } netaddr_t; 116 117 typedef struct { 118 netaddr_t addr; 115 inet_addr_t addr; 119 116 uint16_t port; 120 117 } tcp_sock_t; 121 122 enum netaddr {123 TCP_IPV4_ANY = 0124 };125 118 126 119 enum tcp_port { … … 313 306 typedef struct { 314 307 /** Source address */ 315 netaddr_t src_addr;308 inet_addr_t src_addr; 316 309 /** Destination address */ 317 netaddr_t dest_addr;318 310 inet_addr_t dest_addr; 311 319 312 /** Encoded header */ 320 313 void *header; … … 344 337 tcp_conn_t *conn; 345 338 /** Local address */ 346 netaddr_t laddr;339 inet_addr_t laddr; 347 340 /** Backlog size */ 348 341 int backlog; -
uspace/srv/net/tcp/test.c
r19a4f73 ra2e3ee6 57 57 58 58 printf("test_srv()\n"); 59 60 inet_addr(&lsock.addr, 127, 0, 0, 1); 59 61 lsock.port = 80; 60 lsock.addr.ipv4 = 0x7f000001; 62 63 inet_addr(&fsock.addr, 127, 0, 0, 1); 61 64 fsock.port = 1024; 62 fsock.addr.ipv4 = 0x7f000001;65 63 66 printf("S: User open...\n"); 64 67 tcp_uc_open(&lsock, &fsock, ap_passive, 0, &conn); … … 95 98 96 99 printf("test_cli()\n"); 97 100 101 inet_addr(&lsock.addr, 127, 0, 0, 1); 98 102 lsock.port = 1024; 99 lsock.addr.ipv4 = 0x7f000001; 103 104 inet_addr(&fsock.addr, 127, 0, 0, 1); 100 105 fsock.port = 80; 101 fsock.addr.ipv4 = 0x7f000001;102 106 103 107 async_usleep(1000*1000*3); -
uspace/srv/net/tcp/tqueue.c
r19a4f73 ra2e3ee6 282 282 void tcp_transmit_segment(tcp_sockpair_t *sp, tcp_segment_t *seg) 283 283 { 284 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_transmit_segment(f:(%x,%u),l:(%x,%u), %p)",285 sp->foreign.addr.ipv4, sp->foreign.port,286 sp->local.addr.ipv4, sp->local.port, seg);287 288 284 log_msg(LOG_DEFAULT, LVL_DEBUG, "SEG.SEQ=%" PRIu32 ", SEG.WND=%" PRIu32, 289 285 seg->seq, seg->wnd); -
uspace/srv/net/tcp/ucall.c
r19a4f73 ra2e3ee6 298 298 tcp_conn_t *conn; 299 299 300 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_as_segment_arrived(f:(%x,%u), l:(%x,%u))",301 sp->foreign.addr.ipv4, sp->foreign.port,302 sp->local.addr.ipv4, sp->local.port);303 304 300 conn = tcp_conn_find_ref(sp); 305 301 if (conn == NULL) { … … 319 315 } 320 316 321 if (conn->ident.foreign.addr.ipv4 == TCP_IPV4_ANY) 322 conn->ident.foreign.addr.ipv4 = sp->foreign.addr.ipv4; 317 if (inet_addr_is_any(&conn->ident.foreign.addr)) 318 conn->ident.foreign.addr = sp->foreign.addr; 319 323 320 if (conn->ident.foreign.port == TCP_PORT_ANY) 324 321 conn->ident.foreign.port = sp->foreign.port; 325 if (conn->ident.local.addr.ipv4 == TCP_IPV4_ANY) 326 conn->ident.local.addr.ipv4 = sp->local.addr.ipv4; 322 323 if (inet_addr_is_any(&conn->ident.local.addr)) 324 conn->ident.local.addr = sp->local.addr; 327 325 328 326 tcp_conn_segment_arrived(conn, seg);
Note:
See TracChangeset
for help on using the changeset viewer.
