103544faaSPeter Seiderer // SPDX-License-Identifier: GPL-2.0 203544faaSPeter Seiderer /* 303544faaSPeter Seiderer * proc_net_pktgen: kselftest for /proc/net/pktgen interface 403544faaSPeter Seiderer * 503544faaSPeter Seiderer * Copyright (c) 2025 Peter Seiderer <ps.report@gmx.net> 603544faaSPeter Seiderer * 703544faaSPeter Seiderer */ 803544faaSPeter Seiderer #include <errno.h> 903544faaSPeter Seiderer #include <fcntl.h> 1003544faaSPeter Seiderer #include <stdlib.h> 1103544faaSPeter Seiderer #include <unistd.h> 1203544faaSPeter Seiderer 1303544faaSPeter Seiderer #include "../kselftest_harness.h" 1403544faaSPeter Seiderer 1503544faaSPeter Seiderer static const char ctrl_cmd_stop[] = "stop"; 1603544faaSPeter Seiderer static const char ctrl_cmd_start[] = "start"; 1703544faaSPeter Seiderer static const char ctrl_cmd_reset[] = "reset"; 1803544faaSPeter Seiderer 1903544faaSPeter Seiderer static const char wrong_ctrl_cmd[] = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"; 2003544faaSPeter Seiderer 2103544faaSPeter Seiderer static const char thr_cmd_add_loopback_0[] = "add_device lo@0"; 2203544faaSPeter Seiderer static const char thr_cmd_rm_loopback_0[] = "rem_device_all"; 2303544faaSPeter Seiderer 2403544faaSPeter Seiderer static const char wrong_thr_cmd[] = "forsureawrongcommand"; 2503544faaSPeter Seiderer static const char legacy_thr_cmd[] = "max_before_softirq"; 2603544faaSPeter Seiderer 2703544faaSPeter Seiderer static const char wrong_dev_cmd[] = "forsurewrongcommand"; 2803544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_0[] = "min_pkt_size"; 2903544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_1[] = "min_pkt_size "; 3003544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_2[] = "min_pkt_size 0"; 3103544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_3[] = "min_pkt_size 1"; 3203544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_4[] = "min_pkt_size 100"; 3303544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_5[] = "min_pkt_size=1001"; 3403544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_6[] = "min_pkt_size =2002"; 3503544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_7[] = "min_pkt_size= 3003"; 3603544faaSPeter Seiderer static const char dev_cmd_min_pkt_size_8[] = "min_pkt_size = 4004"; 3703544faaSPeter Seiderer static const char dev_cmd_max_pkt_size_0[] = "max_pkt_size 200"; 3803544faaSPeter Seiderer static const char dev_cmd_pkt_size_0[] = "pkt_size 300"; 3903544faaSPeter Seiderer static const char dev_cmd_imix_weights_0[] = "imix_weights 0,7 576,4 1500,1"; 4003544faaSPeter 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"; 4103544faaSPeter 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*3099f9e1SPeter Seiderer static const char dev_cmd_imix_weights_3[] = "imix_weights"; 43*3099f9e1SPeter Seiderer static const char dev_cmd_imix_weights_4[] = "imix_weights "; 44*3099f9e1SPeter Seiderer static const char dev_cmd_imix_weights_5[] = "imix_weights 0"; 45*3099f9e1SPeter Seiderer static const char dev_cmd_imix_weights_6[] = "imix_weights 0,"; 4603544faaSPeter Seiderer static const char dev_cmd_debug_0[] = "debug 1"; 4703544faaSPeter Seiderer static const char dev_cmd_debug_1[] = "debug 0"; 4803544faaSPeter Seiderer static const char dev_cmd_frags_0[] = "frags 100"; 4903544faaSPeter Seiderer static const char dev_cmd_delay_0[] = "delay 100"; 5003544faaSPeter Seiderer static const char dev_cmd_delay_1[] = "delay 2147483647"; 5103544faaSPeter Seiderer static const char dev_cmd_rate_0[] = "rate 0"; 5203544faaSPeter Seiderer static const char dev_cmd_rate_1[] = "rate 100"; 5303544faaSPeter Seiderer static const char dev_cmd_ratep_0[] = "ratep 0"; 5403544faaSPeter Seiderer static const char dev_cmd_ratep_1[] = "ratep 200"; 5503544faaSPeter Seiderer static const char dev_cmd_udp_src_min_0[] = "udp_src_min 1"; 5603544faaSPeter Seiderer static const char dev_cmd_udp_dst_min_0[] = "udp_dst_min 2"; 5703544faaSPeter Seiderer static const char dev_cmd_udp_src_max_0[] = "udp_src_max 3"; 5803544faaSPeter Seiderer static const char dev_cmd_udp_dst_max_0[] = "udp_dst_max 4"; 5903544faaSPeter Seiderer static const char dev_cmd_clone_skb_0[] = "clone_skb 1"; 6003544faaSPeter Seiderer static const char dev_cmd_clone_skb_1[] = "clone_skb 0"; 6103544faaSPeter Seiderer static const char dev_cmd_count_0[] = "count 100"; 6203544faaSPeter Seiderer static const char dev_cmd_src_mac_count_0[] = "src_mac_count 100"; 6303544faaSPeter Seiderer static const char dev_cmd_dst_mac_count_0[] = "dst_mac_count 100"; 6403544faaSPeter Seiderer static const char dev_cmd_burst_0[] = "burst 0"; 6503544faaSPeter Seiderer static const char dev_cmd_node_0[] = "node 100"; 6603544faaSPeter Seiderer static const char dev_cmd_xmit_mode_0[] = "xmit_mode start_xmit"; 6703544faaSPeter Seiderer static const char dev_cmd_xmit_mode_1[] = "xmit_mode netif_receive"; 6803544faaSPeter Seiderer static const char dev_cmd_xmit_mode_2[] = "xmit_mode queue_xmit"; 6903544faaSPeter Seiderer static const char dev_cmd_xmit_mode_3[] = "xmit_mode nonsense"; 7003544faaSPeter Seiderer static const char dev_cmd_flag_0[] = "flag UDPCSUM"; 7103544faaSPeter Seiderer static const char dev_cmd_flag_1[] = "flag !UDPCSUM"; 7203544faaSPeter Seiderer static const char dev_cmd_flag_2[] = "flag nonsense"; 7303544faaSPeter Seiderer static const char dev_cmd_dst_min_0[] = "dst_min 101.102.103.104"; 7403544faaSPeter Seiderer static const char dev_cmd_dst_0[] = "dst 101.102.103.104"; 7503544faaSPeter Seiderer static const char dev_cmd_dst_max_0[] = "dst_max 201.202.203.204"; 7603544faaSPeter Seiderer static const char dev_cmd_dst6_0[] = "dst6 2001:db38:1234:0000:0000:0000:0000:0000"; 7703544faaSPeter Seiderer static const char dev_cmd_dst6_min_0[] = "dst6_min 2001:db8:1234:0000:0000:0000:0000:0000"; 7803544faaSPeter Seiderer static const char dev_cmd_dst6_max_0[] = "dst6_max 2001:db8:1234:0000:0000:0000:0000:0000"; 7903544faaSPeter Seiderer static const char dev_cmd_src6_0[] = "src6 2001:db38:1234:0000:0000:0000:0000:0000"; 8003544faaSPeter Seiderer static const char dev_cmd_src_min_0[] = "src_min 101.102.103.104"; 8103544faaSPeter Seiderer static const char dev_cmd_src_max_0[] = "src_max 201.202.203.204"; 8203544faaSPeter Seiderer static const char dev_cmd_dst_mac_0[] = "dst_mac 01:02:03:04:05:06"; 8303544faaSPeter Seiderer static const char dev_cmd_src_mac_0[] = "src_mac 11:12:13:14:15:16"; 8403544faaSPeter Seiderer static const char dev_cmd_clear_counters_0[] = "clear_counters"; 8503544faaSPeter Seiderer static const char dev_cmd_flows_0[] = "flows 100"; 8603544faaSPeter Seiderer static const char dev_cmd_spi_0[] = "spi 100"; 8703544faaSPeter Seiderer static const char dev_cmd_flowlen_0[] = "flowlen 100"; 8803544faaSPeter Seiderer static const char dev_cmd_queue_map_min_0[] = "queue_map_min 1"; 8903544faaSPeter Seiderer static const char dev_cmd_queue_map_max_0[] = "queue_map_max 2"; 9003544faaSPeter Seiderer static const char dev_cmd_mpls_0[] = "mpls 00000001"; 9103544faaSPeter Seiderer static const char dev_cmd_mpls_1[] = "mpls 00000001,000000f2"; 9203544faaSPeter 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"; 9303544faaSPeter 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"; 9403544faaSPeter Seiderer static const char dev_cmd_vlan_id_0[] = "vlan_id 1"; 9503544faaSPeter Seiderer static const char dev_cmd_vlan_p_0[] = "vlan_p 1"; 9603544faaSPeter Seiderer static const char dev_cmd_vlan_cfi_0[] = "vlan_cfi 1"; 9703544faaSPeter Seiderer static const char dev_cmd_vlan_id_1[] = "vlan_id 4096"; 9803544faaSPeter Seiderer static const char dev_cmd_svlan_id_0[] = "svlan_id 1"; 9903544faaSPeter Seiderer static const char dev_cmd_svlan_p_0[] = "svlan_p 1"; 10003544faaSPeter Seiderer static const char dev_cmd_svlan_cfi_0[] = "svlan_cfi 1"; 10103544faaSPeter Seiderer static const char dev_cmd_svlan_id_1[] = "svlan_id 4096"; 10203544faaSPeter Seiderer static const char dev_cmd_tos_0[] = "tos 0"; 10303544faaSPeter Seiderer static const char dev_cmd_tos_1[] = "tos 0f"; 10403544faaSPeter Seiderer static const char dev_cmd_tos_2[] = "tos 0ff"; 10503544faaSPeter Seiderer static const char dev_cmd_traffic_class_0[] = "traffic_class f0"; 10603544faaSPeter Seiderer static const char dev_cmd_skb_priority_0[] = "skb_priority 999"; 10703544faaSPeter Seiderer 10803544faaSPeter Seiderer FIXTURE(proc_net_pktgen) { 10903544faaSPeter Seiderer int ctrl_fd; 11003544faaSPeter Seiderer int thr_fd; 11103544faaSPeter Seiderer int dev_fd; 11203544faaSPeter Seiderer }; 11303544faaSPeter Seiderer 11403544faaSPeter Seiderer FIXTURE_SETUP(proc_net_pktgen) { 11503544faaSPeter Seiderer int r; 11603544faaSPeter Seiderer ssize_t len; 11703544faaSPeter Seiderer 11803544faaSPeter Seiderer r = system("modprobe pktgen"); 11903544faaSPeter Seiderer ASSERT_EQ(r, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); 12003544faaSPeter Seiderer 12103544faaSPeter Seiderer self->ctrl_fd = open("/proc/net/pktgen/pgctrl", O_RDWR); 12203544faaSPeter Seiderer ASSERT_GE(self->ctrl_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); 12303544faaSPeter Seiderer 12403544faaSPeter Seiderer self->thr_fd = open("/proc/net/pktgen/kpktgend_0", O_RDWR); 12503544faaSPeter Seiderer ASSERT_GE(self->thr_fd, 0) TH_LOG("CONFIG_NET_PKTGEN not enabled, module pktgen not loaded?"); 12603544faaSPeter Seiderer 12703544faaSPeter Seiderer len = write(self->thr_fd, thr_cmd_add_loopback_0, sizeof(thr_cmd_add_loopback_0)); 12803544faaSPeter Seiderer ASSERT_EQ(len, sizeof(thr_cmd_add_loopback_0)) TH_LOG("device lo@0 already registered?"); 12903544faaSPeter Seiderer 13003544faaSPeter Seiderer self->dev_fd = open("/proc/net/pktgen/lo@0", O_RDWR); 13103544faaSPeter Seiderer ASSERT_GE(self->dev_fd, 0) TH_LOG("device entry for lo@0 missing?"); 13203544faaSPeter Seiderer } 13303544faaSPeter Seiderer 13403544faaSPeter Seiderer FIXTURE_TEARDOWN(proc_net_pktgen) { 13503544faaSPeter Seiderer int ret; 13603544faaSPeter Seiderer ssize_t len; 13703544faaSPeter Seiderer 13803544faaSPeter Seiderer ret = close(self->dev_fd); 13903544faaSPeter Seiderer EXPECT_EQ(ret, 0); 14003544faaSPeter Seiderer 14103544faaSPeter Seiderer len = write(self->thr_fd, thr_cmd_rm_loopback_0, sizeof(thr_cmd_rm_loopback_0)); 14203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(thr_cmd_rm_loopback_0)); 14303544faaSPeter Seiderer 14403544faaSPeter Seiderer ret = close(self->thr_fd); 14503544faaSPeter Seiderer EXPECT_EQ(ret, 0); 14603544faaSPeter Seiderer 14703544faaSPeter Seiderer ret = close(self->ctrl_fd); 14803544faaSPeter Seiderer EXPECT_EQ(ret, 0); 14903544faaSPeter Seiderer } 15003544faaSPeter Seiderer 15103544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_ctrl_cmd) { 15203544faaSPeter Seiderer for (int i = 0; i <= sizeof(wrong_ctrl_cmd); i++) { 15303544faaSPeter Seiderer ssize_t len; 15403544faaSPeter Seiderer 15503544faaSPeter Seiderer len = write(self->ctrl_fd, wrong_ctrl_cmd, i); 15603544faaSPeter Seiderer EXPECT_EQ(len, -1); 15703544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 15803544faaSPeter Seiderer } 15903544faaSPeter Seiderer } 16003544faaSPeter Seiderer 16103544faaSPeter Seiderer TEST_F(proc_net_pktgen, ctrl_cmd) { 16203544faaSPeter Seiderer ssize_t len; 16303544faaSPeter Seiderer 16403544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop)); 16503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_stop)); 16603544faaSPeter Seiderer 16703544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_stop, sizeof(ctrl_cmd_stop) - 1); 16803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_stop) - 1); 16903544faaSPeter Seiderer 17003544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start)); 17103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_start)); 17203544faaSPeter Seiderer 17303544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_start, sizeof(ctrl_cmd_start) - 1); 17403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_start) - 1); 17503544faaSPeter Seiderer 17603544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset)); 17703544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_reset)); 17803544faaSPeter Seiderer 17903544faaSPeter Seiderer len = write(self->ctrl_fd, ctrl_cmd_reset, sizeof(ctrl_cmd_reset) - 1); 18003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(ctrl_cmd_reset) - 1); 18103544faaSPeter Seiderer } 18203544faaSPeter Seiderer 18303544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_thr_cmd) { 18403544faaSPeter Seiderer for (int i = 0; i <= sizeof(wrong_thr_cmd); i++) { 18503544faaSPeter Seiderer ssize_t len; 18603544faaSPeter Seiderer 18703544faaSPeter Seiderer len = write(self->thr_fd, wrong_thr_cmd, i); 18803544faaSPeter Seiderer EXPECT_EQ(len, -1); 18903544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 19003544faaSPeter Seiderer } 19103544faaSPeter Seiderer } 19203544faaSPeter Seiderer 19303544faaSPeter Seiderer TEST_F(proc_net_pktgen, legacy_thr_cmd) { 19403544faaSPeter Seiderer for (int i = 0; i <= sizeof(legacy_thr_cmd); i++) { 19503544faaSPeter Seiderer ssize_t len; 19603544faaSPeter Seiderer 19703544faaSPeter Seiderer len = write(self->thr_fd, legacy_thr_cmd, i); 19803544faaSPeter Seiderer if (i < (sizeof(legacy_thr_cmd) - 1)) { 19903544faaSPeter Seiderer /* incomplete command string */ 20003544faaSPeter Seiderer EXPECT_EQ(len, -1); 20103544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 20203544faaSPeter Seiderer } else { 20303544faaSPeter Seiderer /* complete command string without/with trailing '\0' */ 20403544faaSPeter Seiderer EXPECT_EQ(len, i); 20503544faaSPeter Seiderer } 20603544faaSPeter Seiderer } 20703544faaSPeter Seiderer } 20803544faaSPeter Seiderer 20903544faaSPeter Seiderer TEST_F(proc_net_pktgen, wrong_dev_cmd) { 21003544faaSPeter Seiderer for (int i = 0; i <= sizeof(wrong_dev_cmd); i++) { 21103544faaSPeter Seiderer ssize_t len; 21203544faaSPeter Seiderer 21303544faaSPeter Seiderer len = write(self->dev_fd, wrong_dev_cmd, i); 21403544faaSPeter Seiderer EXPECT_EQ(len, -1); 21503544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 21603544faaSPeter Seiderer } 21703544faaSPeter Seiderer } 21803544faaSPeter Seiderer 21903544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_min_pkt_size) { 22003544faaSPeter Seiderer ssize_t len; 22103544faaSPeter Seiderer 22203544faaSPeter Seiderer /* with trailing '\0' */ 22303544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0)); 22403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0)); 22503544faaSPeter Seiderer 22603544faaSPeter Seiderer /* without trailing '\0' */ 22703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_0, sizeof(dev_cmd_min_pkt_size_0) - 1); 22803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_0) - 1); 22903544faaSPeter Seiderer 23003544faaSPeter Seiderer /* with trailing '\0' */ 23103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1)); 23203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1)); 23303544faaSPeter Seiderer 23403544faaSPeter Seiderer /* without trailing '\0' */ 23503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_1, sizeof(dev_cmd_min_pkt_size_1) - 1); 23603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_1) - 1); 23703544faaSPeter Seiderer 23803544faaSPeter Seiderer /* with trailing '\0' */ 23903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2)); 24003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2)); 24103544faaSPeter Seiderer 24203544faaSPeter Seiderer /* without trailing '\0' */ 24303544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_2, sizeof(dev_cmd_min_pkt_size_2) - 1); 24403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_2) - 1); 24503544faaSPeter Seiderer 24603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_3, sizeof(dev_cmd_min_pkt_size_3)); 24703544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_3)); 24803544faaSPeter Seiderer 24903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_4, sizeof(dev_cmd_min_pkt_size_4)); 25003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_4)); 25103544faaSPeter Seiderer 25203544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_5, sizeof(dev_cmd_min_pkt_size_5)); 25303544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_5)); 25403544faaSPeter Seiderer 25503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_6, sizeof(dev_cmd_min_pkt_size_6)); 25603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_6)); 25703544faaSPeter Seiderer 25803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_7, sizeof(dev_cmd_min_pkt_size_7)); 25903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_7)); 26003544faaSPeter Seiderer 26103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_min_pkt_size_8, sizeof(dev_cmd_min_pkt_size_8)); 26203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_min_pkt_size_8)); 26303544faaSPeter Seiderer } 26403544faaSPeter Seiderer 26503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_max_pkt_size) { 26603544faaSPeter Seiderer ssize_t len; 26703544faaSPeter Seiderer 26803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_max_pkt_size_0, sizeof(dev_cmd_max_pkt_size_0)); 26903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_max_pkt_size_0)); 27003544faaSPeter Seiderer } 27103544faaSPeter Seiderer 27203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_pkt_size) { 27303544faaSPeter Seiderer ssize_t len; 27403544faaSPeter Seiderer 27503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_pkt_size_0, sizeof(dev_cmd_pkt_size_0)); 27603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_pkt_size_0)); 27703544faaSPeter Seiderer } 27803544faaSPeter Seiderer 27903544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_imix_weights) { 28003544faaSPeter Seiderer ssize_t len; 28103544faaSPeter Seiderer 28203544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_0, sizeof(dev_cmd_imix_weights_0)); 28303544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_0)); 28403544faaSPeter Seiderer 28503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_1, sizeof(dev_cmd_imix_weights_1)); 28603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_imix_weights_1)); 28703544faaSPeter Seiderer 28803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_2, sizeof(dev_cmd_imix_weights_2)); 28903544faaSPeter Seiderer EXPECT_EQ(len, -1); 29003544faaSPeter Seiderer EXPECT_EQ(errno, E2BIG); 291*3099f9e1SPeter Seiderer 292*3099f9e1SPeter Seiderer /* with trailing '\0' */ 293*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_3, sizeof(dev_cmd_imix_weights_3)); 294*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 295*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 296*3099f9e1SPeter Seiderer 297*3099f9e1SPeter Seiderer /* without trailing '\0' */ 298*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_3, sizeof(dev_cmd_imix_weights_3) - 1); 299*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 300*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 301*3099f9e1SPeter Seiderer 302*3099f9e1SPeter Seiderer /* with trailing '\0' */ 303*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_4, sizeof(dev_cmd_imix_weights_4)); 304*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 305*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 306*3099f9e1SPeter Seiderer 307*3099f9e1SPeter Seiderer /* without trailing '\0' */ 308*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_4, sizeof(dev_cmd_imix_weights_4) - 1); 309*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 310*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 311*3099f9e1SPeter Seiderer 312*3099f9e1SPeter Seiderer /* with trailing '\0' */ 313*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_5, sizeof(dev_cmd_imix_weights_5)); 314*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 315*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 316*3099f9e1SPeter Seiderer 317*3099f9e1SPeter Seiderer /* without trailing '\0' */ 318*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_5, sizeof(dev_cmd_imix_weights_5) - 1); 319*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 320*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 321*3099f9e1SPeter Seiderer 322*3099f9e1SPeter Seiderer /* with trailing '\0' */ 323*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_6, sizeof(dev_cmd_imix_weights_6)); 324*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 325*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 326*3099f9e1SPeter Seiderer 327*3099f9e1SPeter Seiderer /* without trailing '\0' */ 328*3099f9e1SPeter Seiderer len = write(self->dev_fd, dev_cmd_imix_weights_6, sizeof(dev_cmd_imix_weights_6) - 1); 329*3099f9e1SPeter Seiderer EXPECT_EQ(len, -1); 330*3099f9e1SPeter Seiderer EXPECT_EQ(errno, EINVAL); 33103544faaSPeter Seiderer } 33203544faaSPeter Seiderer 33303544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_debug) { 33403544faaSPeter Seiderer ssize_t len; 33503544faaSPeter Seiderer 33603544faaSPeter Seiderer /* debug on */ 33703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_debug_0, sizeof(dev_cmd_debug_0)); 33803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_debug_0)); 33903544faaSPeter Seiderer 34003544faaSPeter Seiderer /* debug off */ 34103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_debug_1, sizeof(dev_cmd_debug_1)); 34203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_debug_1)); 34303544faaSPeter Seiderer } 34403544faaSPeter Seiderer 34503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_frags) { 34603544faaSPeter Seiderer ssize_t len; 34703544faaSPeter Seiderer 34803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_frags_0, sizeof(dev_cmd_frags_0)); 34903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_frags_0)); 35003544faaSPeter Seiderer } 35103544faaSPeter Seiderer 35203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_delay) { 35303544faaSPeter Seiderer ssize_t len; 35403544faaSPeter Seiderer 35503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_delay_0, sizeof(dev_cmd_delay_0)); 35603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_delay_0)); 35703544faaSPeter Seiderer 35803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_delay_1, sizeof(dev_cmd_delay_1)); 35903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_delay_1)); 36003544faaSPeter Seiderer } 36103544faaSPeter Seiderer 36203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_rate) { 36303544faaSPeter Seiderer ssize_t len; 36403544faaSPeter Seiderer 36503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_rate_0, sizeof(dev_cmd_rate_0)); 36603544faaSPeter Seiderer EXPECT_EQ(len, -1); 36703544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 36803544faaSPeter Seiderer 36903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_rate_1, sizeof(dev_cmd_rate_1)); 37003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_rate_1)); 37103544faaSPeter Seiderer } 37203544faaSPeter Seiderer 37303544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_ratep) { 37403544faaSPeter Seiderer ssize_t len; 37503544faaSPeter Seiderer 37603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_ratep_0, sizeof(dev_cmd_ratep_0)); 37703544faaSPeter Seiderer EXPECT_EQ(len, -1); 37803544faaSPeter Seiderer EXPECT_EQ(errno, EINVAL); 37903544faaSPeter Seiderer 38003544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_ratep_1, sizeof(dev_cmd_ratep_1)); 38103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_ratep_1)); 38203544faaSPeter Seiderer } 38303544faaSPeter Seiderer 38403544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_src_min) { 38503544faaSPeter Seiderer ssize_t len; 38603544faaSPeter Seiderer 38703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_udp_src_min_0, sizeof(dev_cmd_udp_src_min_0)); 38803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_udp_src_min_0)); 38903544faaSPeter Seiderer } 39003544faaSPeter Seiderer 39103544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_dst_min) { 39203544faaSPeter Seiderer ssize_t len; 39303544faaSPeter Seiderer 39403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_udp_dst_min_0, sizeof(dev_cmd_udp_dst_min_0)); 39503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_min_0)); 39603544faaSPeter Seiderer } 39703544faaSPeter Seiderer 39803544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_src_max) { 39903544faaSPeter Seiderer ssize_t len; 40003544faaSPeter Seiderer 40103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_udp_src_max_0, sizeof(dev_cmd_udp_src_max_0)); 40203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_udp_src_max_0)); 40303544faaSPeter Seiderer } 40403544faaSPeter Seiderer 40503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_udp_dst_max) { 40603544faaSPeter Seiderer ssize_t len; 40703544faaSPeter Seiderer 40803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_udp_dst_max_0, sizeof(dev_cmd_udp_dst_max_0)); 40903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_udp_dst_max_0)); 41003544faaSPeter Seiderer } 41103544faaSPeter Seiderer 41203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_clone_skb) { 41303544faaSPeter Seiderer ssize_t len; 41403544faaSPeter Seiderer 41503544faaSPeter Seiderer /* clone_skb on (gives EOPNOTSUPP on lo device) */ 41603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_clone_skb_0, sizeof(dev_cmd_clone_skb_0)); 41703544faaSPeter Seiderer EXPECT_EQ(len, -1); 41803544faaSPeter Seiderer EXPECT_EQ(errno, EOPNOTSUPP); 41903544faaSPeter Seiderer 42003544faaSPeter Seiderer /* clone_skb off */ 42103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_clone_skb_1, sizeof(dev_cmd_clone_skb_1)); 42203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_clone_skb_1)); 42303544faaSPeter Seiderer } 42403544faaSPeter Seiderer 42503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_count) { 42603544faaSPeter Seiderer ssize_t len; 42703544faaSPeter Seiderer 42803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_count_0, sizeof(dev_cmd_count_0)); 42903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_count_0)); 43003544faaSPeter Seiderer } 43103544faaSPeter Seiderer 43203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_mac_count) { 43303544faaSPeter Seiderer ssize_t len; 43403544faaSPeter Seiderer 43503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_src_mac_count_0, sizeof(dev_cmd_src_mac_count_0)); 43603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_src_mac_count_0)); 43703544faaSPeter Seiderer } 43803544faaSPeter Seiderer 43903544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_mac_count) { 44003544faaSPeter Seiderer ssize_t len; 44103544faaSPeter Seiderer 44203544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst_mac_count_0, sizeof(dev_cmd_dst_mac_count_0)); 44303544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_count_0)); 44403544faaSPeter Seiderer } 44503544faaSPeter Seiderer 44603544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_burst) { 44703544faaSPeter Seiderer ssize_t len; 44803544faaSPeter Seiderer 44903544faaSPeter Seiderer /* burst off */ 45003544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_burst_0, sizeof(dev_cmd_burst_0)); 45103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_burst_0)); 45203544faaSPeter Seiderer } 45303544faaSPeter Seiderer 45403544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_node) { 45503544faaSPeter Seiderer ssize_t len; 45603544faaSPeter Seiderer 45703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_node_0, sizeof(dev_cmd_node_0)); 45803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_node_0)); 45903544faaSPeter Seiderer } 46003544faaSPeter Seiderer 46103544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_xmit_mode) { 46203544faaSPeter Seiderer ssize_t len; 46303544faaSPeter Seiderer 46403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_xmit_mode_0, sizeof(dev_cmd_xmit_mode_0)); 46503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_0)); 46603544faaSPeter Seiderer 46703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_xmit_mode_1, sizeof(dev_cmd_xmit_mode_1)); 46803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_1)); 46903544faaSPeter Seiderer 47003544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_xmit_mode_2, sizeof(dev_cmd_xmit_mode_2)); 47103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_2)); 47203544faaSPeter Seiderer 47303544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_xmit_mode_3, sizeof(dev_cmd_xmit_mode_3)); 47403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_xmit_mode_3)); 47503544faaSPeter Seiderer } 47603544faaSPeter Seiderer 47703544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flag) { 47803544faaSPeter Seiderer ssize_t len; 47903544faaSPeter Seiderer 48003544faaSPeter Seiderer /* flag UDPCSUM on */ 48103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_flag_0, sizeof(dev_cmd_flag_0)); 48203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_flag_0)); 48303544faaSPeter Seiderer 48403544faaSPeter Seiderer /* flag UDPCSUM off */ 48503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_flag_1, sizeof(dev_cmd_flag_1)); 48603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_flag_1)); 48703544faaSPeter Seiderer 48803544faaSPeter Seiderer /* flag invalid */ 48903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_flag_2, sizeof(dev_cmd_flag_2)); 49003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_flag_2)); 49103544faaSPeter Seiderer } 49203544faaSPeter Seiderer 49303544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_min) { 49403544faaSPeter Seiderer ssize_t len; 49503544faaSPeter Seiderer 49603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst_min_0, sizeof(dev_cmd_dst_min_0)); 49703544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst_min_0)); 49803544faaSPeter Seiderer } 49903544faaSPeter Seiderer 50003544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst) { 50103544faaSPeter Seiderer ssize_t len; 50203544faaSPeter Seiderer 50303544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst_0, sizeof(dev_cmd_dst_0)); 50403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst_0)); 50503544faaSPeter Seiderer } 50603544faaSPeter Seiderer 50703544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_max) { 50803544faaSPeter Seiderer ssize_t len; 50903544faaSPeter Seiderer 51003544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst_max_0, sizeof(dev_cmd_dst_max_0)); 51103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst_max_0)); 51203544faaSPeter Seiderer } 51303544faaSPeter Seiderer 51403544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6) { 51503544faaSPeter Seiderer ssize_t len; 51603544faaSPeter Seiderer 51703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst6_0, sizeof(dev_cmd_dst6_0)); 51803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst6_0)); 51903544faaSPeter Seiderer } 52003544faaSPeter Seiderer 52103544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6_min) { 52203544faaSPeter Seiderer ssize_t len; 52303544faaSPeter Seiderer 52403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst6_min_0, sizeof(dev_cmd_dst6_min_0)); 52503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst6_min_0)); 52603544faaSPeter Seiderer } 52703544faaSPeter Seiderer 52803544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst6_max) { 52903544faaSPeter Seiderer ssize_t len; 53003544faaSPeter Seiderer 53103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst6_max_0, sizeof(dev_cmd_dst6_max_0)); 53203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst6_max_0)); 53303544faaSPeter Seiderer } 53403544faaSPeter Seiderer 53503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src6) { 53603544faaSPeter Seiderer ssize_t len; 53703544faaSPeter Seiderer 53803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_src6_0, sizeof(dev_cmd_src6_0)); 53903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_src6_0)); 54003544faaSPeter Seiderer } 54103544faaSPeter Seiderer 54203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_min) { 54303544faaSPeter Seiderer ssize_t len; 54403544faaSPeter Seiderer 54503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_src_min_0, sizeof(dev_cmd_src_min_0)); 54603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_src_min_0)); 54703544faaSPeter Seiderer } 54803544faaSPeter Seiderer 54903544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_max) { 55003544faaSPeter Seiderer ssize_t len; 55103544faaSPeter Seiderer 55203544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_src_max_0, sizeof(dev_cmd_src_max_0)); 55303544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_src_max_0)); 55403544faaSPeter Seiderer } 55503544faaSPeter Seiderer 55603544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_dst_mac) { 55703544faaSPeter Seiderer ssize_t len; 55803544faaSPeter Seiderer 55903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_dst_mac_0, sizeof(dev_cmd_dst_mac_0)); 56003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_dst_mac_0)); 56103544faaSPeter Seiderer } 56203544faaSPeter Seiderer 56303544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_src_mac) { 56403544faaSPeter Seiderer ssize_t len; 56503544faaSPeter Seiderer 56603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_src_mac_0, sizeof(dev_cmd_src_mac_0)); 56703544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_src_mac_0)); 56803544faaSPeter Seiderer } 56903544faaSPeter Seiderer 57003544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_clear_counters) { 57103544faaSPeter Seiderer ssize_t len; 57203544faaSPeter Seiderer 57303544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_clear_counters_0, sizeof(dev_cmd_clear_counters_0)); 57403544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_clear_counters_0)); 57503544faaSPeter Seiderer } 57603544faaSPeter Seiderer 57703544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flows) { 57803544faaSPeter Seiderer ssize_t len; 57903544faaSPeter Seiderer 58003544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_flows_0, sizeof(dev_cmd_flows_0)); 58103544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_flows_0)); 58203544faaSPeter Seiderer } 58303544faaSPeter Seiderer 58403544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_spi) { 58503544faaSPeter Seiderer ssize_t len; 58603544faaSPeter Seiderer 58703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_spi_0, sizeof(dev_cmd_spi_0)); 58803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_spi_0)) TH_LOG("CONFIG_XFRM not enabled?"); 58903544faaSPeter Seiderer } 59003544faaSPeter Seiderer 59103544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_flowlen) { 59203544faaSPeter Seiderer ssize_t len; 59303544faaSPeter Seiderer 59403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_flowlen_0, sizeof(dev_cmd_flowlen_0)); 59503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_flowlen_0)); 59603544faaSPeter Seiderer } 59703544faaSPeter Seiderer 59803544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_queue_map_min) { 59903544faaSPeter Seiderer ssize_t len; 60003544faaSPeter Seiderer 60103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_queue_map_min_0, sizeof(dev_cmd_queue_map_min_0)); 60203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_queue_map_min_0)); 60303544faaSPeter Seiderer } 60403544faaSPeter Seiderer 60503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_queue_map_max) { 60603544faaSPeter Seiderer ssize_t len; 60703544faaSPeter Seiderer 60803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_queue_map_max_0, sizeof(dev_cmd_queue_map_max_0)); 60903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_queue_map_max_0)); 61003544faaSPeter Seiderer } 61103544faaSPeter Seiderer 61203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_mpls) { 61303544faaSPeter Seiderer ssize_t len; 61403544faaSPeter Seiderer 61503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_mpls_0, sizeof(dev_cmd_mpls_0)); 61603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_mpls_0)); 61703544faaSPeter Seiderer 61803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_mpls_1, sizeof(dev_cmd_mpls_1)); 61903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_mpls_1)); 62003544faaSPeter Seiderer 62103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_mpls_2, sizeof(dev_cmd_mpls_2)); 62203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_mpls_2)); 62303544faaSPeter Seiderer 62403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_mpls_3, sizeof(dev_cmd_mpls_3)); 62503544faaSPeter Seiderer EXPECT_EQ(len, -1); 62603544faaSPeter Seiderer EXPECT_EQ(errno, E2BIG); 62703544faaSPeter Seiderer } 62803544faaSPeter Seiderer 62903544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_vlan_id) { 63003544faaSPeter Seiderer ssize_t len; 63103544faaSPeter Seiderer 63203544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_vlan_id_0, sizeof(dev_cmd_vlan_id_0)); 63303544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_0)); 63403544faaSPeter Seiderer 63503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_vlan_p_0, sizeof(dev_cmd_vlan_p_0)); 63603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_vlan_p_0)); 63703544faaSPeter Seiderer 63803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_vlan_cfi_0, sizeof(dev_cmd_vlan_cfi_0)); 63903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_vlan_cfi_0)); 64003544faaSPeter Seiderer 64103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_vlan_id_1, sizeof(dev_cmd_vlan_id_1)); 64203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_vlan_id_1)); 64303544faaSPeter Seiderer } 64403544faaSPeter Seiderer 64503544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_svlan_id) { 64603544faaSPeter Seiderer ssize_t len; 64703544faaSPeter Seiderer 64803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_svlan_id_0, sizeof(dev_cmd_svlan_id_0)); 64903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_0)); 65003544faaSPeter Seiderer 65103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_svlan_p_0, sizeof(dev_cmd_svlan_p_0)); 65203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_svlan_p_0)); 65303544faaSPeter Seiderer 65403544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_svlan_cfi_0, sizeof(dev_cmd_svlan_cfi_0)); 65503544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_svlan_cfi_0)); 65603544faaSPeter Seiderer 65703544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_svlan_id_1, sizeof(dev_cmd_svlan_id_1)); 65803544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_svlan_id_1)); 65903544faaSPeter Seiderer } 66003544faaSPeter Seiderer 66103544faaSPeter Seiderer 66203544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_tos) { 66303544faaSPeter Seiderer ssize_t len; 66403544faaSPeter Seiderer 66503544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_tos_0, sizeof(dev_cmd_tos_0)); 66603544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_tos_0)); 66703544faaSPeter Seiderer 66803544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_tos_1, sizeof(dev_cmd_tos_1)); 66903544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_tos_1)); 67003544faaSPeter Seiderer 67103544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_tos_2, sizeof(dev_cmd_tos_2)); 67203544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_tos_2)); 67303544faaSPeter Seiderer } 67403544faaSPeter Seiderer 67503544faaSPeter Seiderer 67603544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_traffic_class) { 67703544faaSPeter Seiderer ssize_t len; 67803544faaSPeter Seiderer 67903544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_traffic_class_0, sizeof(dev_cmd_traffic_class_0)); 68003544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_traffic_class_0)); 68103544faaSPeter Seiderer } 68203544faaSPeter Seiderer 68303544faaSPeter Seiderer TEST_F(proc_net_pktgen, dev_cmd_skb_priority) { 68403544faaSPeter Seiderer ssize_t len; 68503544faaSPeter Seiderer 68603544faaSPeter Seiderer len = write(self->dev_fd, dev_cmd_skb_priority_0, sizeof(dev_cmd_skb_priority_0)); 68703544faaSPeter Seiderer EXPECT_EQ(len, sizeof(dev_cmd_skb_priority_0)); 68803544faaSPeter Seiderer } 68903544faaSPeter Seiderer 69003544faaSPeter Seiderer TEST_HARNESS_MAIN 691