@@ -45,6 +45,39 @@ class DcpUnitTest : public PnetUnitTest
45
45
{
46
46
};
47
47
48
+ static uint8_t get_wrong_length_req[] = {
49
+ // clang-format off
50
+
51
+ // Destination MAC address. Pos 0
52
+ 0x12 , 0x34 , 0x00 , 0x78 , 0x90 , 0xab ,
53
+
54
+ // Source MAC address. Pos 6
55
+ 0xc8 , 0x5b , 0x76 , 0xe6 , 0x89 , 0xdf ,
56
+
57
+ // Ethernet type = Profinet RT. Pos 12
58
+ 0x88 , 0x92 ,
59
+
60
+ // DCP set/get. Pos 14
61
+ 0xfe , 0xfd ,
62
+
63
+ // Get, request. Pos 16
64
+ 0x03 , 0x00 ,
65
+
66
+ // XID. Pos 20
67
+ 0x00 , 0x00 , 0x00 , 0x01 ,
68
+
69
+ // Reserved. Pos 22
70
+ 0x04 , 0x01 ,
71
+
72
+ // DCP data length. Wrong value. Pos 24
73
+ 0x04 , 0x00 ,
74
+
75
+ // Options. Pos 26
76
+ 0x00 , 0x00
77
+
78
+ // clang-format on
79
+ };
80
+
48
81
static uint8_t get_name_req[] = {
49
82
0x12 , 0x34 , 0x00 , 0x78 , 0x90 , 0xab , 0xc8 , 0x5b , 0x76 , 0xe6 , 0x89 , 0xdf ,
50
83
0x88 , 0x92 , 0xfe , 0xfd , 0x03 , 0x00 , 0x00 , 0x00 , 0x00 , 0x05 , 0x00 , 0x00 ,
@@ -118,6 +151,33 @@ TEST_F (DcpTest, DcpHelloTest)
118
151
EXPECT_EQ (appdata.call_counters .write_calls , 0 );
119
152
}
120
153
154
+ TEST_F (DcpTest, DcpGetWrongLengthTest)
155
+ {
156
+ pnal_buf_t * p_buf;
157
+ int ret;
158
+
159
+ mock_clear ();
160
+
161
+ p_buf = pnal_buf_alloc (PF_FRAME_BUFFER_SIZE);
162
+ memcpy (p_buf->payload , get_wrong_length_req, sizeof (get_wrong_length_req));
163
+ p_buf->len = sizeof (get_wrong_length_req);
164
+
165
+ ret = pf_eth_recv (mock_os_data.eth_if_handle , net, p_buf);
166
+
167
+ EXPECT_EQ (ret, 1 ); // Incoming frame is handled
168
+ EXPECT_EQ (mock_os_data.eth_send_count , 0 ); // Drop malformed frame
169
+
170
+ EXPECT_EQ (appdata.call_counters .led_off_calls , 1 );
171
+ EXPECT_EQ (appdata.call_counters .led_on_calls , 0 );
172
+ EXPECT_EQ (appdata.call_counters .state_calls , 0 );
173
+ EXPECT_EQ (appdata.call_counters .connect_calls , 0 );
174
+ EXPECT_EQ (appdata.call_counters .release_calls , 0 );
175
+ EXPECT_EQ (appdata.call_counters .dcontrol_calls , 0 );
176
+ EXPECT_EQ (appdata.call_counters .ccontrol_calls , 0 );
177
+ EXPECT_EQ (appdata.call_counters .read_calls , 0 );
178
+ EXPECT_EQ (appdata.call_counters .write_calls , 0 );
179
+ }
180
+
121
181
TEST_F (DcpTest, DcpRunTest)
122
182
{
123
183
pnal_buf_t * p_buf;
0 commit comments