/** Remote socket address */
struct sockaddr_tcpip peer;
- /** Local port, in network byte order */
+ /** Local port */
unsigned int local_port;
/** Current TCP state */
* Bind TCP connection to local port
*
* @v tcp TCP connection
- * @v port Local port number, in network-endian order
+ * @v port Local port number
* @ret rc Return status code
*
* If the port is 0, the connection is assigned an available port
try_port++;
if ( try_port < 1024 )
continue;
- if ( tcp_bind ( tcp, htons ( try_port ) ) == 0 )
+ if ( tcp_bind ( tcp, try_port ) == 0 )
return 0;
}
DBGC ( tcp, "TCP %p could not bind: no free ports\n", tcp );
list_for_each_entry ( existing, &tcp_conns, list ) {
if ( existing->local_port == port ) {
DBGC ( tcp, "TCP %p could not bind: port %d in use\n",
- tcp, ntohs ( port ) );
+ tcp, port );
return -EADDRINUSE;
}
}
tcp->local_port = port;
- DBGC ( tcp, "TCP %p bound to port %d\n", tcp, ntohs ( port ) );
+ DBGC ( tcp, "TCP %p bound to port %d\n", tcp, port );
return 0;
}
memcpy ( &tcp->peer, st_peer, sizeof ( tcp->peer ) );
/* Bind to local port */
- bind_port = ( st_local ? st_local->st_port : 0 );
+ bind_port = ( st_local ? ntohs ( st_local->st_port ) : 0 );
if ( ( rc = tcp_bind ( tcp, bind_port ) ) != 0 )
goto err;
flags |= TCP_PSH;
tcphdr = iob_push ( iobuf, sizeof ( *tcphdr ) );
memset ( tcphdr, 0, sizeof ( *tcphdr ) );
- tcphdr->src = tcp->local_port;
+ tcphdr->src = htons ( tcp->local_port );
tcphdr->dest = tcp->peer.st_port;
tcphdr->seq = htonl ( tcp->snd_seq );
tcphdr->ack = htonl ( tcp->rcv_ack );
/**
* Identify TCP connection by local port number
*
- * @v local_port Local port (in network-endian order)
+ * @v local_port Local port
* @ret tcp TCP connection, or NULL
*/
static struct tcp_connection * tcp_demux ( unsigned int local_port ) {
}
/* Parse parameters from header and strip header */
- tcp = tcp_demux ( tcphdr->dest );
+ tcp = tcp_demux ( ntohs ( tcphdr->dest ) );
start_seq = seq = ntohl ( tcphdr->seq );
ack = ntohl ( tcphdr->ack );
win = ntohs ( tcphdr->win );