Changeset a2e3ee6 in mainline for uspace/srv/net/tcp


Ignore:
Timestamp:
2013-06-20T16:45:58Z (13 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
08bb73b
Parents:
19a4f73
Message:

use new network address infrastructure (towards IPv6 support)

Location:
uspace/srv/net/tcp
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/tcp/conn.c

    r19a4f73 ra2e3ee6  
    312312static bool tcp_socket_match(tcp_sock_t *sock, tcp_sock_t *patt)
    313313{
    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)))
    319316                return false;
    320317
    321         if (patt->port != TCP_PORT_ANY &&
    322             patt->port != sock->port)
     318        if ((patt->port != TCP_PORT_ANY) &&
     319            (patt->port != sock->port))
    323320                return false;
    324321
     
    354351{
    355352        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);
    360353       
    361354        fibril_mutex_lock(&conn_list_lock);
     
    364357                tcp_conn_t *conn = list_get_instance(link, tcp_conn_t, link);
    365358                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);
    370359               
    371360                if (tcp_sockpair_match(sp, csp)) {
  • uspace/srv/net/tcp/pdu.c

    r19a4f73 ra2e3ee6  
    146146static void tcp_phdr_setup(tcp_pdu_t *pdu, tcp_phdr_t *phdr)
    147147{
    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);
    150158        phdr->zero = 0;
    151159        phdr->protocol = 6; /* XXX Magic number */
  • uspace/srv/net/tcp/sock.c

    r19a4f73 ra2e3ee6  
    179179        }
    180180
    181         sock->laddr.ipv4 = TCP_IPV4_ANY;
     181        inet_addr_any(&sock->laddr);
    182182        sock->lconn = NULL;
    183183        sock->backlog = 0;
     
    314314        log_msg(LOG_DEFAULT, LVL_DEBUG, " - open connections");
    315315       
    316         lsocket.addr.ipv4 = TCP_IPV4_ANY;
     316        inet_addr_any(&lsocket.addr);
    317317        lsocket.port = sock_core->port;
    318         fsocket.addr.ipv4 = TCP_IPV4_ANY;
     318       
     319        inet_addr_any(&fsocket.addr);
    319320        fsocket.port = TCP_PORT_ANY;
    320321       
     
    396397        fibril_mutex_lock(&socket->lock);
    397398
    398         if (socket->laddr.ipv4 == TCP_IPV4_ANY) {
     399        if (inet_addr_is_any(&socket->laddr)) {
    399400                /* 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);
    403406                rc = inet_get_srcaddr(&rem_addr, 0, &loc_addr);
    404407                if (rc != EOK) {
     
    409412                        return;
    410413                }
    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;
    417419        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);
    419423        fsocket.port = uint16_t_be2host(addr->sin_port);
    420424
     
    507511        /* Replenish listening connection */
    508512
    509         lsocket.addr.ipv4 = TCP_IPV4_ANY;
     513        inet_addr_any(&lsocket.addr);
    510514        lsocket.port = sock_core->port;
    511         fsocket.addr.ipv4 = TCP_IPV4_ANY;
     515       
     516        inet_addr_any(&fsocket.addr);
    512517        fsocket.port = TCP_PORT_ANY;
    513518
     
    728733
    729734        if (IPC_GET_IMETHOD(call) == NET_SOCKET_RECVFROM) {
    730                 /* Fill addr */
     735                /* Fill address */
    731736                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               
    732747                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);
    734749                addr.sin_port = host2uint16_t_be(rsock->port);
    735750
  • uspace/srv/net/tcp/tcp.c

    r19a4f73 ra2e3ee6  
    115115        }
    116116
    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;
    121119
    122120        tcp_received_pdu(pdu);
     
    145143            pdu->text_size);
    146144
    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;
    149147        dgram.tos = 0;
    150148        dgram.data = pdu_raw;
  • uspace/srv/net/tcp/tcp_type.h

    r19a4f73 ra2e3ee6  
    4343#include <socket_core.h>
    4444#include <sys/types.h>
     45#include <inet/addr.h>
    4546
    4647struct tcp_conn;
     
    112113
    113114typedef struct {
    114         uint32_t ipv4;
    115 } netaddr_t;
    116 
    117 typedef struct {
    118         netaddr_t addr;
     115        inet_addr_t addr;
    119116        uint16_t port;
    120117} tcp_sock_t;
    121 
    122 enum netaddr {
    123         TCP_IPV4_ANY = 0
    124 };
    125118
    126119enum tcp_port {
     
    313306typedef struct {
    314307        /** Source address */
    315         netaddr_t src_addr;
     308        inet_addr_t src_addr;
    316309        /** Destination address */
    317         netaddr_t dest_addr;
    318 
     310        inet_addr_t dest_addr;
     311       
    319312        /** Encoded header */
    320313        void *header;
     
    344337        tcp_conn_t *conn;
    345338        /** Local address */
    346         netaddr_t laddr;
     339        inet_addr_t laddr;
    347340        /** Backlog size */
    348341        int backlog;
  • uspace/srv/net/tcp/test.c

    r19a4f73 ra2e3ee6  
    5757
    5858        printf("test_srv()\n");
     59       
     60        inet_addr(&lsock.addr, 127, 0, 0, 1);
    5961        lsock.port = 80;
    60         lsock.addr.ipv4 = 0x7f000001;
     62       
     63        inet_addr(&fsock.addr, 127, 0, 0, 1);
    6164        fsock.port = 1024;
    62         fsock.addr.ipv4 = 0x7f000001;
     65       
    6366        printf("S: User open...\n");
    6467        tcp_uc_open(&lsock, &fsock, ap_passive, 0, &conn);
     
    9598
    9699        printf("test_cli()\n");
    97 
     100       
     101        inet_addr(&lsock.addr, 127, 0, 0, 1);
    98102        lsock.port = 1024;
    99         lsock.addr.ipv4 = 0x7f000001;
     103       
     104        inet_addr(&fsock.addr, 127, 0, 0, 1);
    100105        fsock.port = 80;
    101         fsock.addr.ipv4 = 0x7f000001;
    102106
    103107        async_usleep(1000*1000*3);
  • uspace/srv/net/tcp/tqueue.c

    r19a4f73 ra2e3ee6  
    282282void tcp_transmit_segment(tcp_sockpair_t *sp, tcp_segment_t *seg)
    283283{
    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 
    288284        log_msg(LOG_DEFAULT, LVL_DEBUG, "SEG.SEQ=%" PRIu32 ", SEG.WND=%" PRIu32,
    289285            seg->seq, seg->wnd);
  • uspace/srv/net/tcp/ucall.c

    r19a4f73 ra2e3ee6  
    298298        tcp_conn_t *conn;
    299299
    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 
    304300        conn = tcp_conn_find_ref(sp);
    305301        if (conn == NULL) {
     
    319315        }
    320316
    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       
    323320        if (conn->ident.foreign.port == TCP_PORT_ANY)
    324321                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;
    327325
    328326        tcp_conn_segment_arrived(conn, seg);
Note: See TracChangeset for help on using the changeset viewer.