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