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;


Reply via email to