1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <cstddef>
16 #include <cstdint>
17 #include <unistd.h>
18 #include <string>
19 #include "dhcpclientfun_fuzzer.h"
20 #include "dhcp_client_state_machine.h"
21 #include "dhcp_ipv6_client.h"
22 #include "dhcp_socket.h"
23 #include "securec.h"
24 #include <linux/rtnetlink.h>
25 #include <netinet/icmp6.h>
26 
27 namespace OHOS {
28 namespace DHCP {
29 std::string g_ifname = "wlan0";
30 constexpr size_t DHCP_SLEEP_2 = 2;
31 constexpr int TWO = 2;
32 constexpr int THREE = 3;
33 constexpr size_t U32_AT_SIZE_ZERO = 4;
34 std::unique_ptr<OHOS::DHCP::DhcpClientStateMachine> dhcpClient =
35     std::make_unique<OHOS::DHCP::DhcpClientStateMachine>(g_ifname);
36 std::unique_ptr<OHOS::DHCP::DhcpIpv6Client> ipv6Client = std::make_unique<OHOS::DHCP::DhcpIpv6Client>("wlan0");
37 
DhcpClientStateMachineFunFuzzerTest(const uint8_t *data, size_t size)38 bool DhcpClientStateMachineFunFuzzerTest(const uint8_t *data, size_t size)
39 {
40     if (dhcpClient == nullptr) {
41         return false;
42     }
43     time_t curTimestamp = time(nullptr);
44     if (curTimestamp == static_cast<time_t>(-1)) {
45         return false;
46     }
47     dhcpClient->DhcpRequestHandle(curTimestamp);
48     sleep(DHCP_SLEEP_2);
49     dhcpClient->DhcpResponseHandle(curTimestamp);
50     return true;
51 }
52 
DhcpIpv6FunFuzzerTest(const uint8_t *data, size_t size)53 bool DhcpIpv6FunFuzzerTest(const uint8_t *data, size_t size)
54 {
55     if (ipv6Client == nullptr) {
56         return false;
57     }
58     if (data == nullptr) {
59         return false;
60     }
61     if (size <= 0) {
62         return false;
63     }
64     ipv6Client->handleKernelEvent(data, static_cast<int>(size));
65     return true;
66 }
67 
68 /* Dhcp Ipv6 Client */
IsRunningFuzzerTest(const uint8_t *data, size_t size)69 void IsRunningFuzzerTest(const uint8_t *data, size_t size)
70 {
71     ipv6Client->IsRunning();
72 }
73 
SetCallbackFuzzerTest(const uint8_t *data, size_t size)74 void SetCallbackFuzzerTest(const uint8_t *data, size_t size)
75 {
76     std::function<void(const std::string ifname, DhcpIpv6Info &info)> callback;
77     ipv6Client->SetCallback(callback);
78 }
79 
StartIpv6ThreadFuzzerTest(const uint8_t *data, size_t size)80 void StartIpv6ThreadFuzzerTest(const uint8_t *data, size_t size)
81 {
82     std::string ifname = "wlan1";
83     bool isIpv6 = true;
84     ipv6Client->StartIpv6Thread(ifname, isIpv6);
85 }
86 
Ipv6AddrScope2TypeFuzzerTest(const uint8_t *data, size_t size)87 void Ipv6AddrScope2TypeFuzzerTest(const uint8_t *data, size_t size)
88 {
89     unsigned int scope = static_cast<unsigned int>(data[0]);
90     ipv6Client->ipv6AddrScope2Type(scope);
91 }
92 
GetAddrTypeFuzzerTest(const uint8_t *data, size_t size)93 void GetAddrTypeFuzzerTest(const uint8_t *data, size_t size)
94 {
95     ipv6Client->getAddrType(nullptr);
96 
97     struct in6_addr addr;
98     ipv6Client->getAddrType(&addr);
99 
100     inet_pton(AF_INET6, "2001:0db8:85a3:0000:0000:8a2e:0370:7334", &addr);
101     ipv6Client->getAddrType(&addr);
102 
103     inet_pton(AF_INET6, "ff02:0000:0000:0000:0000:0000:0000:0001", &addr);
104     ipv6Client->getAddrType(&addr);
105 
106     inet_pton(AF_INET6, "fe80::", &addr);
107     ipv6Client->getAddrType(&addr);
108 
109     inet_pton(AF_INET6, "fec0::", &addr);
110     ipv6Client->getAddrType(&addr);
111 
112     inet_pton(AF_INET6, "::", &addr);
113     ipv6Client->getAddrType(&addr);
114 
115     inet_pton(AF_INET6, "::1", &addr);
116     ipv6Client->getAddrType(&addr);
117 
118     inet_pton(AF_INET6, "::ffff:192.0.2.128", &addr);
119     ipv6Client->getAddrType(&addr);
120 
121     inet_pton(AF_INET6, "::ffff:192.0.2.128", &addr);
122     ipv6Client->getAddrType(&addr);
123 }
124 
GetAddrScopeFuzzerTest(const uint8_t *data, size_t size)125 void GetAddrScopeFuzzerTest(const uint8_t *data, size_t size)
126 {
127     ipv6Client->getAddrType(nullptr);
128 
129     struct in6_addr addr;
130     ipv6Client->getAddrScope(&addr);
131 }
132 
GetIpv6PrefixFuzzerTest(const uint8_t *data, size_t size)133 void GetIpv6PrefixFuzzerTest(const uint8_t *data, size_t size)
134 {
135     char ipv6Addr[DHCP_INET6_ADDRSTRLEN] = "1122:2233:3344:0000:0000:4433:3322:2211";
136     char ipv6PrefixBuf[DHCP_INET6_ADDRSTRLEN] = {0};
137     uint8_t prefixLen = static_cast<uint8_t>(data[0]);
138     ipv6Client->GetIpv6Prefix(nullptr, nullptr, prefixLen);
139     ipv6Client->GetIpv6Prefix(ipv6Addr, ipv6PrefixBuf, prefixLen);
140 }
141 
GetIpFromS6AddressFuzzerTest(const uint8_t *data, size_t size)142 void GetIpFromS6AddressFuzzerTest(const uint8_t *data, size_t size)
143 {
144     int family = static_cast<int>(data[0]);
145     int buflen = static_cast<int>(data[0]);
146     struct in6_addr addr;
147     char buf[INET6_ADDRSTRLEN] = {0};
148     ipv6Client->GetIpFromS6Address(&addr, family, buf, buflen);
149 }
150 
OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)151 void OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)
152 {
153     int prefixLen = static_cast<int>(data[0]);
154     int ifaIndex = static_cast<int>(data[0]);
155     ipv6Client->onIpv6AddressAddEvent(nullptr, prefixLen, ifaIndex);
156 
157     struct in6_addr data1;
158     ipv6Client->onIpv6AddressAddEvent(&data1, prefixLen, ifaIndex);
159 }
160 
AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)161 void AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)
162 {
163     int len = static_cast<int>(data[0]);
164     ipv6Client->AddIpv6Address(nullptr, len);
165 }
166 
OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)167 void OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)
168 {
169     int len = static_cast<int>(data[0]);
170     int ifaIndex = static_cast<int>(data[0]);
171     ipv6Client->onIpv6DnsAddEvent(nullptr, len, ifaIndex);
172 
173     struct nd_opt_hdr data1;
174     ipv6Client->onIpv6DnsAddEvent(&data1, len, ifaIndex);
175 }
176 
OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)177 void OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)
178 {
179     char *gateway = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
180     char *dst = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
181     int ifaIndex = static_cast<int>(data[0]);
182     ipv6Client->onIpv6RouteAddEvent(gateway, dst, ifaIndex);
183 }
184 
CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)185 void CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)
186 {
187     ipv6Client->createKernelSocket();
188 }
189 
ResetFuzzerTest(const uint8_t *data, size_t size)190 void ResetFuzzerTest(const uint8_t *data, size_t size)
191 {
192     ipv6Client->Reset();
193 }
194 
GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)195 void GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)
196 {
197     ipv6Client->getIpv6RouteAddr();
198 }
199 
DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)200 void DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)
201 {
202     ipv6Client->DhcpIPV6Stop();
203 }
204 
Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)205 void Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)
206 {
207     ipv6Client->Ipv6TimerCallback();
208 }
209 
StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)210 void StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
211 {
212     ipv6Client->StartIpv6Timer();
213 }
214 
StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)215 void StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
216 {
217     ipv6Client->StopIpv6Timer();
218 }
219 
220 /* Dhcp Ipv6 Event */
SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)221 void SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)
222 {
223     ipv6Client->setSocketFilter(nullptr);
224 
225     struct sockaddr_nl addr;
226     ipv6Client->setSocketFilter(&addr);
227 }
228 
ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)229 void ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)
230 {
231     int len = static_cast<int>(data[0]);
232     ipv6Client->parseNdUserOptMessage(nullptr, len);
233 
234     struct nduseroptmsg data1;
235     ipv6Client->parseNdUserOptMessage(&data1, len);
236 }
237 
ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)238 void ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)
239 {
240     ipv6Client->parseNDRouteMessage(nullptr);
241 
242     struct nlmsghdr msg;
243     ipv6Client->parseNDRouteMessage(&msg);
244 }
245 
ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)246 void ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)
247 {
248     ipv6Client->parseNewneighMessage(0);
249 }
250 
FillRouteDataFuzzerTest(const uint8_t *data, size_t size)251 void FillRouteDataFuzzerTest(const uint8_t *data, size_t size)
252 {
253     int len = static_cast<int>(data[0]);
254     ipv6Client->fillRouteData(nullptr, len);
255     const int nlmsgHdrsize = 16;
256     char buff[nlmsgHdrsize];
257     ipv6Client->fillRouteData(buff, len);
258 }
259 
HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)260 void HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)
261 {
262     int len = static_cast<int>(data[0]);
263     ipv6Client->handleKernelEvent(nullptr, len);
264 }
265 
266 /* Dhcp Socket */
CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)267 void CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)
268 {
269     int sockFd = static_cast<int>(data[0]);
270     CreateKernelSocket(&sockFd);
271 }
272 
BindRawSocketFuzzerTest(const uint8_t *data, size_t size)273 void BindRawSocketFuzzerTest(const uint8_t *data, size_t size)
274 {
275     int rawFd = static_cast<int>(data[0]);
276     int ifaceIndex = static_cast<int>(data[0]);
277     uint8_t ifaceAddr[6] = {0};
278     BindRawSocket(rawFd, ifaceIndex, ifaceAddr);
279 }
280 
BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)281 void BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)
282 {
283     int sockFd = static_cast<int>(data[0]);
284     char ifaceName[5] = {0};
285     uint32_t sockIp = static_cast<uint32_t>(data[0]);
286     int sockPort = static_cast<int>(data[0]);
287     bool bCast = true;
288     BindKernelSocket(sockFd, ifaceName, sockIp, sockPort, bCast);
289 }
290 
SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)291 void SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)
292 {
293     struct DhcpPacket *sendPacket = nullptr;
294     uint32_t srcIp = static_cast<uint32_t>(data[0]);
295     uint32_t destIp = static_cast<uint32_t>(data[0]);
296     SendDhcpPacket(sendPacket, srcIp, destIp);
297 }
298 
CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)299 void CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)
300 {
301     int count = static_cast<int>(data[0]);
302     int totLen = static_cast<int>(data[0]);
303     CheckReadBytes(count, totLen);
304 }
305 
CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)306 void CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)
307 {
308     int totLen = static_cast<int>(data[0]);
309     CheckUdpPacket(nullptr, totLen);
310 
311     struct UdpDhcpPacket pPacket;
312     CheckUdpPacket(&pPacket, totLen);
313 
314     pPacket.ip.protocol = 0;
315     pPacket.ip.version = 0;
316     CheckUdpPacket(&pPacket, totLen);
317 
318     pPacket.ip.ihl = 0;
319     CheckUdpPacket(&pPacket, totLen);
320 
321     pPacket.udp.dest = 0;
322     CheckUdpPacket(&pPacket, totLen);
323 
324     pPacket.udp.len = 0;
325     CheckUdpPacket(&pPacket, totLen);
326 }
327 
CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)328 void CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)
329 {
330     int bytes = static_cast<int>(data[0]);
331     CheckPacketIpSum(nullptr, bytes);
332 
333     struct UdpDhcpPacket pPacket;
334     pPacket.ip.check = static_cast<uint16_t>(data[0]);
335     CheckPacketIpSum(&pPacket, bytes);
336 }
337 
CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)338 void CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)
339 {
340     int bytes = static_cast<int>(data[0]);
341     CheckPacketUdpSum(nullptr, bytes);
342 
343     struct UdpDhcpPacket pPacket;
344     pPacket.udp.check = static_cast<uint16_t>(data[0]);
345     pPacket.udp.len = static_cast<uint16_t>(data[0]);
346     pPacket.ip.saddr = static_cast<uint32_t>(data[0]);
347     pPacket.ip.daddr = static_cast<uint32_t>(data[0]);
348     CheckPacketUdpSum(&pPacket, bytes);
349 }
350 
GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)351 void GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)
352 {
353     int rawFd = static_cast<int>(data[0]);
354     GetDhcpRawPacket(nullptr, rawFd);
355 
356     struct DhcpPacket getPacket;
357     getPacket.cookie = static_cast<int32_t>(data[0]);
358     GetDhcpRawPacket(&getPacket, rawFd);
359 }
360 
361 /* Dhcp Client State Machine */
CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)362 void CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)
363 {
364     dhcpClient->m_sigSockFds[0] = 0;
365     dhcpClient->m_sigSockFds[1] = 1;
366     dhcpClient->CloseSignalHandle();
367 }
368 
RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)369 void RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)
370 {
371     dhcpClient->m_cltCnf.getMode = 0;
372     DhcpClientStateMachine machine("wlan0");
373     dhcpClient->RunGetIPThreadFunc(machine);
374 }
375 
InitConfigFuzzerTest(const uint8_t *data, size_t size)376 void InitConfigFuzzerTest(const uint8_t *data, size_t size)
377 {
378     std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
379     bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
380     dhcpClient->InitConfig(ifname, isIpv6);
381 }
382 
InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)383 void InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)
384 {
385     std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
386     bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
387     dhcpClient->InitSpecifiedClientCfg(ifname, isIpv6);
388 }
389 
GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)390 void GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
391 {
392     dhcpClient->GetClientNetworkInfo();
393 }
394 
ExitIpv4FuzzerTest(const uint8_t *data, size_t size)395 void ExitIpv4FuzzerTest(const uint8_t *data, size_t size)
396 {
397     dhcpClient->ExitIpv4();
398 }
399 
StopIpv4FuzzerTest(const uint8_t *data, size_t size)400 void StopIpv4FuzzerTest(const uint8_t *data, size_t size)
401 {
402     dhcpClient->getIpTimerId = static_cast<uint32_t>(data[0]);
403     dhcpClient->m_slowArpTaskId = 1;
404     dhcpClient->StopIpv4();
405 }
406 
GetActionFuzzerTest(const uint8_t *data, size_t size)407 void GetActionFuzzerTest(const uint8_t *data, size_t size)
408 {
409     dhcpClient->m_action = ActionMode::ACTION_START_NEW;
410     dhcpClient->GetAction();
411 }
412 
DhcpInitFuzzerTest(const uint8_t *data, size_t size)413 void DhcpInitFuzzerTest(const uint8_t *data, size_t size)
414 {
415     dhcpClient->DhcpInit();
416 }
417 
DhcpStopFuzzerTest(const uint8_t *data, size_t size)418 void DhcpStopFuzzerTest(const uint8_t *data, size_t size)
419 {
420     dhcpClient->m_dhcp4State = 1;
421     dhcpClient->DhcpStop();
422 }
423 
InitSocketFdFuzzerTest(const uint8_t *data, size_t size)424 void InitSocketFdFuzzerTest(const uint8_t *data, size_t size)
425 {
426     dhcpClient->m_sockFd = -1;
427     dhcpClient->InitSocketFd();
428 
429     dhcpClient->m_sockFd = 1;
430     dhcpClient->m_socketMode = SOCKET_MODE_RAW;
431     dhcpClient->InitSocketFd();
432 
433     dhcpClient->m_socketMode = SOCKET_MODE_KERNEL;
434     dhcpClient->InitSocketFd();
435 }
436 
GetPacketReadSockFdFuzzerTest(const uint8_t *data, size_t size)437 void GetPacketReadSockFdFuzzerTest(const uint8_t *data, size_t size)
438 {
439     dhcpClient->m_sockFd = 1;
440     dhcpClient->GetPacketReadSockFd();
441 }
442 
GetSigReadSockFdFuzzerTest(const uint8_t *data, size_t size)443 void GetSigReadSockFdFuzzerTest(const uint8_t *data, size_t size)
444 {
445     dhcpClient->m_sigSockFds[0] = 1;
446     dhcpClient->GetSigReadSockFd();
447 }
448 
GetDhcpTransIDFuzzerTest(const uint8_t *data, size_t size)449 void GetDhcpTransIDFuzzerTest(const uint8_t *data, size_t size)
450 {
451     dhcpClient->m_transID = 1;
452     dhcpClient->GetDhcpTransID();
453 }
454 
SetSocketModeFuzzerTest(const uint8_t *data, size_t size)455 void SetSocketModeFuzzerTest(const uint8_t *data, size_t size)
456 {
457     uint32_t mode = static_cast<uint32_t>(data[0]);
458     dhcpClient->SetSocketMode(mode);
459 }
460 
ExecDhcpRenewFuzzerTest(const uint8_t *data, size_t size)461 void ExecDhcpRenewFuzzerTest(const uint8_t *data, size_t size)
462 {
463     dhcpClient->m_dhcp4State = DHCP_STATE_INIT;
464     dhcpClient->ExecDhcpRenew();
465 
466     dhcpClient->m_dhcp4State = DHCP_STATE_SELECTING;
467     dhcpClient->ExecDhcpRenew();
468 
469     dhcpClient->m_dhcp4State = DHCP_STATE_REQUESTING;
470     dhcpClient->ExecDhcpRenew();
471 
472     dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
473     dhcpClient->ExecDhcpRenew();
474 
475     dhcpClient->m_dhcp4State = DHCP_STATE_RENEWED;
476     dhcpClient->ExecDhcpRenew();
477 
478     dhcpClient->m_dhcp4State = DHCP_STATE_BOUND;
479     dhcpClient->ExecDhcpRenew();
480 
481     dhcpClient->m_dhcp4State = DHCP_STATE_RENEWING;
482     dhcpClient->ExecDhcpRenew();
483 
484     dhcpClient->m_dhcp4State = DHCP_STATE_REBINDING;
485     dhcpClient->ExecDhcpRenew();
486 }
487 
ExecDhcpReleaseFuzzerTest(const uint8_t *data, size_t size)488 void ExecDhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
489 {
490     dhcpClient->ExecDhcpRelease();
491 
492     dhcpClient->m_dhcp4State = DHCP_STATE_BOUND;
493     dhcpClient->ExecDhcpRelease();
494 }
495 
GetRandomIdFuzzerTest(const uint8_t *data, size_t size)496 void GetRandomIdFuzzerTest(const uint8_t *data, size_t size)
497 {
498     dhcpClient->GetRandomId();
499 }
500 
InitSelectingFuzzerTest(const uint8_t *data, size_t size)501 void InitSelectingFuzzerTest(const uint8_t *data, size_t size)
502 {
503     time_t timestamp = 1;
504     dhcpClient->m_transID = static_cast<uint32_t>(data[0]);
505     dhcpClient->m_requestedIp4 = static_cast<uint32_t>(data[0]);
506     dhcpClient->InitSelecting(timestamp);
507 
508     dhcpClient->m_sentPacketNum = TIMEOUT_TIMES_MAX + 1;
509     dhcpClient->InitSelecting(timestamp);
510 }
511 
DhcpRebootFuzzerTest(const uint8_t *data, size_t size)512 void DhcpRebootFuzzerTest(const uint8_t *data, size_t size)
513 {
514     uint32_t transid = static_cast<uint32_t>(data[0]);
515     uint32_t reqip = static_cast<uint32_t>(data[0]);
516     dhcpClient->DhcpReboot(transid, reqip);
517 }
518 
SendRebootFuzzerTest(const uint8_t *data, size_t size)519 void SendRebootFuzzerTest(const uint8_t *data, size_t size)
520 {
521     uint32_t targetIp = static_cast<uint32_t>(data[0]);
522     time_t timestamp = 1;
523     dhcpClient->m_sentPacketNum = 1;
524     dhcpClient->SendReboot(targetIp, timestamp);
525 
526     dhcpClient->m_sentPacketNum = TWO;
527     dhcpClient->SendReboot(targetIp, timestamp);
528 }
529 
RebootFuzzerTest(const uint8_t *data, size_t size)530 void RebootFuzzerTest(const uint8_t *data, size_t size)
531 {
532     time_t timestamp = 1;
533     dhcpClient->Reboot(timestamp);
534 }
535 
RequestingFuzzerTest(const uint8_t *data, size_t size)536 void RequestingFuzzerTest(const uint8_t *data, size_t size)
537 {
538     time_t timestamp = 1;
539     dhcpClient->m_sentPacketNum = TIMEOUT_TIMES_MAX + 1;
540     dhcpClient->Requesting(timestamp);
541 
542     dhcpClient->m_sentPacketNum = TWO;
543     dhcpClient->m_dhcp4State = DHCP_STATE_RENEWED;
544     dhcpClient->Requesting(timestamp);
545 
546     dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
547     dhcpClient->Requesting(timestamp);
548 }
549 
RenewingFuzzerTest(const uint8_t *data, size_t size)550 void RenewingFuzzerTest(const uint8_t *data, size_t size)
551 {
552     time_t timestamp = 1;
553     dhcpClient->m_dhcp4State = DHCP_STATE_RENEWING;
554     dhcpClient->Renewing(timestamp);
555 
556     dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
557     dhcpClient->Renewing(timestamp);
558 }
559 
RebindingFuzzerTest(const uint8_t *data, size_t size)560 void RebindingFuzzerTest(const uint8_t *data, size_t size)
561 {
562     time_t timestamp = 1;
563     dhcpClient->m_dhcp4State = DHCP_STATE_REBINDING;
564     dhcpClient->Rebinding(timestamp);
565 
566     dhcpClient->m_dhcp4State = DHCP_STATE_RELEASED;
567     dhcpClient->Rebinding(timestamp);
568 }
569 
DecliningFuzzerTest(const uint8_t *data, size_t size)570 void DecliningFuzzerTest(const uint8_t *data, size_t size)
571 {
572     time_t timestamp = 1;
573     dhcpClient->Declining(timestamp);
574 
575     dhcpClient->m_conflictCount = THREE;
576     dhcpClient->Declining(timestamp);
577 }
578 
DhcpRequestHandleFuzzerTest(const uint8_t *data, size_t size)579 void DhcpRequestHandleFuzzerTest(const uint8_t *data, size_t size)
580 {
581     time_t timestamp = 1;
582     dhcpClient->m_dhcp4State = static_cast<int>(data[0]);
583     dhcpClient->DhcpRequestHandle(timestamp);
584 }
585 
DhcpOfferPacketHandleFuzzerTest(const uint8_t *data, size_t size)586 void DhcpOfferPacketHandleFuzzerTest(const uint8_t *data, size_t size)
587 {
588     uint8_t type = static_cast<uint8_t>(data[0]);
589     struct DhcpPacket packet;
590     time_t timestam = 1;
591     dhcpClient->DhcpOfferPacketHandle(type, nullptr, timestam);
592     dhcpClient->DhcpOfferPacketHandle(type, &packet, timestam);
593 }
594 
ParseNetworkServerIdInfoFuzzerTest(const uint8_t *data, size_t size)595 void ParseNetworkServerIdInfoFuzzerTest(const uint8_t *data, size_t size)
596 {
597     dhcpClient->ParseNetworkServerIdInfo(nullptr, nullptr);
598 
599     struct DhcpPacket packet;
600     struct DhcpIpResult result;
601     dhcpClient->ParseNetworkServerIdInfo(&packet, &result);
602 }
603 
ParseNetworkDnsInfoFuzzerTest(const uint8_t *data, size_t size)604 void ParseNetworkDnsInfoFuzzerTest(const uint8_t *data, size_t size)
605 {
606     dhcpClient->ParseNetworkDnsInfo(nullptr, nullptr);
607 
608     struct DhcpPacket packet;
609     struct DhcpIpResult result;
610     dhcpClient->ParseNetworkDnsInfo(&packet, &result);
611 }
612 
ParseNetworkDnsValueFuzzerTest(const uint8_t *data, size_t size)613 void ParseNetworkDnsValueFuzzerTest(const uint8_t *data, size_t size)
614 {
615     struct DhcpIpResult result;
616     uint32_t uData = static_cast<uint32_t>(data[0]);
617     size_t len = static_cast<size_t>(data[0]);
618     int count = static_cast<int>(data[0]);
619     dhcpClient->ParseNetworkDnsValue(nullptr, uData, len, count);
620     dhcpClient->ParseNetworkDnsValue(&result, uData, len, count);
621 }
622 
ParseNetworkInfoFuzzerTest(const uint8_t *data, size_t size)623 void ParseNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
624 {
625     dhcpClient->ParseNetworkInfo(nullptr, nullptr);
626 
627     struct DhcpPacket packet;
628     struct DhcpIpResult result;
629     dhcpClient->ParseNetworkInfo(&packet, &result);
630 }
631 
FormatStringFuzzerTest(const uint8_t *data, size_t size)632 void FormatStringFuzzerTest(const uint8_t *data, size_t size)
633 {
634     dhcpClient->FormatString(nullptr);
635 
636     struct DhcpIpResult result;
637     memset_s(result.strYiaddr, sizeof(result.strYiaddr), 0, sizeof(result.strYiaddr));
638     dhcpClient->FormatString(&result);
639 
640     memset_s(result.strOptServerId, sizeof(result.strOptServerId), 0, sizeof(result.strOptServerId));
641     dhcpClient->FormatString(&result);
642 
643     memset_s(result.strOptSubnet, sizeof(result.strOptSubnet), 0, sizeof(result.strOptSubnet));
644     dhcpClient->FormatString(&result);
645 
646     memset_s(result.strOptDns1, sizeof(result.strOptDns1), 0, sizeof(result.strOptDns1));
647     dhcpClient->FormatString(&result);
648 
649     memset_s(result.strOptDns2, sizeof(result.strOptDns2), 0, sizeof(result.strOptDns2));
650     dhcpClient->FormatString(&result);
651 
652     memset_s(result.strOptRouter1, sizeof(result.strOptRouter1), 0, sizeof(result.strOptRouter1));
653     dhcpClient->FormatString(&result);
654 
655     memset_s(result.strOptRouter2, sizeof(result.strOptRouter2), 0, sizeof(result.strOptRouter2));
656     dhcpClient->FormatString(&result);
657 
658     memset_s(result.strOptVendor, sizeof(result.strOptVendor), 0, sizeof(result.strOptVendor));
659     dhcpClient->FormatString(&result);
660 }
661 
GetDHCPServerHostNameFuzzerTest(const uint8_t *data, size_t size)662 void GetDHCPServerHostNameFuzzerTest(const uint8_t *data, size_t size)
663 {
664     dhcpClient->GetDHCPServerHostName(nullptr, nullptr);
665 
666     struct DhcpPacket packet;
667     struct DhcpIpResult result;
668     dhcpClient->GetDHCPServerHostName(&packet, &result);
669 }
670 
ParseNetworkVendorInfoFuzzerTest(const uint8_t *data, size_t size)671 void ParseNetworkVendorInfoFuzzerTest(const uint8_t *data, size_t size)
672 {
673     dhcpClient->ParseNetworkVendorInfo(nullptr, nullptr);
674 
675     struct DhcpPacket packet;
676     struct DhcpIpResult result;
677     dhcpClient->ParseNetworkVendorInfo(&packet, &result);
678 }
679 
DhcpAckOrNakPacketHandleFuzzerTest(const uint8_t *data, size_t size)680 void DhcpAckOrNakPacketHandleFuzzerTest(const uint8_t *data, size_t size)
681 {
682     uint8_t type = static_cast<uint8_t>(data[0]);
683     struct DhcpPacket packet;
684     time_t timestamp = 1;
685     dhcpClient->DhcpAckOrNakPacketHandle(type, nullptr, timestamp);
686     dhcpClient->DhcpAckOrNakPacketHandle(type, &packet, timestamp);
687 }
688 
ParseDhcpAckPacketFuzzerTest(const uint8_t *data, size_t size)689 void ParseDhcpAckPacketFuzzerTest(const uint8_t *data, size_t size)
690 {
691     dhcpClient->ParseDhcpAckPacket(nullptr, 1);
692 
693     struct DhcpPacket packet;
694     time_t timestamp = 1;
695     dhcpClient->ParseDhcpAckPacket(&packet, timestamp);
696 }
697 
ParseDhcpNakPacketFuzzerTest(const uint8_t *data, size_t size)698 void ParseDhcpNakPacketFuzzerTest(const uint8_t *data, size_t size)
699 {
700     dhcpClient->ParseDhcpNakPacket(nullptr, 1);
701 
702     struct DhcpPacket packet;
703     time_t timestamp = 1;
704     dhcpClient->ParseDhcpNakPacket(&packet, timestamp);
705 }
706 
GetDhcpOfferFuzzerTest(const uint8_t *data, size_t size)707 void GetDhcpOfferFuzzerTest(const uint8_t *data, size_t size)
708 {
709     dhcpClient->GetDhcpOffer(nullptr, 1);
710 
711     struct DhcpPacket packet;
712     dhcpClient->GetDhcpOffer(&packet, 1);
713 }
714 
DhcpResponseHandleFuzzerTest(const uint8_t *data, size_t size)715 void DhcpResponseHandleFuzzerTest(const uint8_t *data, size_t size)
716 {
717     dhcpClient->DhcpResponseHandle(1);
718 }
719 
SignalReceiverFuzzerTest(const uint8_t *data, size_t size)720 void SignalReceiverFuzzerTest(const uint8_t *data, size_t size)
721 {
722     dhcpClient->SignalReceiver();
723 }
724 
SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)725 void SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)
726 {
727     int state = static_cast<int>(data[0]);
728     dhcpClient->SetIpv4State(state);
729 }
730 
PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)731 void PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)
732 {
733     char ifname[3] = {0};
734     int code = static_cast<int>(data[0]);
735     struct DhcpIpResult result;
736     dhcpClient->PublishDhcpResultEvent(nullptr, code, &result);
737     dhcpClient->PublishDhcpResultEvent(ifname, code, nullptr);
738     dhcpClient->PublishDhcpResultEvent(ifname, code, &result);
739 }
740 
GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)741 void GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)
742 {
743     struct DhcpPacket packet;
744     uint8_t type = static_cast<uint8_t>(data[0]);
745     dhcpClient->GetPacketHeaderInfo(&packet, type);
746 }
747 
GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)748 void GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)
749 {
750     dhcpClient->GetPacketCommonInfo(nullptr);
751 
752     struct DhcpPacket packet;
753     memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
754     packet.options[0] = END_OPTION;
755     dhcpClient->GetPacketCommonInfo(&packet);
756 }
757 
AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)758 void AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)
759 {
760     dhcpClient->AddClientIdToOpts(nullptr);
761 
762     struct DhcpPacket packet;
763     memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
764     packet.options[0] = END_OPTION;
765     dhcpClient->AddClientIdToOpts(&packet);
766 }
767 
AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)768 void AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)
769 {
770     dhcpClient->AddHostNameToOpts(nullptr);
771 
772     struct DhcpPacket packet;
773     memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
774     packet.options[0] = END_OPTION;
775     dhcpClient->AddHostNameToOpts(&packet);
776 }
777 
AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)778 void AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)
779 {
780     struct DhcpPacket packet;
781     memset_s(&packet, sizeof(struct DhcpPacket), 0, sizeof(struct DhcpPacket));
782     packet.options[0] = END_OPTION;
783     int option = 2;
784     std::string value = "wlan1";
785     dhcpClient->AddStrToOpts(&packet, option, value);
786 }
787 
DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)788 void DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)
789 {
790     uint32_t transid = static_cast<uint32_t>(data[0]);
791     uint32_t requestip = static_cast<uint32_t>(data[0]);
792     dhcpClient->DhcpDiscover(transid, requestip);
793 }
794 
DhcpRequestFuzzerTest(const uint8_t *data, size_t size)795 void DhcpRequestFuzzerTest(const uint8_t *data, size_t size)
796 {
797     uint32_t transid = static_cast<uint32_t>(data[0]);
798     uint32_t reqip = static_cast<uint32_t>(data[0]);
799     uint32_t servip = static_cast<uint32_t>(data[0]);
800     dhcpClient->DhcpRequest(transid, reqip, servip);
801 }
802 
DhcpRenewFuzzerTest(const uint8_t *data, size_t size)803 void DhcpRenewFuzzerTest(const uint8_t *data, size_t size)
804 {
805     uint32_t transId = static_cast<uint32_t>(data[0]);
806     uint32_t clientIp = static_cast<uint32_t>(data[0]);
807     uint32_t serverIp = static_cast<uint32_t>(data[0]);
808     dhcpClient->DhcpRenew(transId, clientIp, serverIp);
809 }
810 
DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)811 void DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
812 {
813     uint32_t clientIp = static_cast<uint32_t>(data[0]);
814     uint32_t serverIp = static_cast<uint32_t>(data[0]);
815     dhcpClient->DhcpRelease(clientIp, serverIp);
816 }
817 
DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)818 void DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)
819 {
820     uint32_t transId = static_cast<uint32_t>(data[0]);
821     uint32_t clientIp = static_cast<uint32_t>(data[0]);
822     uint32_t serverIp = static_cast<uint32_t>(data[0]);
823     dhcpClient->DhcpDecline(transId, clientIp, serverIp);
824 }
825 
IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)826 void IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)
827 {
828     dhcpClient->IpConflictDetect();
829 }
830 
FastArpDetectFuzzerTest(const uint8_t *data, size_t size)831 void FastArpDetectFuzzerTest(const uint8_t *data, size_t size)
832 {
833     dhcpClient->FastArpDetect();
834 }
835 
SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)836 void SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)
837 {
838     bool isReachable = true;
839     dhcpClient->SlowArpDetectCallback(isReachable);
840 
841     isReachable = false;
842     dhcpClient->SlowArpDetectCallback(isReachable);
843 }
844 
SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)845 void SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)
846 {
847     time_t timestamp = 1;
848     dhcpClient->m_sentPacketNum = THREE;
849     dhcpClient->SlowArpDetect(timestamp);
850 
851     dhcpClient->m_sentPacketNum = TWO;
852     dhcpClient->SlowArpDetect(timestamp);
853 
854     dhcpClient->m_sentPacketNum = 0;
855     dhcpClient->SlowArpDetect(timestamp);
856 }
857 
IsArpReachableFuzzerTest(const uint8_t *data, size_t size)858 void IsArpReachableFuzzerTest(const uint8_t *data, size_t size)
859 {
860     uint32_t timeoutMillis = static_cast<uint32_t>(data[0]);
861     std::string ipAddress = std::string(reinterpret_cast<const char *>(data), size);
862     dhcpClient->IsArpReachable(timeoutMillis, ipAddress);
863 }
864 
GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)865 void GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)
866 {
867     std::string targetBssid = std::string(reinterpret_cast<const char *>(data), size);
868     struct IpInfoCached ipcached;
869     dhcpClient->GetCachedDhcpResult(targetBssid, ipcached);
870 }
871 
SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)872 void SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)
873 {
874     struct DhcpIpResult ipResult;
875     dhcpClient->SaveIpInfoInLocalFile(ipResult);
876 }
877 
TryCachedIpFuzzerTest(const uint8_t *data, size_t size)878 void TryCachedIpFuzzerTest(const uint8_t *data, size_t size)
879 {
880     dhcpClient->TryCachedIp();
881 }
882 
SetConfigurationFuzzerTest(const uint8_t *data, size_t size)883 void SetConfigurationFuzzerTest(const uint8_t *data, size_t size)
884 {
885     struct RouterCfg routerCfg;
886     dhcpClient->SetConfiguration(routerCfg);
887 }
888 
GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)889 void GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)
890 {
891     dhcpClient->GetIpTimerCallback();
892 
893     dhcpClient->m_action = ACTION_RENEW_T1;
894     dhcpClient->GetIpTimerCallback();
895 
896     dhcpClient->m_action = ACTION_RENEW_T3;
897     dhcpClient->GetIpTimerCallback();
898 
899     dhcpClient->m_action = ACTION_START_NEW;
900     dhcpClient->GetIpTimerCallback();
901 }
902 
StartTimerFuzzerTest(const uint8_t *data, size_t size)903 void StartTimerFuzzerTest(const uint8_t *data, size_t size)
904 {
905     uint32_t timerId = static_cast<uint32_t>(data[0]);
906     TimerType type = TimerType::TIMER_REBIND_DELAY;
907     int64_t interval = static_cast<int64_t>(data[0]);
908     bool once = (static_cast<int>(data[0]) % TWO) ? true : false;
909     dhcpClient->StartTimer(type, timerId, interval, once);
910 
911     type = TimerType::TIMER_REMAINING_DELAY;
912     dhcpClient->StartTimer(type, timerId, interval, once);
913 
914     type = TimerType::TIMER_RENEW_DELAY;
915     dhcpClient->StartTimer(type, timerId, interval, once);
916 }
917 
StopTimerFuzzerTest(const uint8_t *data, size_t size)918 void StopTimerFuzzerTest(const uint8_t *data, size_t size)
919 {
920     uint32_t timerId = static_cast<uint32_t>(data[0]);
921     dhcpClient->StopTimer(timerId);
922 }
923 
RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)924 void RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
925 {
926     dhcpClient->RenewDelayCallback();
927 }
928 
RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)929 void RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
930 {
931     dhcpClient->RebindDelayCallback();
932 }
933 
RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)934 void RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
935 {
936     dhcpClient->RemainingDelayCallback();
937 }
938 
SendStopSignalFuzzerTest(const uint8_t *data, size_t size)939 void SendStopSignalFuzzerTest(const uint8_t *data, size_t size)
940 {
941     dhcpClient->SendStopSignal();
942 }
943 
CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)944 void CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)
945 {
946     dhcpClient->CloseAllRenewTimer();
947 }
948 
DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)949 void DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)
950 {
951     IsRunningFuzzerTest(data, size);
952     SetCallbackFuzzerTest(data, size);
953     StartIpv6ThreadFuzzerTest(data, size);
954     Ipv6AddrScope2TypeFuzzerTest(data, size);
955     GetAddrTypeFuzzerTest(data, size);
956     GetAddrScopeFuzzerTest(data, size);
957     GetIpv6PrefixFuzzerTest(data, size);
958     GetIpFromS6AddressFuzzerTest(data, size);
959     OnIpv6AddressAddEventFuzzerTest(data, size);
960     AddIpv6AddressFuzzerTest(data, size);
961     OnIpv6DnsAddEventFuzzerTest(data, size);
962     OnIpv6RouteAddEventFuzzerTest(data, size);
963     CreateKernelSocketFuzzerTest(data, size);
964     ResetFuzzerTest(data, size);
965     GetIpv6RouteAddrFuzzerTest(data, size);
966     DhcpIPV6StopFuzzerTest(data, size);
967     Ipv6TimerCallbackFuzzerTest(data, size);
968     StartIpv6TimerFuzzerTest(data, size);
969     StopIpv6TimerFuzzerTest(data, size);
970 }
971 
DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)972 void DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)
973 {
974     SetSocketFilterFuzzerTest(data, size);
975     ParseNdUserOptMessageFuzzerTest(data, size);
976     ParseNDRouteMessageFuzzerTest(data, size);
977     ParseNewneighMessageFuzzerTest(data, size);
978     FillRouteDataFuzzerTest(data, size);
979     HandleKernelEventFuzzerTest(data, size);
980 }
981 
DhcpSocketFuzzerTest(const uint8_t *data, size_t size)982 void DhcpSocketFuzzerTest(const uint8_t *data, size_t size)
983 {
984     CreateKernelSocketFuzzerTest1(data, size);
985     BindRawSocketFuzzerTest(data, size);
986     BindKernelSocketFuzzerTest(data, size);
987     SendDhcpPacketFuzzerTest(data, size);
988     CheckReadBytesFuzzerTest(data, size);
989     CheckUdpPacketFuzzerTest(data, size);
990     CheckPacketIpSumFuzzerTest(data, size);
991     CheckPacketUdpSumFuzzerTest(data, size);
992     GetDhcpRawPacketFuzzerTest(data, size);
993 }
994 
DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)995 void DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)
996 {
997     CloseSignalHandleFuzzerTest(data, size);
998     RunGetIPThreadFuncFuzzerTest(data, size);
999     InitConfigFuzzerTest(data, size);
1000     InitSpecifiedClientCfgFuzzerTest(data, size);
1001     GetClientNetworkInfoFuzzerTest(data, size);
1002     ExitIpv4FuzzerTest(data, size);
1003     StopIpv4FuzzerTest(data, size);
1004     GetActionFuzzerTest(data, size);
1005     DhcpInitFuzzerTest(data, size);
1006     DhcpStopFuzzerTest(data, size);
1007     InitSocketFdFuzzerTest(data, size);
1008     GetPacketReadSockFdFuzzerTest(data, size);
1009     GetSigReadSockFdFuzzerTest(data, size);
1010     GetDhcpTransIDFuzzerTest(data, size);
1011     SetSocketModeFuzzerTest(data, size);
1012     ExecDhcpRenewFuzzerTest(data, size);
1013     ExecDhcpReleaseFuzzerTest(data, size);
1014     GetRandomIdFuzzerTest(data, size);
1015     InitSelectingFuzzerTest(data, size);
1016     DhcpRebootFuzzerTest(data, size);
1017     SendRebootFuzzerTest(data, size);
1018     RebootFuzzerTest(data, size);
1019     RequestingFuzzerTest(data, size);
1020     RenewingFuzzerTest(data, size);
1021     RebindingFuzzerTest(data, size);
1022     DecliningFuzzerTest(data, size);
1023     DhcpRequestHandleFuzzerTest(data, size);
1024     DhcpOfferPacketHandleFuzzerTest(data, size);
1025     ParseNetworkServerIdInfoFuzzerTest(data, size);
1026     ParseNetworkDnsInfoFuzzerTest(data, size);
1027     ParseNetworkDnsValueFuzzerTest(data, size);
1028     ParseNetworkInfoFuzzerTest(data, size);
1029     FormatStringFuzzerTest(data, size);
1030     GetDHCPServerHostNameFuzzerTest(data, size);
1031     ParseNetworkVendorInfoFuzzerTest(data, size);
1032     DhcpAckOrNakPacketHandleFuzzerTest(data, size);
1033     ParseDhcpAckPacketFuzzerTest(data, size);
1034     ParseDhcpNakPacketFuzzerTest(data, size);
1035     GetDhcpOfferFuzzerTest(data, size);
1036     DhcpResponseHandleFuzzerTest(data, size);
1037     SignalReceiverFuzzerTest(data, size);
1038     SetIpv4StateFuzzerTest(data, size);
1039     PublishDhcpResultEventFuzzerTest(data, size);
1040 }
1041 
DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)1042 void DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)
1043 {
1044     GetPacketHeaderInfoFuzzerTest(data, size);
1045     GetPacketCommonInfoFuzzerTest(data, size);
1046     AddClientIdToOptsFuzzerTest(data, size);
1047     AddHostNameToOptsFuzzerTest(data, size);
1048     AddStrToOptsFuzzerTest(data, size);
1049     DhcpDiscoverFuzzerTest(data, size);
1050     DhcpRequestFuzzerTest(data, size);
1051     DhcpRenewFuzzerTest(data, size);
1052     DhcpReleaseFuzzerTest(data, size);
1053     DhcpDeclineFuzzerTest(data, size);
1054     IpConflictDetectFuzzerTest(data, size);
1055     FastArpDetectFuzzerTest(data, size);
1056     SlowArpDetectCallbackFuzzerTest(data, size);
1057     SlowArpDetectFuzzerTest(data, size);
1058     IsArpReachableFuzzerTest(data, size);
1059     GetCachedDhcpResultFuzzerTest(data, size);
1060     SaveIpInfoInLocalFileFuzzerTest(data, size);
1061     TryCachedIpFuzzerTest(data, size);
1062     SetConfigurationFuzzerTest(data, size);
1063     GetIpTimerCallbackFuzzerTest(data, size);
1064     StartTimerFuzzerTest(data, size);
1065     StopTimerFuzzerTest(data, size);
1066     RenewDelayCallbackFuzzerTest(data, size);
1067     RebindDelayCallbackFuzzerTest(data, size);
1068     RemainingDelayCallbackFuzzerTest(data, size);
1069     SendStopSignalFuzzerTest(data, size);
1070     CloseAllRenewTimerFuzzerTest(data, size);
1071 }
1072 
1073 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)1074 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
1075 {
1076     if ((data == nullptr) || (size <= OHOS::DHCP::U32_AT_SIZE_ZERO)) {
1077         return 0;
1078     }
1079     DhcpClientStateMachineFunFuzzerTest(data, size);
1080     DhcpIpv6FunFuzzerTest(data, size);
1081     DhcpIpv6ClientFuzzerTest(data, size);
1082     DhcpIpv6EventFuzzerTest(data, size);
1083     DhcpSocketFuzzerTest(data, size);
1084     DhcpClientStateMachineFuzzerTest(data, size);
1085     DhcpClientStateMachineExFuzzerTest(data, size);
1086     return 0;
1087 }
1088 } // namespace DHCP
1089 } // namespace OHOS