xref: /linux/tools/testing/selftests/net/proc_net_pktgen.c (revision 03544faad76194f70c351aeb306c8aca5809089f)
1*03544faaSPeter Seiderer // SPDX-License-Identifier: GPL-2.0
2*03544faaSPeter Seiderer /*
3*03544faaSPeter Seiderer  * proc_net_pktgen: kselftest for /proc/net/pktgen interface
4*03544faaSPeter Seiderer  *
5*03544faaSPeter Seiderer  * Copyright (c) 2025 Peter Seiderer <ps.report@gmx.net>
6*03544faaSPeter Seiderer  *
7*03544faaSPeter Seiderer  */
8*03544faaSPeter Seiderer #include <errno.h>
9*03544faaSPeter Seiderer #include <fcntl.h>
10*03544faaSPeter Seiderer #include <stdlib.h>
11*03544faaSPeter Seiderer #include <unistd.h>
12*03544faaSPeter Seiderer 
13*03544faaSPeter Seiderer #include "../kselftest_harness.h"
14*03544faaSPeter Seiderer 
15*03544faaSPeter Seiderer static const char ctrl_cmd_stop[] = "stop";
16*03544faaSPeter Seiderer static const char ctrl_cmd_start[] = "start";
17*03544faaSPeter Seiderer static const char ctrl_cmd_reset[] = "reset";
18*03544faaSPeter Seiderer 
19*03544faaSPeter Seiderer static const char wrong_ctrl_cmd[] = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
20*03544faaSPeter Seiderer 
21*03544faaSPeter Seiderer static const char thr_cmd_add_loopback_0[] = "add_device lo@0";
22*03544faaSPeter Seiderer static const char thr_cmd_rm_loopback_0[] = "rem_device_all";
23*03544faaSPeter Seiderer 
24*03544faaSPeter Seiderer static const char wrong_thr_cmd[] = "forsureawrongcommand";
25*03544faaSPeter Seiderer static const char legacy_thr_cmd[] = "max_before_softirq";
26*03544faaSPeter Seiderer 
27*03544faaSPeter Seiderer static const char wrong_dev_cmd[] = "forsurewrongcommand";
28*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_0[] = "min_pkt_size";
29*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_1[] = "min_pkt_size ";
30*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_2[] = "min_pkt_size 0";
31*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_3[] = "min_pkt_size 1";
32*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_4[] = "min_pkt_size 100";
33*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_5[] = "min_pkt_size=1001";
34*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_6[] = "min_pkt_size =2002";
35*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_7[] = "min_pkt_size= 3003";
36*03544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_8[] = "min_pkt_size = 4004";
37*03544faaSPeter Seiderer static const char dev_cmd_max_pkt_size_0[] = "max_pkt_size 200";
38*03544faaSPeter Seiderer static const char dev_cmd_pkt_size_0[] = "pkt_size 300";
39*03544faaSPeter Seiderer static const char dev_cmd_imix_weights_0[] = "imix_weights 0,7 576,4 1500,1";
40*03544faaSPeter Seiderer static const char dev_cmd_imix_weights_1[] = "imix_weights 101,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20";
41*03544faaSPeter Seiderer static const char dev_cmd_imix_weights_2[] = "imix_weights 100,1 102,2 103,3 104,4 105,5 106,6 107,7 108,8 109,9 110,10 111,11 112,12 113,13 114,14 115,15 116,16 117,17 118,18 119,19 120,20 121,21";
42*03544faaSPeter Seiderer static const char dev_cmd_debug_0[] = "debug 1";
43*03544faaSPeter Seiderer static const char dev_cmd_debug_1[] = "debug 0";
44*03544faaSPeter Seiderer static const char dev_cmd_frags_0[] = "frags 100";
45*03544faaSPeter Seiderer static const char dev_cmd_delay_0[] = "delay 100";
46*03544faaSPeter Seiderer static const char dev_cmd_delay_1[] = "delay 2147483647";
47*03544faaSPeter Seiderer static const char dev_cmd_rate_0[] = "rate 0";
48*03544faaSPeter Seiderer static const char dev_cmd_rate_1[] = "rate 100";
49*03544faaSPeter Seiderer static const char dev_cmd_ratep_0[] = "ratep 0";
50*03544faaSPeter Seiderer static const char dev_cmd_ratep_1[] = "ratep 200";
51*03544faaSPeter Seiderer static const char dev_cmd_udp_src_min_0[] = "udp_src_min 1";
52*03544faaSPeter Seiderer static const char dev_cmd_udp_dst_min_0[] = "udp_dst_min 2";
53*03544faaSPeter Seiderer static const char dev_cmd_udp_src_max_0[] = "udp_src_max 3";
54*03544faaSPeter Seiderer static const char dev_cmd_udp_dst_max_0[] = "udp_dst_max 4";
55*03544faaSPeter Seiderer static const char dev_cmd_clone_skb_0[] = "clone_skb 1";
56*03544faaSPeter Seiderer static const char dev_cmd_clone_skb_1[] = "clone_skb 0";
57*03544faaSPeter Seiderer static const char dev_cmd_count_0[] = "count 100";
58*03544faaSPeter Seiderer static const char dev_cmd_src_mac_count_0[] = "src_mac_count 100";
59*03544faaSPeter Seiderer static const char dev_cmd_dst_mac_count_0[] = "dst_mac_count 100";
60*03544faaSPeter Seiderer static const char dev_cmd_burst_0[] = "burst 0";
61*03544faaSPeter Seiderer static const char dev_cmd_node_0[] = "node 100";
62*03544faaSPeter Seiderer static const char dev_cmd_xmit_mode_0[] = "xmit_mode start_xmit";
63*03544faaSPeter Seiderer static const char dev_cmd_xmit_mode_1[] = "xmit_mode netif_receive";
64*03544faaSPeter Seiderer static const char dev_cmd_xmit_mode_2[] = "xmit_mode queue_xmit";
65*03544faaSPeter Seiderer static const char dev_cmd_xmit_mode_3[] = "xmit_mode nonsense";
66*03544faaSPeter Seiderer static const char dev_cmd_flag_0[] = "flag UDPCSUM";
67*03544faaSPeter Seiderer static const char dev_cmd_flag_1[] = "flag !UDPCSUM";
68*03544faaSPeter Seiderer static const char dev_cmd_flag_2[] = "flag nonsense";
69*03544faaSPeter Seiderer static const char dev_cmd_dst_min_0[] = "dst_min 101.102.103.104";
70*03544faaSPeter Seiderer static const char dev_cmd_dst_0[] = "dst 101.102.103.104";
71*03544faaSPeter Seiderer static const char dev_cmd_dst_max_0[] = "dst_max 201.202.203.204";
72*03544faaSPeter Seiderer static const char dev_cmd_dst6_0[] = "dst6 2001:db38:1234:0000:0000:0000:0000:0000";
73*03544faaSPeter Seiderer static const char dev_cmd_dst6_min_0[] = "dst6_min 2001:db8:1234:0000:0000:0000:0000:0000";
74*03544faaSPeter Seiderer static const char dev_cmd_dst6_max_0[] = "dst6_max 2001:db8:1234:0000:0000:0000:0000:0000";
75*03544faaSPeter Seiderer static const char dev_cmd_src6_0[] = "src6 2001:db38:1234:0000:0000:0000:0000:0000";
76*03544faaSPeter Seiderer static const char dev_cmd_src_min_0[] = "src_min 101.102.103.104";
77*03544faaSPeter Seiderer static const char dev_cmd_src_max_0[] = "src_max 201.202.203.204";
78*03544faaSPeter Seiderer static const char dev_cmd_dst_mac_0[] = "dst_mac 01:02:03:04:05:06";
79*03544faaSPeter Seiderer static const char dev_cmd_src_mac_0[] = "src_mac 11:12:13:14:15:16";
80*03544faaSPeter Seiderer static const char dev_cmd_clear_counters_0[] = "clear_counters";
81*03544faaSPeter Seiderer static const char dev_cmd_flows_0[] = "flows 100";
82*03544faaSPeter Seiderer static const char dev_cmd_spi_0[] = "spi 100";
83*03544faaSPeter Seiderer static const char dev_cmd_flowlen_0[] = "flowlen 100";
84*03544faaSPeter Seiderer static const char dev_cmd_queue_map_min_0[] = "queue_map_min 1";
85*03544faaSPeter Seiderer static const char dev_cmd_queue_map_max_0[] = "queue_map_max 2";
86*03544faaSPeter Seiderer static const char dev_cmd_mpls_0[] = "mpls 00000001";
87*03544faaSPeter Seiderer static const char dev_cmd_mpls_1[] = "mpls 00000001,000000f2";
88*03544faaSPeter Seiderer static const char dev_cmd_mpls_2[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f";
89*03544faaSPeter Seiderer static const char dev_cmd_mpls_3[] = "mpls 00000f00,00000f01,00000f02,00000f03,00000f04,00000f05,00000f06,00000f07,00000f08,00000f09,00000f0a,00000f0b,00000f0c,00000f0d,00000f0e,00000f0f,00000f10";
90*03544faaSPeter Seiderer static const char dev_cmd_vlan_id_0[] = "vlan_id 1";
91*03544faaSPeter Seiderer static const char dev_cmd_vlan_p_0[] = "vlan_p 1";
92*03544faaSPeter Seiderer static const char dev_cmd_vlan_cfi_0[] = "vlan_cfi 1";
93*03544faaSPeter Seiderer static const char dev_cmd_vlan_id_1[] = "vlan_id 4096";
94*03544faaSPeter Seiderer static const char dev_cmd_svlan_id_0[] = "svlan_id 1";
95*03544faaSPeter Seiderer static const char dev_cmd_svlan_p_0[] = "svlan_p 1";
96*03544faaSPeter Seiderer static const char dev_cmd_svlan_cfi_0[] = "svlan_cfi 1";
97*03544faaSPeter Seiderer static const char dev_cmd_svlan_id_1[] = "svlan_id 4096";
98*03544faaSPeter Seiderer static const char dev_cmd_tos_0[] = "tos 0";
99*03544faaSPeter Seiderer static const char dev_cmd_tos_1[] = "tos 0f";
100*03544faaSPeter Seiderer static const char dev_cmd_tos_2[] = "tos 0ff";
101*03544faaSPeter Seiderer static const char dev_cmd_traffic_class_0[] = "traffic_class f0";
102*03544faaSPeter Seiderer static const char dev_cmd_skb_priority_0[] = "skb_priority 999";
103*03544faaSPeter Seiderer 
104*03544faaSPeter Seiderer FIXTURE(proc_net_pktgen) {
105*03544faaSPeter Seiderer 	int ctrl_fd;
106*03544faaSPeter Seiderer 	int thr_fd;
107*03544faaSPeter Seiderer 	int dev_fd;
108*03544faaSPeter Seiderer };
109*03544faaSPeter Seiderer 
110*03544faaSPeter Seiderer FIXTURE_SETUP(proc_net_pktgen) {
111*03544faaSPeter Seiderer 	int r;
112*03544faaSPeter Seiderer 	ssize_t len;
113*03544faaSPeter Seiderer 
114*03544faaSPeter Seiderer 	r = system("modprobe pktgen");
115*03544faaSPeter Seiderer 	ASSERT_EQ(r, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?");
116*03544faaSPeter Seiderer 
117*03544faaSPeter Seiderer 	self->ctrl_fd = open("/proc/net/pktgen/pgctrl", O_RDWR);
118*03544faaSPeter Seiderer 	ASSERT_GE(self->ctrl_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?");
119*03544faaSPeter Seiderer 
120*03544faaSPeter Seiderer 	self->thr_fd = open("/proc/net/pktgen/kpktgend_0", O_RDWR);
121*03544faaSPeter Seiderer 	ASSERT_GE(self->thr_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?");
122*03544faaSPeter Seiderer 
123*03544faaSPeter Seiderer 	len = write(self->thr_fd, thr_cmd_add_loopback_0, sizeof(thr_cmd_add_loopback_0));
124*03544faaSPeter Seiderer 	ASSERT_EQ(len, sizeof(thr_cmd_add_loopback_0)) TH_LOG("device lo@0 already registered?");
125*03544faaSPeter Seiderer 
126*03544faaSPeter Seiderer 	self->dev_fd = open("/proc/net/pktgen/lo@0", O_RDWR);
127*03544faaSPeter Seiderer 	ASSERT_GE(self->dev_fd, 0) TH_LOG("device entry for lo@0 missing?");
128*03544faaSPeter Seiderer }
129*03544faaSPeter Seiderer 
130*03544faaSPeter Seiderer FIXTURE_TEARDOWN(proc_net_pktgen) {
131*03544faaSPeter Seiderer 	int ret;
132*03544faaSPeter Seiderer 	ssize_t len;
133*03544faaSPeter Seiderer 
134*03544faaSPeter Seiderer 	ret = close(self->dev_fd);
135*03544faaSPeter Seiderer 	EXPECT_EQ(ret, 0);
136*03544faaSPeter Seiderer 
137*03544faaSPeter Seiderer 	len = write(self->thr_fd, thr_cmd_rm_loopback_0, sizeof(thr_cmd_rm_loopback_0));
138*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(thr_cmd_rm_loopback_0));
139*03544faaSPeter Seiderer 
140*03544faaSPeter Seiderer 	ret = close(self->thr_fd);
141*03544faaSPeter Seiderer 	EXPECT_EQ(ret, 0);
142*03544faaSPeter Seiderer 
143*03544faaSPeter Seiderer 	ret = close(self->ctrl_fd);
144*03544faaSPeter Seiderer 	EXPECT_EQ(ret, 0);
145*03544faaSPeter Seiderer }
146*03544faaSPeter Seiderer 
147*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_ctrl_cmd) {
148*03544faaSPeter Seiderer 	for (int i = 0; i <= sizeof(wrong_ctrl_cmd); i++) {
149*03544faaSPeter Seiderer 		ssize_t len;
150*03544faaSPeter Seiderer 
151*03544faaSPeter Seiderer 		len = write(self->ctrl_fd, wrong_ctrl_cmd, i);
152*03544faaSPeter Seiderer 		EXPECT_EQ(len, -1);
153*03544faaSPeter Seiderer 		EXPECT_EQ(errno, EINVAL);
154*03544faaSPeter Seiderer 	}
155*03544faaSPeter Seiderer }
156*03544faaSPeter Seiderer 
157*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, ctrl_cmd) {
158*03544faaSPeter Seiderer 	ssize_t len;
159*03544faaSPeter Seiderer 
160*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop));
161*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_stop));
162*03544faaSPeter Seiderer 
163*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop) - 1);
164*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_stop) - 1);
165*03544faaSPeter Seiderer 
166*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start));
167*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_start));
168*03544faaSPeter Seiderer 
169*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start) - 1);
170*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_start) - 1);
171*03544faaSPeter Seiderer 
172*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset));
173*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_reset));
174*03544faaSPeter Seiderer 
175*03544faaSPeter Seiderer 	len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset) - 1);
176*03544faaSPeter Seiderer 	EXPECT_EQ(len,	sizeof(ctrl_cmd_reset) - 1);
177*03544faaSPeter Seiderer }
178*03544faaSPeter Seiderer 
179*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_thr_cmd) {
180*03544faaSPeter Seiderer 	for (int i = 0; i <= sizeof(wrong_thr_cmd); i++) {
181*03544faaSPeter Seiderer 		ssize_t len;
182*03544faaSPeter Seiderer 
183*03544faaSPeter Seiderer 		len = write(self->thr_fd, wrong_thr_cmd, i);
184*03544faaSPeter Seiderer 		EXPECT_EQ(len, -1);
185*03544faaSPeter Seiderer 		EXPECT_EQ(errno, EINVAL);
186*03544faaSPeter Seiderer 	}
187*03544faaSPeter Seiderer }
188*03544faaSPeter Seiderer 
189*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, legacy_thr_cmd) {
190*03544faaSPeter Seiderer 	for (int i = 0; i <= sizeof(legacy_thr_cmd); i++) {
191*03544faaSPeter Seiderer 		ssize_t len;
192*03544faaSPeter Seiderer 
193*03544faaSPeter Seiderer 		len = write(self->thr_fd, legacy_thr_cmd, i);
194*03544faaSPeter Seiderer 		if (i < (sizeof(legacy_thr_cmd) - 1)) {
195*03544faaSPeter Seiderer 			/* incomplete command string */
196*03544faaSPeter Seiderer 			EXPECT_EQ(len, -1);
197*03544faaSPeter Seiderer 			EXPECT_EQ(errno, EINVAL);
198*03544faaSPeter Seiderer 		} else {
199*03544faaSPeter Seiderer 			/* complete command string without/with trailing '\0' */
200*03544faaSPeter Seiderer 			EXPECT_EQ(len, i);
201*03544faaSPeter Seiderer 		}
202*03544faaSPeter Seiderer 	}
203*03544faaSPeter Seiderer }
204*03544faaSPeter Seiderer 
205*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_dev_cmd) {
206*03544faaSPeter Seiderer 	for (int i = 0; i <= sizeof(wrong_dev_cmd); i++) {
207*03544faaSPeter Seiderer 		ssize_t len;
208*03544faaSPeter Seiderer 
209*03544faaSPeter Seiderer 		len = write(self->dev_fd, wrong_dev_cmd, i);
210*03544faaSPeter Seiderer 		EXPECT_EQ(len, -1);
211*03544faaSPeter Seiderer 		EXPECT_EQ(errno, EINVAL);
212*03544faaSPeter Seiderer 	}
213*03544faaSPeter Seiderer }
214*03544faaSPeter Seiderer 
215*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_min_pkt_size) {
216*03544faaSPeter Seiderer 	ssize_t len;
217*03544faaSPeter Seiderer 
218*03544faaSPeter Seiderer 	/* with trailing '\0' */
219*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0));
220*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0));
221*03544faaSPeter Seiderer 
222*03544faaSPeter Seiderer 	/* without trailing '\0' */
223*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0) - 1);
224*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0) - 1);
225*03544faaSPeter Seiderer 
226*03544faaSPeter Seiderer 	/* with trailing '\0' */
227*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1));
228*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1));
229*03544faaSPeter Seiderer 
230*03544faaSPeter Seiderer 	/* without trailing '\0' */
231*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1) - 1);
232*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1) - 1);
233*03544faaSPeter Seiderer 
234*03544faaSPeter Seiderer 	/* with trailing '\0' */
235*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2));
236*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2));
237*03544faaSPeter Seiderer 
238*03544faaSPeter Seiderer 	/* without trailing '\0' */
239*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2) - 1);
240*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2) - 1);
241*03544faaSPeter Seiderer 
242*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_3, sizeof(dev_cmd_min_pkt_size_3));
243*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_3));
244*03544faaSPeter Seiderer 
245*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_4, sizeof(dev_cmd_min_pkt_size_4));
246*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_4));
247*03544faaSPeter Seiderer 
248*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_5, sizeof(dev_cmd_min_pkt_size_5));
249*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_5));
250*03544faaSPeter Seiderer 
251*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_6, sizeof(dev_cmd_min_pkt_size_6));
252*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_6));
253*03544faaSPeter Seiderer 
254*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_7, sizeof(dev_cmd_min_pkt_size_7));
255*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_7));
256*03544faaSPeter Seiderer 
257*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_min_pkt_size_8, sizeof(dev_cmd_min_pkt_size_8));
258*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_8));
259*03544faaSPeter Seiderer }
260*03544faaSPeter Seiderer 
261*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_max_pkt_size) {
262*03544faaSPeter Seiderer 	ssize_t len;
263*03544faaSPeter Seiderer 
264*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_max_pkt_size_0, sizeof(dev_cmd_max_pkt_size_0));
265*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_max_pkt_size_0));
266*03544faaSPeter Seiderer }
267*03544faaSPeter Seiderer 
268*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_pkt_size) {
269*03544faaSPeter Seiderer 	ssize_t len;
270*03544faaSPeter Seiderer 
271*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_pkt_size_0, sizeof(dev_cmd_pkt_size_0));
272*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_pkt_size_0));
273*03544faaSPeter Seiderer }
274*03544faaSPeter Seiderer 
275*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_imix_weights) {
276*03544faaSPeter Seiderer 	ssize_t len;
277*03544faaSPeter Seiderer 
278*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_imix_weights_0, sizeof(dev_cmd_imix_weights_0));
279*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_0));
280*03544faaSPeter Seiderer 
281*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_imix_weights_1, sizeof(dev_cmd_imix_weights_1));
282*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_1));
283*03544faaSPeter Seiderer 
284*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_imix_weights_2, sizeof(dev_cmd_imix_weights_2));
285*03544faaSPeter Seiderer 	EXPECT_EQ(len, -1);
286*03544faaSPeter Seiderer 	EXPECT_EQ(errno, E2BIG);
287*03544faaSPeter Seiderer }
288*03544faaSPeter Seiderer 
289*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_debug) {
290*03544faaSPeter Seiderer 	ssize_t len;
291*03544faaSPeter Seiderer 
292*03544faaSPeter Seiderer 	/* debug on */
293*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_debug_0, sizeof(dev_cmd_debug_0));
294*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_debug_0));
295*03544faaSPeter Seiderer 
296*03544faaSPeter Seiderer 	/* debug off */
297*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_debug_1, sizeof(dev_cmd_debug_1));
298*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_debug_1));
299*03544faaSPeter Seiderer }
300*03544faaSPeter Seiderer 
301*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_frags) {
302*03544faaSPeter Seiderer 	ssize_t len;
303*03544faaSPeter Seiderer 
304*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_frags_0, sizeof(dev_cmd_frags_0));
305*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_frags_0));
306*03544faaSPeter Seiderer }
307*03544faaSPeter Seiderer 
308*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_delay) {
309*03544faaSPeter Seiderer 	ssize_t len;
310*03544faaSPeter Seiderer 
311*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_delay_0, sizeof(dev_cmd_delay_0));
312*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_delay_0));
313*03544faaSPeter Seiderer 
314*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_delay_1, sizeof(dev_cmd_delay_1));
315*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_delay_1));
316*03544faaSPeter Seiderer }
317*03544faaSPeter Seiderer 
318*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_rate) {
319*03544faaSPeter Seiderer 	ssize_t len;
320*03544faaSPeter Seiderer 
321*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_rate_0, sizeof(dev_cmd_rate_0));
322*03544faaSPeter Seiderer 	EXPECT_EQ(len, -1);
323*03544faaSPeter Seiderer 	EXPECT_EQ(errno, EINVAL);
324*03544faaSPeter Seiderer 
325*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_rate_1, sizeof(dev_cmd_rate_1));
326*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_rate_1));
327*03544faaSPeter Seiderer }
328*03544faaSPeter Seiderer 
329*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_ratep) {
330*03544faaSPeter Seiderer 	ssize_t len;
331*03544faaSPeter Seiderer 
332*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_ratep_0, sizeof(dev_cmd_ratep_0));
333*03544faaSPeter Seiderer 	EXPECT_EQ(len, -1);
334*03544faaSPeter Seiderer 	EXPECT_EQ(errno, EINVAL);
335*03544faaSPeter Seiderer 
336*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_ratep_1, sizeof(dev_cmd_ratep_1));
337*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_ratep_1));
338*03544faaSPeter Seiderer }
339*03544faaSPeter Seiderer 
340*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_src_min) {
341*03544faaSPeter Seiderer 	ssize_t len;
342*03544faaSPeter Seiderer 
343*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_udp_src_min_0, sizeof(dev_cmd_udp_src_min_0));
344*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_udp_src_min_0));
345*03544faaSPeter Seiderer }
346*03544faaSPeter Seiderer 
347*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_dst_min) {
348*03544faaSPeter Seiderer 	ssize_t len;
349*03544faaSPeter Seiderer 
350*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_udp_dst_min_0, sizeof(dev_cmd_udp_dst_min_0));
351*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_min_0));
352*03544faaSPeter Seiderer }
353*03544faaSPeter Seiderer 
354*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_src_max) {
355*03544faaSPeter Seiderer 	ssize_t len;
356*03544faaSPeter Seiderer 
357*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_udp_src_max_0, sizeof(dev_cmd_udp_src_max_0));
358*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_udp_src_max_0));
359*03544faaSPeter Seiderer }
360*03544faaSPeter Seiderer 
361*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_dst_max) {
362*03544faaSPeter Seiderer 	ssize_t len;
363*03544faaSPeter Seiderer 
364*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_udp_dst_max_0, sizeof(dev_cmd_udp_dst_max_0));
365*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_max_0));
366*03544faaSPeter Seiderer }
367*03544faaSPeter Seiderer 
368*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_clone_skb) {
369*03544faaSPeter Seiderer 	ssize_t len;
370*03544faaSPeter Seiderer 
371*03544faaSPeter Seiderer 	/* clone_skb on (gives EOPNOTSUPP on lo device) */
372*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_clone_skb_0, sizeof(dev_cmd_clone_skb_0));
373*03544faaSPeter Seiderer 	EXPECT_EQ(len, -1);
374*03544faaSPeter Seiderer 	EXPECT_EQ(errno, EOPNOTSUPP);
375*03544faaSPeter Seiderer 
376*03544faaSPeter Seiderer 	/* clone_skb off */
377*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_clone_skb_1, sizeof(dev_cmd_clone_skb_1));
378*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_clone_skb_1));
379*03544faaSPeter Seiderer }
380*03544faaSPeter Seiderer 
381*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_count) {
382*03544faaSPeter Seiderer 	ssize_t len;
383*03544faaSPeter Seiderer 
384*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_count_0, sizeof(dev_cmd_count_0));
385*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_count_0));
386*03544faaSPeter Seiderer }
387*03544faaSPeter Seiderer 
388*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_mac_count) {
389*03544faaSPeter Seiderer 	ssize_t len;
390*03544faaSPeter Seiderer 
391*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_src_mac_count_0, sizeof(dev_cmd_src_mac_count_0));
392*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_src_mac_count_0));
393*03544faaSPeter Seiderer }
394*03544faaSPeter Seiderer 
395*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_mac_count) {
396*03544faaSPeter Seiderer 	ssize_t len;
397*03544faaSPeter Seiderer 
398*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst_mac_count_0, sizeof(dev_cmd_dst_mac_count_0));
399*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_count_0));
400*03544faaSPeter Seiderer }
401*03544faaSPeter Seiderer 
402*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_burst) {
403*03544faaSPeter Seiderer 	ssize_t len;
404*03544faaSPeter Seiderer 
405*03544faaSPeter Seiderer 	/* burst off */
406*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_burst_0, sizeof(dev_cmd_burst_0));
407*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_burst_0));
408*03544faaSPeter Seiderer }
409*03544faaSPeter Seiderer 
410*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_node) {
411*03544faaSPeter Seiderer 	ssize_t len;
412*03544faaSPeter Seiderer 
413*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_node_0, sizeof(dev_cmd_node_0));
414*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_node_0));
415*03544faaSPeter Seiderer }
416*03544faaSPeter Seiderer 
417*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_xmit_mode) {
418*03544faaSPeter Seiderer 	ssize_t len;
419*03544faaSPeter Seiderer 
420*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_xmit_mode_0, sizeof(dev_cmd_xmit_mode_0));
421*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_0));
422*03544faaSPeter Seiderer 
423*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_xmit_mode_1, sizeof(dev_cmd_xmit_mode_1));
424*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_1));
425*03544faaSPeter Seiderer 
426*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_xmit_mode_2, sizeof(dev_cmd_xmit_mode_2));
427*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_2));
428*03544faaSPeter Seiderer 
429*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_xmit_mode_3, sizeof(dev_cmd_xmit_mode_3));
430*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_3));
431*03544faaSPeter Seiderer }
432*03544faaSPeter Seiderer 
433*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flag) {
434*03544faaSPeter Seiderer 	ssize_t len;
435*03544faaSPeter Seiderer 
436*03544faaSPeter Seiderer 	/* flag UDPCSUM on */
437*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_flag_0, sizeof(dev_cmd_flag_0));
438*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_flag_0));
439*03544faaSPeter Seiderer 
440*03544faaSPeter Seiderer 	/* flag UDPCSUM off */
441*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_flag_1, sizeof(dev_cmd_flag_1));
442*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_flag_1));
443*03544faaSPeter Seiderer 
444*03544faaSPeter Seiderer 	/* flag invalid */
445*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_flag_2, sizeof(dev_cmd_flag_2));
446*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_flag_2));
447*03544faaSPeter Seiderer }
448*03544faaSPeter Seiderer 
449*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_min) {
450*03544faaSPeter Seiderer 	ssize_t len;
451*03544faaSPeter Seiderer 
452*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst_min_0, sizeof(dev_cmd_dst_min_0));
453*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst_min_0));
454*03544faaSPeter Seiderer }
455*03544faaSPeter Seiderer 
456*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst) {
457*03544faaSPeter Seiderer 	ssize_t len;
458*03544faaSPeter Seiderer 
459*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst_0, sizeof(dev_cmd_dst_0));
460*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst_0));
461*03544faaSPeter Seiderer }
462*03544faaSPeter Seiderer 
463*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_max) {
464*03544faaSPeter Seiderer 	ssize_t len;
465*03544faaSPeter Seiderer 
466*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst_max_0, sizeof(dev_cmd_dst_max_0));
467*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst_max_0));
468*03544faaSPeter Seiderer }
469*03544faaSPeter Seiderer 
470*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6) {
471*03544faaSPeter Seiderer 	ssize_t len;
472*03544faaSPeter Seiderer 
473*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst6_0, sizeof(dev_cmd_dst6_0));
474*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst6_0));
475*03544faaSPeter Seiderer }
476*03544faaSPeter Seiderer 
477*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6_min) {
478*03544faaSPeter Seiderer 	ssize_t len;
479*03544faaSPeter Seiderer 
480*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst6_min_0, sizeof(dev_cmd_dst6_min_0));
481*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst6_min_0));
482*03544faaSPeter Seiderer }
483*03544faaSPeter Seiderer 
484*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6_max) {
485*03544faaSPeter Seiderer 	ssize_t len;
486*03544faaSPeter Seiderer 
487*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst6_max_0, sizeof(dev_cmd_dst6_max_0));
488*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst6_max_0));
489*03544faaSPeter Seiderer }
490*03544faaSPeter Seiderer 
491*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src6) {
492*03544faaSPeter Seiderer 	ssize_t len;
493*03544faaSPeter Seiderer 
494*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_src6_0, sizeof(dev_cmd_src6_0));
495*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_src6_0));
496*03544faaSPeter Seiderer }
497*03544faaSPeter Seiderer 
498*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_min) {
499*03544faaSPeter Seiderer 	ssize_t len;
500*03544faaSPeter Seiderer 
501*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_src_min_0, sizeof(dev_cmd_src_min_0));
502*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_src_min_0));
503*03544faaSPeter Seiderer }
504*03544faaSPeter Seiderer 
505*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_max) {
506*03544faaSPeter Seiderer 	ssize_t len;
507*03544faaSPeter Seiderer 
508*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_src_max_0, sizeof(dev_cmd_src_max_0));
509*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_src_max_0));
510*03544faaSPeter Seiderer }
511*03544faaSPeter Seiderer 
512*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_mac) {
513*03544faaSPeter Seiderer 	ssize_t len;
514*03544faaSPeter Seiderer 
515*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_dst_mac_0, sizeof(dev_cmd_dst_mac_0));
516*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_0));
517*03544faaSPeter Seiderer }
518*03544faaSPeter Seiderer 
519*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_mac) {
520*03544faaSPeter Seiderer 	ssize_t len;
521*03544faaSPeter Seiderer 
522*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_src_mac_0, sizeof(dev_cmd_src_mac_0));
523*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_src_mac_0));
524*03544faaSPeter Seiderer }
525*03544faaSPeter Seiderer 
526*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_clear_counters) {
527*03544faaSPeter Seiderer 	ssize_t len;
528*03544faaSPeter Seiderer 
529*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_clear_counters_0, sizeof(dev_cmd_clear_counters_0));
530*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_clear_counters_0));
531*03544faaSPeter Seiderer }
532*03544faaSPeter Seiderer 
533*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flows) {
534*03544faaSPeter Seiderer 	ssize_t len;
535*03544faaSPeter Seiderer 
536*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_flows_0, sizeof(dev_cmd_flows_0));
537*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_flows_0));
538*03544faaSPeter Seiderer }
539*03544faaSPeter Seiderer 
540*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_spi) {
541*03544faaSPeter Seiderer 	ssize_t len;
542*03544faaSPeter Seiderer 
543*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_spi_0, sizeof(dev_cmd_spi_0));
544*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_spi_0)) TH_LOG("CONFIG_XFRM not enabled?");
545*03544faaSPeter Seiderer }
546*03544faaSPeter Seiderer 
547*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flowlen) {
548*03544faaSPeter Seiderer 	ssize_t len;
549*03544faaSPeter Seiderer 
550*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_flowlen_0, sizeof(dev_cmd_flowlen_0));
551*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_flowlen_0));
552*03544faaSPeter Seiderer }
553*03544faaSPeter Seiderer 
554*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_queue_map_min) {
555*03544faaSPeter Seiderer 	ssize_t len;
556*03544faaSPeter Seiderer 
557*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_queue_map_min_0, sizeof(dev_cmd_queue_map_min_0));
558*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_queue_map_min_0));
559*03544faaSPeter Seiderer }
560*03544faaSPeter Seiderer 
561*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_queue_map_max) {
562*03544faaSPeter Seiderer 	ssize_t len;
563*03544faaSPeter Seiderer 
564*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_queue_map_max_0, sizeof(dev_cmd_queue_map_max_0));
565*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_queue_map_max_0));
566*03544faaSPeter Seiderer }
567*03544faaSPeter Seiderer 
568*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_mpls) {
569*03544faaSPeter Seiderer 	ssize_t len;
570*03544faaSPeter Seiderer 
571*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_mpls_0, sizeof(dev_cmd_mpls_0));
572*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_mpls_0));
573*03544faaSPeter Seiderer 
574*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_mpls_1, sizeof(dev_cmd_mpls_1));
575*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_mpls_1));
576*03544faaSPeter Seiderer 
577*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_mpls_2, sizeof(dev_cmd_mpls_2));
578*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_mpls_2));
579*03544faaSPeter Seiderer 
580*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_mpls_3, sizeof(dev_cmd_mpls_3));
581*03544faaSPeter Seiderer 	EXPECT_EQ(len, -1);
582*03544faaSPeter Seiderer 	EXPECT_EQ(errno, E2BIG);
583*03544faaSPeter Seiderer }
584*03544faaSPeter Seiderer 
585*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_vlan_id) {
586*03544faaSPeter Seiderer 	ssize_t len;
587*03544faaSPeter Seiderer 
588*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_vlan_id_0, sizeof(dev_cmd_vlan_id_0));
589*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_0));
590*03544faaSPeter Seiderer 
591*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_vlan_p_0, sizeof(dev_cmd_vlan_p_0));
592*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_vlan_p_0));
593*03544faaSPeter Seiderer 
594*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_vlan_cfi_0, sizeof(dev_cmd_vlan_cfi_0));
595*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_vlan_cfi_0));
596*03544faaSPeter Seiderer 
597*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_vlan_id_1, sizeof(dev_cmd_vlan_id_1));
598*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_1));
599*03544faaSPeter Seiderer }
600*03544faaSPeter Seiderer 
601*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_svlan_id) {
602*03544faaSPeter Seiderer 	ssize_t len;
603*03544faaSPeter Seiderer 
604*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_svlan_id_0, sizeof(dev_cmd_svlan_id_0));
605*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_0));
606*03544faaSPeter Seiderer 
607*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_svlan_p_0, sizeof(dev_cmd_svlan_p_0));
608*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_svlan_p_0));
609*03544faaSPeter Seiderer 
610*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_svlan_cfi_0, sizeof(dev_cmd_svlan_cfi_0));
611*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_svlan_cfi_0));
612*03544faaSPeter Seiderer 
613*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_svlan_id_1, sizeof(dev_cmd_svlan_id_1));
614*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_1));
615*03544faaSPeter Seiderer }
616*03544faaSPeter Seiderer 
617*03544faaSPeter Seiderer 
618*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_tos) {
619*03544faaSPeter Seiderer 	ssize_t len;
620*03544faaSPeter Seiderer 
621*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_tos_0, sizeof(dev_cmd_tos_0));
622*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_tos_0));
623*03544faaSPeter Seiderer 
624*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_tos_1, sizeof(dev_cmd_tos_1));
625*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_tos_1));
626*03544faaSPeter Seiderer 
627*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_tos_2, sizeof(dev_cmd_tos_2));
628*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_tos_2));
629*03544faaSPeter Seiderer }
630*03544faaSPeter Seiderer 
631*03544faaSPeter Seiderer 
632*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_traffic_class) {
633*03544faaSPeter Seiderer 	ssize_t len;
634*03544faaSPeter Seiderer 
635*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_traffic_class_0, sizeof(dev_cmd_traffic_class_0));
636*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_traffic_class_0));
637*03544faaSPeter Seiderer }
638*03544faaSPeter Seiderer 
639*03544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_skb_priority) {
640*03544faaSPeter Seiderer 	ssize_t len;
641*03544faaSPeter Seiderer 
642*03544faaSPeter Seiderer 	len = write(self->dev_fd, dev_cmd_skb_priority_0, sizeof(dev_cmd_skb_priority_0));
643*03544faaSPeter Seiderer 	EXPECT_EQ(len, sizeof(dev_cmd_skb_priority_0));
644*03544faaSPeter Seiderer }
645*03544faaSPeter Seiderer 
646*03544faaSPeter Seiderer TEST_HARNESS_MAIN
647