diff --git a/VERSION b/VERSION index 169a8dd8..95795064 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -24.10.1 +24.10.2 diff --git a/app/cli-functions.c b/app/cli-functions.c index 80c63288..e87e3015 100644 --- a/app/cli-functions.c +++ b/app/cli-functions.c @@ -98,8 +98,7 @@ static struct cli_map range_map[] = { {37, "range %P src ip %6 %6 %6 %6"}, {40, "range %P proto %|tcp|udp"}, {41, "range %P type %|ipv4|ipv6"}, - {42, "range %P tcp flag set %|urg|ack|psh|rst|syn|fin|all"}, - {43, "range %P tcp flag clr %|urg|ack|psh|rst|syn|fin|all"}, + {42, "range %P tcp %|flag|flags %s"}, {44, "range %P tcp seq %d %d %d %d"}, {45, "range %P tcp ack %d %d %d %d"}, {46, "range %P tcp seq " SMMI " %d"}, @@ -150,7 +149,7 @@ static const char *range_help[] = { " or range 0 dst ip 0.0.0.0 0.0.0.0 1.2.3.4 0.0.1.0", "range type ipv4|ipv6 - Set the range packet type to IPv4 or IPv6", "range proto tcp|udp - Set the IP protocol type", - "range tcp flags - Set TCP flags: " + "range tcp flags - Set comma delimited TCP flags: " "cwr,ece,urg,ack,psh,rst,syn,fin,clr", "range tcp seq - Set the TCP sequence number", " or range tcp seq ", @@ -270,24 +269,28 @@ range_cmd(int argc, char **argv) foreach_port(portlist, range_set_src_ip(pinfo, what, &ip)); break; case 32: + // clang-format off foreach_port(portlist, _atoip(argv[4], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "start", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"start", &ip); _atoip(argv[5], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "min", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"min", &ip); _atoip(argv[6], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "max", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"max", &ip); _atoip(argv[7], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "inc", &ip)); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"inc", &ip)); + // clang-format on break; case 33: + // clang-format off foreach_port(portlist, _atoip(argv[4], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "start", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"start", &ip); _atoip(argv[5], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "min", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"min", &ip); _atoip(argv[6], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "max", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"max", &ip); _atoip(argv[7], PG_IPADDR_V4, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "inc", &ip)); + range_set_src_ip(pinfo, (char *)(uintptr_t)"inc", &ip)); + // clang-format on break; case 34: /* Remove the /XX mask value is supplied */ @@ -306,24 +309,28 @@ range_cmd(int argc, char **argv) foreach_port(portlist, range_set_src_ip(pinfo, what, &ip)); break; case 36: + // clang-format off foreach_port(portlist, _atoip(argv[4], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "start", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"start", &ip); _atoip(argv[5], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "min", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"min", &ip); _atoip(argv[6], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "max", &ip); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"max", &ip); _atoip(argv[7], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_dst_ip(pinfo, (char *)(uintptr_t) "inc", &ip)); + range_set_dst_ip(pinfo, (char *)(uintptr_t)"inc", &ip)); + // clang-format on break; case 37: + // clang-format off foreach_port(portlist, _atoip(argv[4], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "start", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"start", &ip); _atoip(argv[5], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "min", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"min", &ip); _atoip(argv[6], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "max", &ip); + range_set_src_ip(pinfo, (char *)(uintptr_t)"max", &ip); _atoip(argv[7], PG_IPADDR_V6, &ip, sizeof(ip)); - range_set_src_ip(pinfo, (char *)(uintptr_t) "inc", &ip)); + range_set_src_ip(pinfo, (char *)(uintptr_t)"inc", &ip)); + // clang-format on break; case 40: foreach_port(portlist, range_set_proto(pinfo, argv[3])); @@ -331,20 +338,24 @@ range_cmd(int argc, char **argv) case 41: foreach_port(portlist, range_set_pkt_type(pinfo, argv[3])); break; - case 43: + case 42: foreach_port(portlist, range_set_tcp_flags(pinfo, argv[4])); break; case 44: - foreach_port(portlist, range_set_tcp_seq(pinfo, (char *)(uintptr_t) "start", atoi(argv[4])); - range_set_tcp_seq(pinfo, (char *)(uintptr_t) "min", atoi(argv[5])); - range_set_tcp_seq(pinfo, (char *)(uintptr_t) "max", atoi(argv[6])); - range_set_tcp_seq(pinfo, (char *)(uintptr_t) "inc", atoi(argv[7]))); + // clang-format off + foreach_port(portlist, range_set_tcp_seq(pinfo, (char *)(uintptr_t)"start", atoi(argv[4])); + range_set_tcp_seq(pinfo, (char *)(uintptr_t)"min", atoi(argv[5])); + range_set_tcp_seq(pinfo, (char *)(uintptr_t)"max", atoi(argv[6])); + range_set_tcp_seq(pinfo, (char *)(uintptr_t)"inc", atoi(argv[7]))); + // clang-format on break; case 45: - foreach_port(portlist, range_set_tcp_ack(pinfo, (char *)(uintptr_t) "start", atoi(argv[4])); - range_set_tcp_ack(pinfo, (char *)(uintptr_t) "min", atoi(argv[5])); - range_set_tcp_ack(pinfo, (char *)(uintptr_t) "max", atoi(argv[6])); - range_set_tcp_ack(pinfo, (char *)(uintptr_t) "inc", atoi(argv[7]))); + // clang-format off + foreach_port(portlist, range_set_tcp_ack(pinfo, (char *)(uintptr_t)"start", atoi(argv[4])); + range_set_tcp_ack(pinfo, (char *)(uintptr_t)"min", atoi(argv[5])); + range_set_tcp_ack(pinfo, (char *)(uintptr_t)"max", atoi(argv[6])); + range_set_tcp_ack(pinfo, (char *)(uintptr_t)"inc", atoi(argv[7]))); + // clang-format on break; case 46: foreach_port(portlist, range_set_tcp_seq(pinfo, what, atoi(val))); @@ -359,36 +370,42 @@ range_cmd(int argc, char **argv) foreach_port(portlist, range_set_src_port(pinfo, what, atoi(val))); break; case 52: - foreach_port(portlist, - range_set_dst_port(pinfo, (char *)(uintptr_t) "start", atoi(argv[4])); - range_set_dst_port(pinfo, (char *)(uintptr_t) "min", atoi(argv[5])); - range_set_dst_port(pinfo, (char *)(uintptr_t) "max", atoi(argv[6])); - range_set_dst_port(pinfo, (char *)(uintptr_t) "inc", atoi(argv[7]))); + // clang-format off + foreach_port(portlist, range_set_dst_port(pinfo, (char *)(uintptr_t)"start", atoi(argv[4])); + range_set_dst_port(pinfo, (char *)(uintptr_t)"min", atoi(argv[5])); + range_set_dst_port(pinfo, (char *)(uintptr_t)"max", atoi(argv[6])); + range_set_dst_port(pinfo, (char *)(uintptr_t)"inc", atoi(argv[7]))); + // clang-format on break; case 53: - foreach_port(portlist, - range_set_src_port(pinfo, (char *)(uintptr_t) "start", atoi(argv[4])); - range_set_src_port(pinfo, (char *)(uintptr_t) "min", atoi(argv[5])); - range_set_src_port(pinfo, (char *)(uintptr_t) "max", atoi(argv[6])); - range_set_src_port(pinfo, (char *)(uintptr_t) "inc", atoi(argv[7]))); + // clang-format off + foreach_port(portlist, range_set_src_port(pinfo, (char *)(uintptr_t)"start", atoi(argv[4])); + range_set_src_port(pinfo, (char *)(uintptr_t)"min", atoi(argv[5])); + range_set_src_port(pinfo, (char *)(uintptr_t)"max", atoi(argv[6])); + range_set_src_port(pinfo, (char *)(uintptr_t)"inc", atoi(argv[7]))); + // clang-format on break; case 55: foreach_port(portlist, range_set_ttl(pinfo, argv[3], atoi(argv[4]))); break; case 56: - foreach_port(portlist, range_set_ttl(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_ttl(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_ttl(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_ttl(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]))); + // clang-format off + foreach_port(portlist, range_set_ttl(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_ttl(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_ttl(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_ttl(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]))); + // clang-format on break; case 60: foreach_port(portlist, range_set_vlan_id(pinfo, argv[3], atoi(what))); break; case 61: - foreach_port(portlist, range_set_vlan_id(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_vlan_id(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_vlan_id(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_vlan_id(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]))); + // clang-format off + foreach_port(portlist, range_set_vlan_id(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_vlan_id(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_vlan_id(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_vlan_id(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]))); + // clang-format on break; case 70: foreach_port(portlist, @@ -396,11 +413,12 @@ range_cmd(int argc, char **argv) strcmp("inc", argv[3]) ? atoi(argv[4]) : atoi(argv[3]))); break; case 71: - foreach_port(portlist, - range_set_pkt_size(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_pkt_size(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_pkt_size(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_pkt_size(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]));); + // clang-format off + foreach_port(portlist, range_set_pkt_size(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_pkt_size(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_pkt_size(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_pkt_size(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]));); + // clang-format on break; case 80: foreach_port(portlist, range_set_mpls_entry(pinfo, strtoul(what, NULL, 16))); @@ -419,50 +437,60 @@ range_cmd(int argc, char **argv) : atoi(what))); break; case 101: + // clang-format off foreach_port( - portlist, range_set_gtpu_teid(pinfo, (char *)(uintptr_t) "start", - valid_gtpu_teid(pinfo, argv[3])); - range_set_gtpu_teid(pinfo, (char *)(uintptr_t) "min", valid_gtpu_teid(pinfo, argv[4])); - range_set_gtpu_teid(pinfo, (char *)(uintptr_t) "max", valid_gtpu_teid(pinfo, argv[5])); - range_set_gtpu_teid(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]));); + portlist, + range_set_gtpu_teid(pinfo, (char *)(uintptr_t)"start", valid_gtpu_teid(pinfo, argv[3])); + range_set_gtpu_teid(pinfo, (char *)(uintptr_t)"min", valid_gtpu_teid(pinfo, argv[4])); + range_set_gtpu_teid(pinfo, (char *)(uintptr_t)"max", valid_gtpu_teid(pinfo, argv[5])); + range_set_gtpu_teid(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]));); + // clang-format on break; case 160: foreach_port(portlist, range_set_cos_id(pinfo, argv[3], atoi(what))); break; case 161: - foreach_port(portlist, range_set_cos_id(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_cos_id(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_cos_id(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_cos_id(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]));); + // clang-format off + foreach_port(portlist, range_set_cos_id(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_cos_id(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_cos_id(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_cos_id(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]));); + // clang-format on break; case 170: foreach_port(portlist, range_set_tos_id(pinfo, argv[3], atoi(what))); break; case 171: - foreach_port(portlist, range_set_tos_id(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_tos_id(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_tos_id(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_tos_id(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]))); + // clang-format off + foreach_port(portlist, range_set_tos_id(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_tos_id(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_tos_id(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_tos_id(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]))); + // clang-format on break; case 172: foreach_port(portlist, range_set_hop_limits(pinfo, argv[3], atoi(what))); break; case 173: + // clang-format off foreach_port(portlist, - range_set_hop_limits(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_hop_limits(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_hop_limits(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_hop_limits(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]))); + range_set_hop_limits(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_hop_limits(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_hop_limits(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_hop_limits(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]))); + // clang-format on break; case 174: foreach_port(portlist, range_set_traffic_class(pinfo, argv[3], atoi(what))); break; case 175: + // clang-format off foreach_port(portlist, - range_set_traffic_class(pinfo, (char *)(uintptr_t) "start", atoi(argv[3])); - range_set_traffic_class(pinfo, (char *)(uintptr_t) "min", atoi(argv[4])); - range_set_traffic_class(pinfo, (char *)(uintptr_t) "max", atoi(argv[5])); - range_set_traffic_class(pinfo, (char *)(uintptr_t) "inc", atoi(argv[6]))); + range_set_traffic_class(pinfo, (char *)(uintptr_t)"start", atoi(argv[3])); + range_set_traffic_class(pinfo, (char *)(uintptr_t)"min", atoi(argv[4])); + range_set_traffic_class(pinfo, (char *)(uintptr_t)"max", atoi(argv[5])); + range_set_traffic_class(pinfo, (char *)(uintptr_t)"inc", atoi(argv[6]))); + // clang-format on break; default: @@ -551,7 +579,7 @@ static const char *set_help[] = { "set user pattern - A 16 byte string, must set 'pattern user' command", "set [src|dst] ip ipaddr - Set IP addresses, Source must include network mask e.g. " "10.1.2.3/24", - "set tcp flags - Set TCP flags: cwr,ece,urg,ack,psh,rst,syn,fin,clr", + "set tcp flags - Set comma delimited TCP flags: cwr,ece,urg,ack,psh,rst,syn,fin,clr", "set tcp seq - Set the TCP sequence number", "set tcp ack - Set the TCP acknowledge number", "set qinqids - Set the Q-in-Q ID's for the portlist", @@ -1524,7 +1552,7 @@ static const char *seq_help[] = { " - Set the sequence packet information, make sure the " "src-IP", " has the netmask value eg 1.2.3.4/24", - "sequence tcp flags - Set the TCP flags: " + "sequence tcp %|flag|flags - Set comma delimited TCP flags: " "cwr,ece,urg,ack,psh,rst,syn,fin,clr", CLI_HELP_PAUSE, NULL}; diff --git a/app/pktgen-cmds.c b/app/pktgen-cmds.c index dcb80154..4b942329 100644 --- a/app/pktgen-cmds.c +++ b/app/pktgen-cmds.c @@ -2830,7 +2830,7 @@ tcp_flags_from_str(const char *str) for (int i = 0; i < num_fields; i++) { if (!strcmp(fields[i], "clr")) { flags = 0; - break; + continue; } for (tcp_flags_t *flag = flag_list; flag->name; flag++) { if (!strcmp(fields[i], flag->name)) { @@ -2860,11 +2860,15 @@ tcp_str_from_flags(uint16_t flags, char *buf, size_t len) for (tcp_flags_t *flag = flag_list; flag->name; flag++) { if (flags & flag->bit) { - if (str) + if (str) { + if (n + strlen(flag->name) + 1 >= len) + return -1; n = snprintf(str, len, ",%s", flag->name); - else { + } else { str = buf; - n = snprintf(str, len, "%s", flag->name); + if (n + strlen(flag->name) + 1 >= len) + return -1; + n = snprintf(str, len, "%s", flag->name); } str += n; len -= n; diff --git a/changelog.txt b/changelog.txt index 7af10867..b7a12605 100644 --- a/changelog.txt +++ b/changelog.txt @@ -6,7 +6,8 @@ Pktgen-DPDK - Traffic Generator powered by DPDK ** (Pktgen) Sounds like 'Packet-Gen'** **=== Modifications ===** - - 23.10.1 - fix compiler warnings on packed-not-aligned for ubuntu 24.10 + - 24.10.2 = fix tcp flags setting code. + - 24.10.1 - fix compiler warnings on packed-not-aligned for ubuntu 24.10 - 24.10.0 - fix a number of bugs for pcap crash, tcp flags, socket crash, random and startup. PCAP crash memory overrun was found and fixed. - 24.07.1 - add back support for Lua socket support. diff --git a/lib/common/pg_inet.h b/lib/common/pg_inet.h index cfe345fa..0300350d 100644 --- a/lib/common/pg_inet.h +++ b/lib/common/pg_inet.h @@ -188,12 +188,14 @@ enum { SYN_FLAG = 0x002, FIN_FLAG = 0x001 }; +// clang-format off #define TCP_FLAGS_LIST \ { \ {"rs0", RS0_FLAG}, {"rs1", RS1_FLAG}, {"rs2", RS2_FLAG}, {"rs3", RS3_FLAG}, \ {"cwr", CWR_FLAG}, {"ece", ECE_FLAG}, {"urg", URG_FLAG}, {"ack", ACK_FLAG}, \ {"psh", PSH_FLAG}, {"rst", RST_FLAG}, {"syn", SYN_FLAG}, {"fin", FIN_FLAG}, \ {NULL, 0}} +// clang-format on /* TCP header length and flags */ #define TCP_HDR_LENGTH_MASK 0xF000