[PATCH v6 08/12] net/tcp: simplify tcp header filling code
Simon Glass
sjg at chromium.org
Thu Sep 12 02:59:54 CEST 2024
Hi Mikhail,
On Mon, 9 Sept 2024 at 16:27, Mikhail Kshevetskiy
<mikhail.kshevetskiy at iopsys.eu> wrote:
>
> This patch:
> * remove useless code,
> * use a special function for pretty printing of tcp flags,
> * simplify the code
>
> The behavior should not be changed.
>
> Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy at iopsys.eu>
> ---
> net/tcp.c | 74 ++++++++++++++++++++++++++++++-------------------------
> 1 file changed, 41 insertions(+), 33 deletions(-)
>
> diff --git a/net/tcp.c b/net/tcp.c
> index 37dda6f84f9..0778c153aca 100644
> --- a/net/tcp.c
> +++ b/net/tcp.c
> @@ -535,10 +535,41 @@ void net_set_syn_options(struct tcp_stream *tcp, union tcp_build_pkt *b)
> b->ip.end = TCP_O_END;
> }
>
> +const char *tcpflags_to_str(char tcpflags, char *buf, int size)
> +{
> + int i, len;
> + char *orig = buf;
> + const struct {
static
> + int bit;
> + const char *name;
> + } desc[] = {{TCP_RST, "RST"}, {TCP_SYN, "SYN"}, {TCP_PUSH, "PSH"},
> + {TCP_FIN, "FIN"}, {TCP_ACK, "ACK"}, {0, NULL}};
> +
> + *orig = '\0';
> + for (i = 0; desc[i].name; i++) {
You could use ARRAY_SIZE() here and avoid the terminator, if you like
> + if (!(tcpflags & desc[i].bit))
> + continue;
> +
> + len = strlen(desc[i].name);
> + if (size <= len + 1)
> + break;
> + if (buf != orig) {
> + *buf++ = ',';
> + size--;
> + }
> +
> + strcpy(buf, desc[i].name);
Or be lazy and just use strlcat() for both the command the name...up to you
> + buf += len;
> + size -= len;
> + }
blank line before final return
> + return orig;
> +}
> +
> int tcp_set_tcp_header(struct tcp_stream *tcp, uchar *pkt, int payload_len,
> u8 action, u32 tcp_seq_num, u32 tcp_ack_num)
> {
> union tcp_build_pkt *b = (union tcp_build_pkt *)pkt;
> + char buf[24];
> int pkt_hdr_len;
> int pkt_len;
> int tcp_len;
> @@ -548,55 +579,32 @@ int tcp_set_tcp_header(struct tcp_stream *tcp, uchar *pkt, int payload_len,
> * 4 bits reserved options
> */
> b->ip.hdr.tcp_flags = action;
> - pkt_hdr_len = IP_TCP_HDR_SIZE;
> b->ip.hdr.tcp_hlen = SHIFT_TO_TCPHDRLEN_FIELD(LEN_B_TO_DW(TCP_HDR_SIZE));
>
> switch (action) {
> case TCP_SYN:
> debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:SYN (%pI4, %pI4, sq=%u, ak=%u)\n",
> - &tcp->rhost, &net_ip,
> - tcp_seq_num, tcp_ack_num);
> + "TCP Hdr:%s (%pI4, %pI4, s=%u, a=%u)\n",
> + tcpflags_to_str(action, buf, sizeof(buf)),
> + &tcp->rhost, &net_ip, tcp_seq_num, tcp_ack_num);
> net_set_syn_options(tcp, b);
> pkt_hdr_len = IP_TCP_O_SIZE;
> break;
> - case TCP_SYN | TCP_ACK:
> - case TCP_ACK:
> - pkt_hdr_len = IP_HDR_SIZE + net_set_ack_options(tcp, b);
> - b->ip.hdr.tcp_flags = action;
> - debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:ACK (%pI4, %pI4, s=%u, a=%u, A=%x)\n",
> - &tcp->rhost, &net_ip, tcp_seq_num, tcp_ack_num,
> - action);
> - break;
> - case TCP_FIN:
> - debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:FIN (%pI4, %pI4, s=%u, a=%u)\n",
> - &tcp->rhost, &net_ip, tcp_seq_num, tcp_ack_num);
> - payload_len = 0;
> - pkt_hdr_len = IP_TCP_HDR_SIZE;
> - break;
> case TCP_RST | TCP_ACK:
> case TCP_RST:
> debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:RST (%pI4, %pI4, s=%u, a=%u)\n",
> + "TCP Hdr:%s (%pI4, %pI4, s=%u, a=%u)\n",
> + tcpflags_to_str(action, buf, sizeof(buf)),
> &tcp->rhost, &net_ip, tcp_seq_num, tcp_ack_num);
> + pkt_hdr_len = IP_TCP_HDR_SIZE;
> break;
> - /* Notify connection closing */
> - case (TCP_FIN | TCP_ACK):
> - case (TCP_FIN | TCP_ACK | TCP_PUSH):
> - debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:FIN ACK PSH(%pI4, %pI4, s=%u, a=%u, A=%x)\n",
> - &tcp->rhost, &net_ip,
> - tcp_seq_num, tcp_ack_num, action);
> - fallthrough;
> default:
> pkt_hdr_len = IP_HDR_SIZE + net_set_ack_options(tcp, b);
> - b->ip.hdr.tcp_flags = action | TCP_PUSH | TCP_ACK;
> debug_cond(DEBUG_DEV_PKT,
> - "TCP Hdr:dft (%pI4, %pI4, s=%u, a=%u, A=%x)\n",
> - &tcp->rhost, &net_ip,
> - tcp_seq_num, tcp_ack_num, action);
> + "TCP Hdr:%s (%pI4, %pI4, s=%u, a=%u)\n",
> + tcpflags_to_str(action, buf, sizeof(buf)),
> + &tcp->rhost, &net_ip, tcp_seq_num, tcp_ack_num);
> + break;
> }
>
> pkt_len = pkt_hdr_len + payload_len;
> --
> 2.45.2
>
Regards,
Simon
More information about the U-Boot
mailing list