On 11/14/25 8:13 AM, [email protected] wrote: > +/* send extra flags of the (NUM_PACKETS / 2) and (NUM_PACKETS / 2 - 1) > + * pkts, not first and not last pkt > + */ > +static void send_flags(int fd, struct sockaddr_ll *daddr, int psh, int syn, > + int rst, int urg, int cwr) > +{ > + static char flag_buf[2][MAX_HDR_LEN + PAYLOAD_LEN]; > + static char buf[MAX_HDR_LEN + PAYLOAD_LEN]; > + int payload_len, pkt_size, i; > + struct tcphdr *tcph; > + int flag[2]; > + > + payload_len = PAYLOAD_LEN * (psh || cwr); > + pkt_size = total_hdr_len + payload_len; > + flag[0] = NUM_PACKETS / 2; > + flag[1] = NUM_PACKETS / 2 - 1; > + > + // Create and configure packets with flags
Please use /* */ for comments. Other than that: Acked-by: Paolo Abeni <[email protected]> > + for (i = 0; i < 2; i++) { > + if (flag[i] > 0) { > + create_packet(flag_buf[i], flag[i] * payload_len, 0, > + payload_len, 0); > + tcph = (struct tcphdr *)(flag_buf[i] + tcp_offset); > + set_flags(tcph, payload_len, psh, syn, rst, urg, cwr); > + } > + } > > for (i = 0; i < NUM_PACKETS + 1; i++) { > - if (i == flag) { > - write_packet(fd, flag_buf, pkt_size, daddr); > + if (i == flag[0]) { > + write_packet(fd, flag_buf[0], pkt_size, daddr); > + continue; > + } else if (i == flag[1] && cwr) { > + write_packet(fd, flag_buf[1], pkt_size, daddr); > continue; > } > create_packet(buf, i * PAYLOAD_LEN, 0, PAYLOAD_LEN, 0); > @@ -1020,16 +1045,19 @@ static void gro_sender(void) > send_ack(txfd, &daddr); > write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > } else if (strcmp(testname, "flags") == 0) { > - send_flags(txfd, &daddr, 1, 0, 0, 0); > + send_flags(txfd, &daddr, 1, 0, 0, 0, 0); > write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > > - send_flags(txfd, &daddr, 0, 1, 0, 0); > + send_flags(txfd, &daddr, 0, 1, 0, 0, 0); > write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > > - send_flags(txfd, &daddr, 0, 0, 1, 0); > + send_flags(txfd, &daddr, 0, 0, 1, 0, 0); > write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > > - send_flags(txfd, &daddr, 0, 0, 0, 1); > + send_flags(txfd, &daddr, 0, 0, 0, 1, 0); > + write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > + > + send_flags(txfd, &daddr, 0, 0, 0, 0, 1); > write_packet(txfd, fin_pkt, total_hdr_len, &daddr); > } else if (strcmp(testname, "tcp") == 0) { > send_changed_checksum(txfd, &daddr); > @@ -1163,6 +1191,12 @@ static void gro_receiver(void) > > printf("urg flag ends coalescing: "); > check_recv_pkts(rxfd, correct_payload, 3); > + > + correct_payload[0] = PAYLOAD_LEN; > + correct_payload[1] = PAYLOAD_LEN * 2; > + correct_payload[2] = PAYLOAD_LEN * 2; > + printf("cwr flag ends coalescing: "); > + check_recv_pkts(rxfd, correct_payload, 3); > } else if (strcmp(testname, "tcp") == 0) { > correct_payload[0] = PAYLOAD_LEN; > correct_payload[1] = PAYLOAD_LEN;
