MCPcopy Create free account
hub / github.com/F-Stack/f-stack / setup_pkt_udp_ip_headers

Function setup_pkt_udp_ip_headers

dpdk/app/test-pmd/txonly.c:104–158  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

102}
103
104static void
105setup_pkt_udp_ip_headers(struct rte_ipv4_hdr *ip_hdr,
106 struct rte_udp_hdr *udp_hdr,
107 uint16_t pkt_data_len)
108{
109 uint16_t *ptr16;
110 uint32_t ip_cksum;
111 uint16_t pkt_len;
112
113 /*
114 * Initialize UDP header.
115 */
116 pkt_len = (uint16_t) (pkt_data_len + sizeof(struct rte_udp_hdr));
117 udp_hdr->src_port = rte_cpu_to_be_16(tx_udp_src_port);
118 udp_hdr->dst_port = rte_cpu_to_be_16(tx_udp_dst_port);
119 udp_hdr->dgram_len = RTE_CPU_TO_BE_16(pkt_len);
120 udp_hdr->dgram_cksum = 0; /* No UDP checksum. */
121
122 /*
123 * Initialize IP header.
124 */
125 pkt_len = (uint16_t) (pkt_len + sizeof(struct rte_ipv4_hdr));
126 ip_hdr->version_ihl = RTE_IPV4_VHL_DEF;
127 ip_hdr->type_of_service = 0;
128 ip_hdr->fragment_offset = 0;
129 ip_hdr->time_to_live = IP_DEFTTL;
130 ip_hdr->next_proto_id = IPPROTO_UDP;
131 ip_hdr->packet_id = 0;
132 ip_hdr->total_length = RTE_CPU_TO_BE_16(pkt_len);
133 ip_hdr->src_addr = rte_cpu_to_be_32(tx_ip_src_addr);
134 ip_hdr->dst_addr = rte_cpu_to_be_32(tx_ip_dst_addr);
135
136 /*
137 * Compute IP header checksum.
138 */
139 ptr16 = (unaligned_uint16_t*) ip_hdr;
140 ip_cksum = 0;
141 ip_cksum += ptr16[0]; ip_cksum += ptr16[1];
142 ip_cksum += ptr16[2]; ip_cksum += ptr16[3];
143 ip_cksum += ptr16[4];
144 ip_cksum += ptr16[6]; ip_cksum += ptr16[7];
145 ip_cksum += ptr16[8]; ip_cksum += ptr16[9];
146
147 /*
148 * Reduce 32 bit checksum to 16 bits and complement it.
149 */
150 ip_cksum = ((ip_cksum & 0xFFFF0000) >> 16) +
151 (ip_cksum & 0x0000FFFF);
152 if (ip_cksum > 65535)
153 ip_cksum -= 65535;
154 ip_cksum = (~ip_cksum) & 0x0000FFFF;
155 if (ip_cksum == 0)
156 ip_cksum = 0xFFFF;
157 ip_hdr->hdr_checksum = (uint16_t) ip_cksum;
158}
159
160static inline void
161update_pkt_header(struct rte_mbuf *pkt, uint32_t total_pkt_len)

Callers 1

tx_only_beginFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected