[gPXE-devel] [PATCHv4 09/10] [tcp] Merge boolean flags into a single "flags" field
Guo-Fu Tseng
cooldavid at cooldavid.org
Sat Jul 17 21:26:14 EDT 2010
From: Michael Brown <mcb30 at ipxe.org>
Signed-off-by: Michael Brown <mcb30 at ipxe.org>
Merged-by: Guo-Fu Tseng <cooldavid at cooldavid.org>
Signed-off-by: Guo-Fu Tseng <cooldavid at cooldavid.org>
---
src/net/tcp.c | 32 +++++++++++++++++++-------------
1 files changed, 19 insertions(+), 13 deletions(-)
diff --git a/src/net/tcp.c b/src/net/tcp.c
index ddd7397..b5f48c4 100644
--- a/src/net/tcp.c
+++ b/src/net/tcp.c
@@ -31,10 +31,11 @@ struct tcp_connection {
/** List of TCP connections */
struct list_head list;
+ /** Flags */
+ unsigned int flags;
+
/** Data transfer interface */
struct xfer_interface xfer;
- /** Data transfer interface closed flag */
- int xfer_closed;
/** Remote socket address */
struct sockaddr_tcpip peer;
@@ -89,8 +90,6 @@ struct tcp_connection {
* Equivalent to TS.Recent in RFC 1323 terminology.
*/
uint32_t ts_recent;
- /** Timestamps enabled */
- int timestamps;
/** Transmit queue */
struct list_head queue;
@@ -98,9 +97,16 @@ struct tcp_connection {
struct retry_timer timer;
/** Shutdown (TIME_WAIT) timer */
struct retry_timer wait;
+};
+/** TCP flags */
+enum tcp_flags {
+ /** TCP data transfer interface has been closed */
+ TCP_XFER_CLOSED = 0x0001,
+ /** TCP timestamps are enabled */
+ TCP_TS_ENABLED = 0x0002,
/** Activity started **/
- int act_started;
+ TCP_ACT_STARTED = 0x0004,
};
/**
@@ -154,15 +160,15 @@ tcp_dump_state ( struct tcp_connection *tcp ) {
tcp_state ( tcp->tcp_state ) );
if ( TCP_CLOSE_INPROGRESS ( tcp->tcp_state ) &&
- ! tcp->act_started ) {
+ ! ( tcp->flags & TCP_TS_ENABLED ) ) {
activity_start();
- tcp->act_started = 1;
+ tcp->flags |= TCP_TS_ENABLED;
}
if ( TCP_CLOSED_GRACEFULLY( tcp->tcp_state ) &&
- tcp->act_started ) {
+ ( tcp->flags & TCP_TS_ENABLED ) ) {
activity_stop();
- tcp->act_started = 0;
+ tcp->flags &= ~TCP_TS_ENABLED;
}
}
tcp->prev_tcp_state = tcp->tcp_state;
@@ -351,7 +357,7 @@ static void tcp_xfer_shutdown ( struct tcp_connection *tcp, int rc ) {
/* Close data transfer interface */
xfer_nullify ( &tcp->xfer );
xfer_close ( &tcp->xfer, rc );
- tcp->xfer_closed = 1;
+ tcp->flags |= TCP_XFER_CLOSED;
}
/***************************************************************************
@@ -518,7 +524,7 @@ static int tcp_xmit ( struct tcp_connection *tcp, int force_send ) {
mssopt->length = sizeof ( *mssopt );
mssopt->mss = htons ( TCP_MSS );
}
- if ( ( flags & TCP_SYN ) || tcp->timestamps ) {
+ if ( ( flags & TCP_SYN ) || ( tcp->flags & TCP_TS_ENABLED ) ) {
tsopt = iob_push ( iobuf, sizeof ( *tsopt ) );
memset ( tsopt->nop, TCP_OPTION_NOP, sizeof ( tsopt->nop ) );
tsopt->tsopt.kind = TCP_OPTION_TS;
@@ -771,7 +777,7 @@ static int tcp_rx_syn ( struct tcp_connection *tcp, uint32_t seq,
if ( ! ( tcp->tcp_state & TCP_STATE_RCVD ( TCP_SYN ) ) ) {
tcp->rcv_ack = seq;
if ( options->tsopt )
- tcp->timestamps = 1;
+ tcp->flags |= TCP_TS_ENABLED;
}
/* Ignore duplicate SYN */
@@ -857,7 +863,7 @@ static int tcp_rx_ack ( struct tcp_connection *tcp, uint32_t ack,
tcp->tcp_state |= TCP_STATE_ACKED ( acked_flags );
/* Start sending FIN if we've had all possible data ACKed */
- if ( list_empty ( &tcp->queue ) && tcp->xfer_closed )
+ if ( list_empty ( &tcp->queue ) && ( tcp->flags & TCP_XFER_CLOSED ) )
tcp->tcp_state |= TCP_STATE_SENT ( TCP_FIN );
return 0;
--
1.7.1
More information about the gPXE-devel
mailing list