Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/29424/?format=api
https://patches.dpdk.org/api/patches/29424/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/1506676737-23900-4-git-send-email-bernard.iremonger@intel.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<1506676737-23900-4-git-send-email-bernard.iremonger@intel.com>", "list_archive_url": "https://inbox.dpdk.org/dev/1506676737-23900-4-git-send-email-bernard.iremonger@intel.com", "date": "2017-09-29T09:18:56", "name": "[dpdk-dev,v6,3/4] test: add packet burst generator functions", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "c48218eb2595f4c82402566ff70177b6bbe1bfc4", "submitter": { "id": 91, "url": "https://patches.dpdk.org/api/people/91/?format=api", "name": "Iremonger, Bernard", "email": "bernard.iremonger@intel.com" }, "delegate": null, "mbox": "https://patches.dpdk.org/project/dpdk/patch/1506676737-23900-4-git-send-email-bernard.iremonger@intel.com/mbox/", "series": [], "comments": "https://patches.dpdk.org/api/patches/29424/comments/", "check": "success", "checks": "https://patches.dpdk.org/api/patches/29424/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@dpdk.org", "Delivered-To": "patchwork@dpdk.org", "Received": [ "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 220451B21F;\n\tFri, 29 Sep 2017 11:19:23 +0200 (CEST)", "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby dpdk.org (Postfix) with ESMTP id 36A691B215\n\tfor <dev@dpdk.org>; Fri, 29 Sep 2017 11:19:20 +0200 (CEST)", "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t29 Sep 2017 02:19:20 -0700", "from sivswdev01.ir.intel.com (HELO localhost.localdomain)\n\t([10.237.217.45])\n\tby fmsmga001.fm.intel.com with ESMTP; 29 Sep 2017 02:19:18 -0700" ], "X-ExtLoop1": "1", "X-IronPort-AV": "E=Sophos; i=\"5.42,452,1500966000\"; d=\"scan'208\";\n\ta=\"1200363938\"", "From": "Bernard Iremonger <bernard.iremonger@intel.com>", "To": "dev@dpdk.org, ferruh.yigit@intel.com, konstantin.ananyev@intel.com,\n\tcristian.dumitrescu@intel.com, adrien.mazarguil@6wind.com", "Cc": "Bernard Iremonger <bernard.iremonger@intel.com>", "Date": "Fri, 29 Sep 2017 10:18:56 +0100", "Message-Id": "<1506676737-23900-4-git-send-email-bernard.iremonger@intel.com>", "X-Mailer": "git-send-email 1.7.0.7", "In-Reply-To": "<1504802598-27296-1-git-send-email-bernard.iremonger@intel.com>", "References": "<1504802598-27296-1-git-send-email-bernard.iremonger@intel.com>", "Subject": "[dpdk-dev] [PATCH v6 3/4] test: add packet burst generator functions", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.15", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://dpdk.org/ml/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "add initialize_tcp_header function\nadd initialize_stcp_header function\nadd initialize_ipv4_header_proto function\nadd generate_packet_burst_proto function\n\nSigned-off-by: Bernard Iremonger <bernard.iremonger@intel.com>\n---\n test/test/packet_burst_generator.c | 191 +++++++++++++++++++++++++++++++++++++\n test/test/packet_burst_generator.h | 22 ++++-\n 2 files changed, 211 insertions(+), 2 deletions(-)", "diff": "diff --git a/test/test/packet_burst_generator.c b/test/test/packet_burst_generator.c\nindex a93c3b5..8f4ddcc 100644\n--- a/test/test/packet_burst_generator.c\n+++ b/test/test/packet_burst_generator.c\n@@ -134,6 +134,36 @@\n \treturn pkt_len;\n }\n \n+uint16_t\n+initialize_tcp_header(struct tcp_hdr *tcp_hdr, uint16_t src_port,\n+\t\tuint16_t dst_port, uint16_t pkt_data_len)\n+{\n+\tuint16_t pkt_len;\n+\n+\tpkt_len = (uint16_t) (pkt_data_len + sizeof(struct tcp_hdr));\n+\n+\tmemset(tcp_hdr, 0, sizeof(struct tcp_hdr));\n+\ttcp_hdr->src_port = rte_cpu_to_be_16(src_port);\n+\ttcp_hdr->dst_port = rte_cpu_to_be_16(dst_port);\n+\n+\treturn pkt_len;\n+}\n+\n+uint16_t\n+initialize_sctp_header(struct sctp_hdr *sctp_hdr, uint16_t src_port,\n+\t\tuint16_t dst_port, uint16_t pkt_data_len)\n+{\n+\tuint16_t pkt_len;\n+\n+\tpkt_len = (uint16_t) (pkt_data_len + sizeof(struct udp_hdr));\n+\n+\tsctp_hdr->src_port = rte_cpu_to_be_16(src_port);\n+\tsctp_hdr->dst_port = rte_cpu_to_be_16(dst_port);\n+\tsctp_hdr->tag = 0;\n+\tsctp_hdr->cksum = 0; /* No SCTP checksum. */\n+\n+\treturn pkt_len;\n+}\n \n uint16_t\n initialize_ipv6_header(struct ipv6_hdr *ip_hdr, uint8_t *src_addr,\n@@ -198,7 +228,53 @@\n \treturn pkt_len;\n }\n \n+uint16_t\n+initialize_ipv4_header_proto(struct ipv4_hdr *ip_hdr, uint32_t src_addr,\n+\t\tuint32_t dst_addr, uint16_t pkt_data_len, uint8_t proto)\n+{\n+\tuint16_t pkt_len;\n+\tunaligned_uint16_t *ptr16;\n+\tuint32_t ip_cksum;\n+\n+\t/*\n+\t * Initialize IP header.\n+\t */\n+\tpkt_len = (uint16_t) (pkt_data_len + sizeof(struct ipv4_hdr));\n+\n+\tip_hdr->version_ihl = IP_VHL_DEF;\n+\tip_hdr->type_of_service = 0;\n+\tip_hdr->fragment_offset = 0;\n+\tip_hdr->time_to_live = IP_DEFTTL;\n+\tip_hdr->next_proto_id = proto;\n+\tip_hdr->packet_id = 0;\n+\tip_hdr->total_length = rte_cpu_to_be_16(pkt_len);\n+\tip_hdr->src_addr = rte_cpu_to_be_32(src_addr);\n+\tip_hdr->dst_addr = rte_cpu_to_be_32(dst_addr);\n+\n+\t/*\n+\t * Compute IP header checksum.\n+\t */\n+\tptr16 = (unaligned_uint16_t *)ip_hdr;\n+\tip_cksum = 0;\n+\tip_cksum += ptr16[0]; ip_cksum += ptr16[1];\n+\tip_cksum += ptr16[2]; ip_cksum += ptr16[3];\n+\tip_cksum += ptr16[4];\n+\tip_cksum += ptr16[6]; ip_cksum += ptr16[7];\n+\tip_cksum += ptr16[8]; ip_cksum += ptr16[9];\n \n+\t/*\n+\t * Reduce 32 bit checksum to 16 bits and complement it.\n+\t */\n+\tip_cksum = ((ip_cksum & 0xFFFF0000) >> 16) +\n+\t\t(ip_cksum & 0x0000FFFF);\n+\tip_cksum %= 65536;\n+\tip_cksum = (~ip_cksum) & 0x0000FFFF;\n+\tif (ip_cksum == 0)\n+\t\tip_cksum = 0xFFFF;\n+\tip_hdr->hdr_checksum = (uint16_t) ip_cksum;\n+\n+\treturn pkt_len;\n+}\n \n /*\n * The maximum number of segments per packet is used when creating\n@@ -283,3 +359,118 @@\n \n \treturn nb_pkt;\n }\n+\n+int\n+generate_packet_burst_proto(struct rte_mempool *mp,\n+\t\tstruct rte_mbuf **pkts_burst,\n+\t\tstruct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,\n+\t\tuint8_t ipv4, uint8_t proto, void *proto_hdr,\n+\t\tint nb_pkt_per_burst, uint8_t pkt_len, uint8_t nb_pkt_segs)\n+{\n+\tint i, nb_pkt = 0;\n+\tsize_t eth_hdr_size;\n+\n+\tstruct rte_mbuf *pkt_seg;\n+\tstruct rte_mbuf *pkt;\n+\n+\tfor (nb_pkt = 0; nb_pkt < nb_pkt_per_burst; nb_pkt++) {\n+\t\tpkt = rte_pktmbuf_alloc(mp);\n+\t\tif (pkt == NULL) {\n+nomore_mbuf:\n+\t\t\tif (nb_pkt == 0)\n+\t\t\t\treturn -1;\n+\t\t\tbreak;\n+\t\t}\n+\n+\t\tpkt->data_len = pkt_len;\n+\t\tpkt_seg = pkt;\n+\t\tfor (i = 1; i < nb_pkt_segs; i++) {\n+\t\t\tpkt_seg->next = rte_pktmbuf_alloc(mp);\n+\t\t\tif (pkt_seg->next == NULL) {\n+\t\t\t\tpkt->nb_segs = i;\n+\t\t\t\trte_pktmbuf_free(pkt);\n+\t\t\t\tgoto nomore_mbuf;\n+\t\t\t}\n+\t\t\tpkt_seg = pkt_seg->next;\n+\t\t\tpkt_seg->data_len = pkt_len;\n+\t\t}\n+\t\tpkt_seg->next = NULL; /* Last segment of packet. */\n+\n+\t\t/*\n+\t\t * Copy headers in first packet segment(s).\n+\t\t */\n+\t\tif (vlan_enabled)\n+\t\t\teth_hdr_size = sizeof(struct ether_hdr) +\n+\t\t\t\tsizeof(struct vlan_hdr);\n+\t\telse\n+\t\t\teth_hdr_size = sizeof(struct ether_hdr);\n+\n+\t\tcopy_buf_to_pkt(eth_hdr, eth_hdr_size, pkt, 0);\n+\n+\t\tif (ipv4) {\n+\t\t\tcopy_buf_to_pkt(ip_hdr, sizeof(struct ipv4_hdr), pkt,\n+\t\t\t\teth_hdr_size);\n+\t\t\tswitch (proto) {\n+\t\t\tcase IPPROTO_UDP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct udp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv4_hdr));\n+\t\t\t\tbreak;\n+\t\t\tcase IPPROTO_TCP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct tcp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv4_hdr));\n+\t\t\t\tbreak;\n+\t\t\tcase IPPROTO_SCTP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct sctp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv4_hdr));\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t} else {\n+\t\t\tcopy_buf_to_pkt(ip_hdr, sizeof(struct ipv6_hdr), pkt,\n+\t\t\t\teth_hdr_size);\n+\t\t\tswitch (proto) {\n+\t\t\tcase IPPROTO_UDP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct udp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv6_hdr));\n+\t\t\t\tbreak;\n+\t\t\tcase IPPROTO_TCP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct tcp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv6_hdr));\n+\t\t\t\tbreak;\n+\t\t\tcase IPPROTO_SCTP:\n+\t\t\t\tcopy_buf_to_pkt(proto_hdr,\n+\t\t\t\t\tsizeof(struct sctp_hdr), pkt,\n+\t\t\t\t\teth_hdr_size + sizeof(struct ipv6_hdr));\n+\t\t\t\tbreak;\n+\t\t\tdefault:\n+\t\t\t\tbreak;\n+\t\t\t}\n+\t\t}\n+\n+\t\t/*\n+\t\t * Complete first mbuf of packet and append it to the\n+\t\t * burst of packets to be transmitted.\n+\t\t */\n+\t\tpkt->nb_segs = nb_pkt_segs;\n+\t\tpkt->pkt_len = pkt_len;\n+\t\tpkt->l2_len = eth_hdr_size;\n+\n+\t\tif (ipv4) {\n+\t\t\tpkt->vlan_tci = ETHER_TYPE_IPv4;\n+\t\t\tpkt->l3_len = sizeof(struct ipv4_hdr);\n+\t\t} else {\n+\t\t\tpkt->vlan_tci = ETHER_TYPE_IPv6;\n+\t\t\tpkt->l3_len = sizeof(struct ipv6_hdr);\n+\t\t}\n+\n+\t\tpkts_burst[nb_pkt] = pkt;\n+\t}\n+\n+\treturn nb_pkt;\n+}\ndiff --git a/test/test/packet_burst_generator.h b/test/test/packet_burst_generator.h\nindex edc1044..3315bfa 100644\n--- a/test/test/packet_burst_generator.h\n+++ b/test/test/packet_burst_generator.h\n@@ -43,7 +43,8 @@\n #include <rte_arp.h>\n #include <rte_ip.h>\n #include <rte_udp.h>\n-\n+#include <rte_tcp.h>\n+#include <rte_sctp.h>\n \n #define IPV4_ADDR(a, b, c, d)(((a & 0xff) << 24) | ((b & 0xff) << 16) | \\\n \t\t((c & 0xff) << 8) | (d & 0xff))\n@@ -65,6 +66,13 @@\n initialize_udp_header(struct udp_hdr *udp_hdr, uint16_t src_port,\n \t\tuint16_t dst_port, uint16_t pkt_data_len);\n \n+uint16_t\n+initialize_tcp_header(struct tcp_hdr *tcp_hdr, uint16_t src_port,\n+\t\tuint16_t dst_port, uint16_t pkt_data_len);\n+\n+uint16_t\n+initialize_sctp_header(struct sctp_hdr *sctp_hdr, uint16_t src_port,\n+\t\tuint16_t dst_port, uint16_t pkt_data_len);\n \n uint16_t\n initialize_ipv6_header(struct ipv6_hdr *ip_hdr, uint8_t *src_addr,\n@@ -74,15 +82,25 @@\n initialize_ipv4_header(struct ipv4_hdr *ip_hdr, uint32_t src_addr,\n \t\tuint32_t dst_addr, uint16_t pkt_data_len);\n \n+uint16_t\n+initialize_ipv4_header_proto(struct ipv4_hdr *ip_hdr, uint32_t src_addr,\n+\t\tuint32_t dst_addr, uint16_t pkt_data_len, uint8_t proto);\n+\n int\n generate_packet_burst(struct rte_mempool *mp, struct rte_mbuf **pkts_burst,\n \t\tstruct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,\n \t\tuint8_t ipv4, struct udp_hdr *udp_hdr, int nb_pkt_per_burst,\n \t\tuint8_t pkt_len, uint8_t nb_pkt_segs);\n \n+int\n+generate_packet_burst_proto(struct rte_mempool *mp,\n+\t\tstruct rte_mbuf **pkts_burst,\n+\t\tstruct ether_hdr *eth_hdr, uint8_t vlan_enabled, void *ip_hdr,\n+\t\tuint8_t ipv4, uint8_t proto, void *proto_hdr,\n+\t\tint nb_pkt_per_burst, uint8_t pkt_len, uint8_t nb_pkt_segs);\n+\n #ifdef __cplusplus\n }\n #endif\n \n-\n #endif /* PACKET_BURST_GENERATOR_H_ */\n", "prefixes": [ "dpdk-dev", "v6", "3/4" ] }{ "id": 29424, "url": "