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