Changeset 2989c7e in mainline for uspace/srv/net/tcp
- Timestamp:
- 2015-05-25T21:04:33Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ab6326bc
- Parents:
- 58e9dec
- Location:
- uspace/srv/net/tcp
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/tcp/Makefile
r58e9dec r2989c7e 28 28 29 29 USPACE_PREFIX = ../../.. 30 31 LIBS = \ 32 $(LIBNETTL_PREFIX)/libnettl.a 33 34 EXTRA_CFLAGS += \ 35 -I$(LIBNETTL_PREFIX)/include 36 30 37 BINARY = tcp 31 38 -
uspace/srv/net/tcp/conn.c
r58e9dec r2989c7e 36 36 37 37 #include <adt/list.h> 38 #include <stdbool.h>39 38 #include <errno.h> 40 39 #include <inet/endpoint.h> 41 40 #include <io/log.h> 42 41 #include <macros.h> 42 #include <nettl/amap.h> 43 #include <stdbool.h> 43 44 #include <stdlib.h> 44 45 #include "conn.h" … … 56 57 #define TIME_WAIT_TIMEOUT (2*MAX_SEGMENT_LIFETIME) 57 58 58 LIST_INITIALIZE(conn_list); 59 FIBRIL_MUTEX_INITIALIZE(conn_list_lock); 59 static LIST_INITIALIZE(conn_list); 60 static FIBRIL_MUTEX_INITIALIZE(conn_list_lock); 61 static amap_t *amap; 60 62 61 63 static void tcp_conn_seg_process(tcp_conn_t *conn, tcp_segment_t *seg); 62 64 static void tcp_conn_tw_timer_set(tcp_conn_t *conn); 63 65 static void tcp_conn_tw_timer_clear(tcp_conn_t *conn); 66 67 /** Initialize connections. */ 68 int tcp_conns_init(void) 69 { 70 int rc; 71 72 rc = amap_create(&amap); 73 if (rc != EOK) { 74 assert(rc == ENOMEM); 75 return ENOMEM; 76 } 77 78 return EOK; 79 } 64 80 65 81 /** Create new connection structure. … … 246 262 * Add connection to the connection map. 247 263 */ 248 void tcp_conn_add(tcp_conn_t *conn) 249 { 264 int tcp_conn_add(tcp_conn_t *conn) 265 { 266 inet_ep2_t aepp; 267 int rc; 268 250 269 tcp_conn_addref(conn); 251 270 fibril_mutex_lock(&conn_list_lock); 271 272 rc = amap_insert(amap, &conn->ident, conn, af_allow_system, &aepp); 273 if (rc != EOK) { 274 tcp_conn_delref(conn); 275 fibril_mutex_unlock(&conn_list_lock); 276 return rc; 277 } 278 279 conn->ident = aepp; 252 280 list_append(&conn->link, &conn_list); 253 281 fibril_mutex_unlock(&conn_list_lock); 282 283 return EOK; 254 284 } 255 285 … … 261 291 { 262 292 fibril_mutex_lock(&conn_list_lock); 293 amap_remove(amap, &conn->ident); 263 294 list_remove(&conn->link); 264 295 fibril_mutex_unlock(&conn_list_lock); -
uspace/srv/net/tcp/conn.h
r58e9dec r2989c7e 40 40 #include "tcp_type.h" 41 41 42 extern int tcp_conns_init(void); 42 43 extern tcp_conn_t *tcp_conn_new(inet_ep2_t *); 43 44 extern void tcp_conn_delete(tcp_conn_t *); 44 extern voidtcp_conn_add(tcp_conn_t *);45 extern int tcp_conn_add(tcp_conn_t *); 45 46 extern void tcp_conn_remove(tcp_conn_t *); 46 47 extern void tcp_conn_reset(tcp_conn_t *conn); -
uspace/srv/net/tcp/service.c
r58e9dec r2989c7e 335 335 tcp_conn_t *conn; 336 336 tcp_cconn_t *cconn; 337 inet_ep2_t cepp;338 337 int rc; 339 338 tcp_error_t trc; … … 343 342 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl"); 344 343 345 cepp = *epp; 346 347 /* Fill in local address? */ 348 if (inet_addr_is_any(&epp->local.addr)) { 349 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl: " 350 "determine local address"); 351 rc = inet_get_srcaddr(&epp->remote.addr, 0, &cepp.local.addr); 352 if (rc != EOK) { 353 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl: " 354 "cannot determine local address"); 355 return rc; 356 } 357 } else { 358 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl: " 359 "local address specified"); 360 } 361 362 /* Allocate local port? */ 363 if (cepp.local.port == 0) { 364 cepp.local.port = 49152; /* XXX */ 365 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl: " 366 "allocated local port %" PRIu16, cepp.local.port); 367 } else { 368 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create_impl: " 369 "local port %" PRIu16 " specified", cepp.local.port); 370 } 371 372 inet_addr_format(&cepp.local.addr, &slocal); 373 inet_addr_format(&cepp.remote.addr, &sremote); 344 inet_addr_format(&epp->local.addr, &slocal); 345 inet_addr_format(&epp->remote.addr, &sremote); 374 346 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_conn_create: local=%s remote=%s", 375 347 slocal, sremote); … … 377 349 free(sremote); 378 350 379 trc = tcp_uc_open( &cepp, ap_active, tcp_open_nonblock, &conn);351 trc = tcp_uc_open(epp, ap_active, tcp_open_nonblock, &conn); 380 352 if (trc != TCP_EOK) 381 353 return EIO; -
uspace/srv/net/tcp/tcp.c
r58e9dec r2989c7e 45 45 #include <task.h> 46 46 47 #include "conn.h" 47 48 #include "ncsim.h" 48 49 #include "pdu.h" … … 179 180 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_init()"); 180 181 182 rc = tcp_conns_init(); 183 if (rc != EOK) { 184 assert(rc == ENOMEM); 185 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed initializing connections"); 186 return ENOMEM; 187 } 188 181 189 tcp_rqueue_init(); 182 190 tcp_rqueue_fibril_start(); -
uspace/srv/net/tcp/ucall.c
r58e9dec r2989c7e 35 35 */ 36 36 37 #include <errno.h> 37 38 #include <fibril_synch.h> 38 39 #include <io/log.h> … … 68 69 { 69 70 tcp_conn_t *nconn; 71 int rc; 70 72 71 73 log_msg(LOG_DEFAULT, LVL_DEBUG, "tcp_uc_open(%p, %s, %s, %p)", … … 74 76 75 77 nconn = tcp_conn_new(epp); 76 tcp_conn_add(nconn); 78 rc = tcp_conn_add(nconn); 79 if (rc != EOK) { 80 tcp_conn_delete(nconn); 81 return TCP_EEXISTS; 82 } 83 77 84 tcp_conn_lock(nconn); 78 85
Note:
See TracChangeset
for help on using the changeset viewer.