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     int sockFd = 0;
49     dhcpClient->DhcpResponseHandle(curTimestamp, sockFd);
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     ipv6Client->GetIpFromS6Address(nullptr, family, nullptr, buflen);
147 
148     struct in6_addr addr;
149     char buf[INET6_ADDRSTRLEN] = {0};
150     ipv6Client->GetIpFromS6Address(&addr, family, buf, buflen);
151 }
152 
OnIpv6AddressAddEventFuzzerTest(const uint8_t * data,size_t size)153 void OnIpv6AddressAddEventFuzzerTest(const uint8_t *data, size_t size)
154 {
155     int prefixLen = static_cast<int>(data[0]);
156     int ifaIndex = static_cast<int>(data[0]);
157     ipv6Client->onIpv6AddressAddEvent(nullptr, prefixLen, ifaIndex);
158 
159     struct in6_addr data1;
160     ipv6Client->onIpv6AddressAddEvent(&data1, prefixLen, ifaIndex);
161 }
162 
AddIpv6AddressFuzzerTest(const uint8_t * data,size_t size)163 void AddIpv6AddressFuzzerTest(const uint8_t *data, size_t size)
164 {
165     int len = static_cast<int>(data[0]);
166     ipv6Client->AddIpv6Address(nullptr, len);
167 }
168 
OnIpv6DnsAddEventFuzzerTest(const uint8_t * data,size_t size)169 void OnIpv6DnsAddEventFuzzerTest(const uint8_t *data, size_t size)
170 {
171     int len = static_cast<int>(data[0]);
172     int ifaIndex = static_cast<int>(data[0]);
173     ipv6Client->onIpv6DnsAddEvent(nullptr, len, ifaIndex);
174 
175     struct nd_opt_hdr data1;
176     ipv6Client->onIpv6DnsAddEvent(&data1, len, ifaIndex);
177 }
178 
OnIpv6RouteAddEventFuzzerTest(const uint8_t * data,size_t size)179 void OnIpv6RouteAddEventFuzzerTest(const uint8_t *data, size_t size)
180 {
181     char *gateway = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
182     char *dst = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
183     int ifaIndex = static_cast<int>(data[0]);
184     ipv6Client->onIpv6RouteAddEvent(gateway, dst, ifaIndex);
185 }
186 
CreateKernelSocketFuzzerTest(const uint8_t * data,size_t size)187 void CreateKernelSocketFuzzerTest(const uint8_t *data, size_t size)
188 {
189     ipv6Client->createKernelSocket();
190 }
191 
ResetFuzzerTest(const uint8_t * data,size_t size)192 void ResetFuzzerTest(const uint8_t *data, size_t size)
193 {
194     ipv6Client->Reset();
195 }
196 
GetIpv6RouteAddrFuzzerTest(const uint8_t * data,size_t size)197 void GetIpv6RouteAddrFuzzerTest(const uint8_t *data, size_t size)
198 {
199     ipv6Client->getIpv6RouteAddr();
200 }
201 
DhcpIPV6StopFuzzerTest(const uint8_t * data,size_t size)202 void DhcpIPV6StopFuzzerTest(const uint8_t *data, size_t size)
203 {
204     ipv6Client->DhcpIPV6Stop();
205 }
206 
Ipv6TimerCallbackFuzzerTest(const uint8_t * data,size_t size)207 void Ipv6TimerCallbackFuzzerTest(const uint8_t *data, size_t size)
208 {
209     ipv6Client->Ipv6TimerCallback();
210 }
211 
StartIpv6TimerFuzzerTest(const uint8_t * data,size_t size)212 void StartIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
213 {
214     ipv6Client->StartIpv6Timer();
215 }
216 
StopIpv6TimerFuzzerTest(const uint8_t * data,size_t size)217 void StopIpv6TimerFuzzerTest(const uint8_t *data, size_t size)
218 {
219     ipv6Client->StopIpv6Timer();
220 }
221 
222 /* Dhcp Ipv6 Event */
SetSocketFilterFuzzerTest(const uint8_t * data,size_t size)223 void SetSocketFilterFuzzerTest(const uint8_t *data, size_t size)
224 {
225     ipv6Client->setSocketFilter(nullptr);
226 
227     struct sockaddr_nl addr;
228     ipv6Client->setSocketFilter(&addr);
229 }
230 
ParseNdUserOptMessageFuzzerTest(const uint8_t * data,size_t size)231 void ParseNdUserOptMessageFuzzerTest(const uint8_t *data, size_t size)
232 {
233     int len = static_cast<int>(data[0]);
234     ipv6Client->parseNdUserOptMessage(nullptr, len);
235 
236     struct nduseroptmsg data1;
237     ipv6Client->parseNdUserOptMessage(&data1, len);
238 }
239 
ParseNDRouteMessageFuzzerTest(const uint8_t * data,size_t size)240 void ParseNDRouteMessageFuzzerTest(const uint8_t *data, size_t size)
241 {
242     ipv6Client->parseNDRouteMessage(nullptr);
243 
244     struct nlmsghdr msg;
245     ipv6Client->parseNDRouteMessage(&msg);
246 }
247 
ParseNewneighMessageFuzzerTest(const uint8_t * data,size_t size)248 void ParseNewneighMessageFuzzerTest(const uint8_t *data, size_t size)
249 {
250     ipv6Client->parseNewneighMessage(nullptr);
251 
252     struct nlmsghdr msg;
253     ipv6Client->parseNewneighMessage(&msg);
254 }
255 
FillRouteDataFuzzerTest(const uint8_t * data,size_t size)256 void FillRouteDataFuzzerTest(const uint8_t *data, size_t size)
257 {
258     int len = static_cast<int>(data[0]);
259     ipv6Client->fillRouteData(nullptr, len);
260     const int nlmsgHdrsize = 16;
261     char buff[nlmsgHdrsize];
262     ipv6Client->fillRouteData(buff, len);
263 }
264 
HandleKernelEventFuzzerTest(const uint8_t * data,size_t size)265 void HandleKernelEventFuzzerTest(const uint8_t *data, size_t size)
266 {
267     int len = static_cast<int>(data[0]);
268     ipv6Client->handleKernelEvent(nullptr, len);
269     ipv6Client->handleKernelEvent(data, len);
270 }
271 
272 /* Dhcp Socket */
CreateKernelSocketFuzzerTest1(const uint8_t * data,size_t size)273 void CreateKernelSocketFuzzerTest1(const uint8_t *data, size_t size)
274 {
275     int sockFd = static_cast<int>(data[0]);
276     CreateKernelSocket(&sockFd);
277 }
278 
BindRawSocketFuzzerTest(const uint8_t * data,size_t size)279 void BindRawSocketFuzzerTest(const uint8_t *data, size_t size)
280 {
281     int rawFd = static_cast<int>(data[0]);
282     int ifaceIndex = static_cast<int>(data[0]);
283     BindRawSocket(rawFd, ifaceIndex, data);
284 }
285 
BindKernelSocketFuzzerTest(const uint8_t * data,size_t size)286 void BindKernelSocketFuzzerTest(const uint8_t *data, size_t size)
287 {
288     int sockFd = static_cast<int>(data[0]);
289     char *ifaceName = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
290     uint32_t sockIp = static_cast<uint32_t>(data[0]);
291     int sockPort = static_cast<int>(data[0]);
292     bool bCast = true;
293     BindKernelSocket(sockFd, ifaceName, sockIp, sockPort, bCast);
294 }
295 
SendDhcpPacketFuzzerTest(const uint8_t * data,size_t size)296 void SendDhcpPacketFuzzerTest(const uint8_t *data, size_t size)
297 {
298     struct DhcpPacket *sendPacket = nullptr;
299     uint32_t srcIp = static_cast<uint32_t>(data[0]);
300     uint32_t destIp = static_cast<uint32_t>(data[0]);
301     SendDhcpPacket(sendPacket, srcIp, destIp);
302 }
303 
CheckReadBytesFuzzerTest(const uint8_t * data,size_t size)304 void CheckReadBytesFuzzerTest(const uint8_t *data, size_t size)
305 {
306     int count = static_cast<int>(data[0]);
307     int totLen = static_cast<int>(data[0]);
308     CheckReadBytes(count, totLen);
309 }
310 
CheckUdpPacketFuzzerTest(const uint8_t * data,size_t size)311 void CheckUdpPacketFuzzerTest(const uint8_t *data, size_t size)
312 {
313     int totLen = static_cast<int>(data[0]);
314     CheckUdpPacket(nullptr, totLen);
315 
316     struct UdpDhcpPacket pPacket;
317     CheckUdpPacket(&pPacket, totLen);
318 
319     pPacket.ip.protocol = 0;
320     pPacket.ip.version = 0;
321     CheckUdpPacket(&pPacket, totLen);
322 
323     pPacket.ip.ihl = 0;
324     CheckUdpPacket(&pPacket, totLen);
325 
326     pPacket.udp.dest = 0;
327     CheckUdpPacket(&pPacket, totLen);
328 
329     pPacket.udp.len = 0;
330     CheckUdpPacket(&pPacket, totLen);
331 }
332 
CheckPacketIpSumFuzzerTest(const uint8_t * data,size_t size)333 void CheckPacketIpSumFuzzerTest(const uint8_t *data, size_t size)
334 {
335     int bytes = static_cast<int>(data[0]);
336     CheckPacketIpSum(nullptr, bytes);
337 
338     struct UdpDhcpPacket pPacket;
339     pPacket.ip.check = static_cast<uint16_t>(data[0]);
340     CheckPacketIpSum(&pPacket, bytes);
341 }
342 
CheckPacketUdpSumFuzzerTest(const uint8_t * data,size_t size)343 void CheckPacketUdpSumFuzzerTest(const uint8_t *data, size_t size)
344 {
345     int bytes = static_cast<int>(data[0]);
346     CheckPacketUdpSum(nullptr, bytes);
347 
348     struct UdpDhcpPacket pPacket;
349     pPacket.udp.check = static_cast<uint16_t>(data[0]);
350     pPacket.udp.len = static_cast<uint16_t>(data[0]);
351     pPacket.ip.saddr = static_cast<uint32_t>(data[0]);
352     pPacket.ip.daddr = static_cast<uint32_t>(data[0]);
353     CheckPacketUdpSum(&pPacket, bytes);
354 }
355 
GetDhcpRawPacketFuzzerTest(const uint8_t * data,size_t size)356 void GetDhcpRawPacketFuzzerTest(const uint8_t *data, size_t size)
357 {
358     int rawFd = static_cast<int>(data[0]);
359     GetDhcpRawPacket(nullptr, rawFd);
360 
361     struct DhcpPacket getPacket;
362     getPacket.cookie = static_cast<int32_t>(data[0]);
363     GetDhcpRawPacket(&getPacket, rawFd);
364 }
365 
366 /* Dhcp Client State Machine */
CloseSignalHandleFuzzerTest(const uint8_t * data,size_t size)367 void CloseSignalHandleFuzzerTest(const uint8_t *data, size_t size)
368 {
369     dhcpClient->m_sigSockFds[0] = 0;
370     dhcpClient->m_sigSockFds[1] = 1;
371     dhcpClient->CloseSignalHandle();
372 }
373 
RunGetIPThreadFuncFuzzerTest(const uint8_t * data,size_t size)374 void RunGetIPThreadFuncFuzzerTest(const uint8_t *data, size_t size)
375 {
376     dhcpClient->m_cltCnf.getMode = 0;
377     DhcpClientStateMachine machine("wlan0");
378     dhcpClient->RunGetIPThreadFunc(machine);
379 }
380 
InitConfigFuzzerTest(const uint8_t * data,size_t size)381 void InitConfigFuzzerTest(const uint8_t *data, size_t size)
382 {
383     std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
384     bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
385     dhcpClient->InitConfig(ifname, isIpv6);
386 }
387 
InitSpecifiedClientCfgFuzzerTest(const uint8_t * data,size_t size)388 void InitSpecifiedClientCfgFuzzerTest(const uint8_t *data, size_t size)
389 {
390     std::string ifname = std::string(reinterpret_cast<const char *>(data), size);
391     bool isIpv6 = (static_cast<int>(data[0]) % TWO) ? true : false;
392     dhcpClient->InitSpecifiedClientCfg(ifname, isIpv6);
393 }
394 
GetClientNetworkInfoFuzzerTest(const uint8_t * data,size_t size)395 void GetClientNetworkInfoFuzzerTest(const uint8_t *data, size_t size)
396 {
397     dhcpClient->GetClientNetworkInfo();
398 }
399 
ExitIpv4FuzzerTest(const uint8_t * data,size_t size)400 void ExitIpv4FuzzerTest(const uint8_t *data, size_t size)
401 {
402     dhcpClient->ExitIpv4();
403 }
404 
StopIpv4FuzzerTest(const uint8_t * data,size_t size)405 void StopIpv4FuzzerTest(const uint8_t *data, size_t size)
406 {
407     dhcpClient->getIpTimerId = static_cast<uint32_t>(data[0]);
408     dhcpClient->m_slowArpTaskId = 1;
409     dhcpClient->StopIpv4();
410 }
411 
GetActionFuzzerTest(const uint8_t * data,size_t size)412 void GetActionFuzzerTest(const uint8_t *data, size_t size)
413 {
414     dhcpClient->m_action = ActionMode::ACTION_START_NEW;
415     dhcpClient->GetAction();
416 }
417 
DhcpInitFuzzerTest(const uint8_t * data,size_t size)418 void DhcpInitFuzzerTest(const uint8_t *data, size_t size)
419 {
420     dhcpClient->DhcpInit();
421 }
422 
InitSocketFdFuzzerTest(const uint8_t * data,size_t size)423 void InitSocketFdFuzzerTest(const uint8_t *data, size_t size)
424 {
425     int sockFdRaw = 0;
426     int sockFdkernel = 0;
427     dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
428 
429     dhcpClient->m_sockFd = 1;
430     dhcpClient->m_socketMode = SOCKET_MODE_RAW;
431     dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
432 
433     dhcpClient->m_socketMode = SOCKET_MODE_KERNEL;
434     dhcpClient->InitSocketFd(sockFdRaw, sockFdkernel);
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     int sockFd = 0;
718     dhcpClient->DhcpResponseHandle(1, sockFd);
719 }
720 
SignalReceiverFuzzerTest(const uint8_t * data,size_t size)721 void SignalReceiverFuzzerTest(const uint8_t *data, size_t size)
722 {
723     dhcpClient->SignalReceiver();
724 }
725 
SetIpv4StateFuzzerTest(const uint8_t * data,size_t size)726 void SetIpv4StateFuzzerTest(const uint8_t *data, size_t size)
727 {
728     int state = static_cast<int>(data[0]);
729     dhcpClient->SetIpv4State(state);
730 }
731 
PublishDhcpResultEventFuzzerTest(const uint8_t * data,size_t size)732 void PublishDhcpResultEventFuzzerTest(const uint8_t *data, size_t size)
733 {
734     char *ifname = reinterpret_cast<char *>(const_cast<uint8_t *>(data));
735     int code = static_cast<int>(data[0]);
736     struct DhcpIpResult result;
737     dhcpClient->PublishDhcpResultEvent(nullptr, code, &result);
738     dhcpClient->PublishDhcpResultEvent(ifname, code, nullptr);
739     dhcpClient->PublishDhcpResultEvent(ifname, code, &result);
740 }
741 
GetPacketHeaderInfoFuzzerTest(const uint8_t * data,size_t size)742 void GetPacketHeaderInfoFuzzerTest(const uint8_t *data, size_t size)
743 {
744     struct DhcpPacket packet;
745     uint8_t type = static_cast<uint8_t>(data[0]);
746     dhcpClient->GetPacketHeaderInfo(&packet, type);
747 }
748 
GetPacketCommonInfoFuzzerTest(const uint8_t * data,size_t size)749 void GetPacketCommonInfoFuzzerTest(const uint8_t *data, size_t size)
750 {
751     dhcpClient->GetPacketCommonInfo(nullptr);
752 
753     struct DhcpPacket packet;
754     dhcpClient->GetPacketCommonInfo(&packet);
755 }
756 
AddClientIdToOptsFuzzerTest(const uint8_t * data,size_t size)757 void AddClientIdToOptsFuzzerTest(const uint8_t *data, size_t size)
758 {
759     dhcpClient->AddClientIdToOpts(nullptr);
760 
761     struct DhcpPacket packet;
762     dhcpClient->AddClientIdToOpts(&packet);
763 }
764 
AddHostNameToOptsFuzzerTest(const uint8_t * data,size_t size)765 void AddHostNameToOptsFuzzerTest(const uint8_t *data, size_t size)
766 {
767     dhcpClient->AddHostNameToOpts(nullptr);
768 
769     struct DhcpPacket packet;
770     dhcpClient->AddHostNameToOpts(&packet);
771 }
772 
AddStrToOptsFuzzerTest(const uint8_t * data,size_t size)773 void AddStrToOptsFuzzerTest(const uint8_t *data, size_t size)
774 {
775     struct DhcpPacket packet;
776     int option = static_cast<int>(data[0]);
777     std::string value = "wlan1";
778     dhcpClient->AddStrToOpts(&packet, option, value);
779 }
780 
781 
DhcpDiscoverFuzzerTest(const uint8_t * data,size_t size)782 void DhcpDiscoverFuzzerTest(const uint8_t *data, size_t size)
783 {
784     uint32_t transid = static_cast<uint32_t>(data[0]);
785     uint32_t requestip = static_cast<uint32_t>(data[0]);
786     dhcpClient->DhcpDiscover(transid, requestip);
787 }
788 
DhcpRequestFuzzerTest(const uint8_t * data,size_t size)789 void DhcpRequestFuzzerTest(const uint8_t *data, size_t size)
790 {
791     uint32_t transid = static_cast<uint32_t>(data[0]);
792     uint32_t reqip = static_cast<uint32_t>(data[0]);
793     uint32_t servip = static_cast<uint32_t>(data[0]);
794     dhcpClient->DhcpRequest(transid, reqip, servip);
795 }
796 
DhcpRenewFuzzerTest(const uint8_t * data,size_t size)797 void DhcpRenewFuzzerTest(const uint8_t *data, size_t size)
798 {
799     uint32_t transId = static_cast<uint32_t>(data[0]);
800     uint32_t clientIp = static_cast<uint32_t>(data[0]);
801     uint32_t serverIp = static_cast<uint32_t>(data[0]);
802     dhcpClient->DhcpRenew(transId, clientIp, serverIp);
803 }
804 
DhcpReleaseFuzzerTest(const uint8_t * data,size_t size)805 void DhcpReleaseFuzzerTest(const uint8_t *data, size_t size)
806 {
807     uint32_t clientIp = static_cast<uint32_t>(data[0]);
808     uint32_t serverIp = static_cast<uint32_t>(data[0]);
809     dhcpClient->DhcpRelease(clientIp, serverIp);
810 }
811 
DhcpDeclineFuzzerTest(const uint8_t * data,size_t size)812 void DhcpDeclineFuzzerTest(const uint8_t *data, size_t size)
813 {
814     uint32_t transId = static_cast<uint32_t>(data[0]);
815     uint32_t clientIp = static_cast<uint32_t>(data[0]);
816     uint32_t serverIp = static_cast<uint32_t>(data[0]);
817     dhcpClient->DhcpDecline(transId, clientIp, serverIp);
818 }
819 
IpConflictDetectFuzzerTest(const uint8_t * data,size_t size)820 void IpConflictDetectFuzzerTest(const uint8_t *data, size_t size)
821 {
822     dhcpClient->IpConflictDetect();
823 }
824 
FastArpDetectFuzzerTest(const uint8_t * data,size_t size)825 void FastArpDetectFuzzerTest(const uint8_t *data, size_t size)
826 {
827     dhcpClient->FastArpDetect();
828 }
829 
SlowArpDetectCallbackFuzzerTest(const uint8_t * data,size_t size)830 void SlowArpDetectCallbackFuzzerTest(const uint8_t *data, size_t size)
831 {
832     bool isReachable = true;
833     dhcpClient->SlowArpDetectCallback(isReachable);
834 
835     isReachable = false;
836     dhcpClient->SlowArpDetectCallback(isReachable);
837 }
838 
SlowArpDetectFuzzerTest(const uint8_t * data,size_t size)839 void SlowArpDetectFuzzerTest(const uint8_t *data, size_t size)
840 {
841     time_t timestamp = 1;
842     dhcpClient->m_sentPacketNum = THREE;
843     dhcpClient->SlowArpDetect(timestamp);
844 
845     dhcpClient->m_sentPacketNum = TWO;
846     dhcpClient->SlowArpDetect(timestamp);
847 
848     dhcpClient->m_sentPacketNum = 0;
849     dhcpClient->SlowArpDetect(timestamp);
850 }
851 
IsArpReachableFuzzerTest(const uint8_t * data,size_t size)852 void IsArpReachableFuzzerTest(const uint8_t *data, size_t size)
853 {
854     uint32_t timeoutMillis = static_cast<uint32_t>(data[0]);
855     std::string ipAddress = std::string(reinterpret_cast<const char *>(data), size);
856     dhcpClient->IsArpReachable(timeoutMillis, ipAddress);
857 }
858 
GetCachedDhcpResultFuzzerTest(const uint8_t * data,size_t size)859 void GetCachedDhcpResultFuzzerTest(const uint8_t *data, size_t size)
860 {
861     std::string targetBssid = std::string(reinterpret_cast<const char *>(data), size);
862     struct IpInfoCached ipcached;
863     dhcpClient->GetCachedDhcpResult(targetBssid, ipcached);
864 }
865 
SaveIpInfoInLocalFileFuzzerTest(const uint8_t * data,size_t size)866 void SaveIpInfoInLocalFileFuzzerTest(const uint8_t *data, size_t size)
867 {
868     struct DhcpIpResult ipResult;
869     dhcpClient->SaveIpInfoInLocalFile(ipResult);
870 }
871 
TryCachedIpFuzzerTest(const uint8_t * data,size_t size)872 void TryCachedIpFuzzerTest(const uint8_t *data, size_t size)
873 {
874     dhcpClient->TryCachedIp();
875 }
876 
SetConfigurationFuzzerTest(const uint8_t * data,size_t size)877 void SetConfigurationFuzzerTest(const uint8_t *data, size_t size)
878 {
879     struct RouterCfg routerCfg;
880     dhcpClient->SetConfiguration(routerCfg);
881 }
882 
GetIpTimerCallbackFuzzerTest(const uint8_t * data,size_t size)883 void GetIpTimerCallbackFuzzerTest(const uint8_t *data, size_t size)
884 {
885     dhcpClient->GetIpTimerCallback();
886 
887     dhcpClient->m_action = ACTION_RENEW_T1;
888     dhcpClient->GetIpTimerCallback();
889 
890     dhcpClient->m_action = ACTION_RENEW_T3;
891     dhcpClient->GetIpTimerCallback();
892 
893     dhcpClient->m_action = ACTION_START_NEW;
894     dhcpClient->GetIpTimerCallback();
895 }
896 
StartTimerFuzzerTest(const uint8_t * data,size_t size)897 void StartTimerFuzzerTest(const uint8_t *data, size_t size)
898 {
899     uint32_t timerId = static_cast<uint32_t>(data[0]);
900     TimerType type = TimerType::TIMER_REBIND_DELAY;
901     int64_t interval = static_cast<int64_t>(data[0]);
902     bool once = (static_cast<int>(data[0]) % TWO) ? true : false;
903     dhcpClient->StartTimer(type, timerId, interval, once);
904 
905     type = TimerType::TIMER_REMAINING_DELAY;
906     dhcpClient->StartTimer(type, timerId, interval, once);
907 
908     type = TimerType::TIMER_RENEW_DELAY;
909     dhcpClient->StartTimer(type, timerId, interval, once);
910 }
911 
StopTimerFuzzerTest(const uint8_t * data,size_t size)912 void StopTimerFuzzerTest(const uint8_t *data, size_t size)
913 {
914     uint32_t timerId = static_cast<uint32_t>(data[0]);
915     dhcpClient->StopTimer(timerId);
916 }
917 
RenewDelayCallbackFuzzerTest(const uint8_t * data,size_t size)918 void RenewDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
919 {
920     dhcpClient->RenewDelayCallback();
921 }
922 
RebindDelayCallbackFuzzerTest(const uint8_t * data,size_t size)923 void RebindDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
924 {
925     dhcpClient->RebindDelayCallback();
926 }
927 
RemainingDelayCallbackFuzzerTest(const uint8_t * data,size_t size)928 void RemainingDelayCallbackFuzzerTest(const uint8_t *data, size_t size)
929 {
930     dhcpClient->RemainingDelayCallback();
931 }
932 
SendStopSignalFuzzerTest(const uint8_t * data,size_t size)933 void SendStopSignalFuzzerTest(const uint8_t *data, size_t size)
934 {
935     dhcpClient->SendStopSignal();
936 }
937 
CloseAllRenewTimerFuzzerTest(const uint8_t * data,size_t size)938 void CloseAllRenewTimerFuzzerTest(const uint8_t *data, size_t size)
939 {
940     dhcpClient->CloseAllRenewTimer();
941 }
942 
DhcpIpv6ClientFuzzerTest(const uint8_t * data,size_t size)943 void DhcpIpv6ClientFuzzerTest(const uint8_t *data, size_t size)
944 {
945     IsRunningFuzzerTest(data, size);
946     SetCallbackFuzzerTest(data, size);
947     StartIpv6ThreadFuzzerTest(data, size);
948     Ipv6AddrScope2TypeFuzzerTest(data, size);
949     GetAddrTypeFuzzerTest(data, size);
950     GetAddrScopeFuzzerTest(data, size);
951     GetIpv6PrefixFuzzerTest(data, size);
952     GetIpFromS6AddressFuzzerTest(data, size);
953     OnIpv6AddressAddEventFuzzerTest(data, size);
954     AddIpv6AddressFuzzerTest(data, size);
955     OnIpv6DnsAddEventFuzzerTest(data, size);
956     OnIpv6RouteAddEventFuzzerTest(data, size);
957     CreateKernelSocketFuzzerTest(data, size);
958     ResetFuzzerTest(data, size);
959     GetIpv6RouteAddrFuzzerTest(data, size);
960     DhcpIPV6StopFuzzerTest(data, size);
961     Ipv6TimerCallbackFuzzerTest(data, size);
962     StartIpv6TimerFuzzerTest(data, size);
963     StopIpv6TimerFuzzerTest(data, size);
964 }
965 
DhcpIpv6EventFuzzerTest(const uint8_t * data,size_t size)966 void DhcpIpv6EventFuzzerTest(const uint8_t *data, size_t size)
967 {
968     SetSocketFilterFuzzerTest(data, size);
969     ParseNdUserOptMessageFuzzerTest(data, size);
970     ParseNDRouteMessageFuzzerTest(data, size);
971     ParseNewneighMessageFuzzerTest(data, size);
972     FillRouteDataFuzzerTest(data, size);
973     HandleKernelEventFuzzerTest(data, size);
974 }
975 
DhcpSocketFuzzerTest(const uint8_t * data,size_t size)976 void DhcpSocketFuzzerTest(const uint8_t *data, size_t size)
977 {
978     CreateKernelSocketFuzzerTest1(data, size);
979     BindRawSocketFuzzerTest(data, size);
980     BindKernelSocketFuzzerTest(data, size);
981     SendDhcpPacketFuzzerTest(data, size);
982     CheckReadBytesFuzzerTest(data, size);
983     CheckUdpPacketFuzzerTest(data, size);
984     CheckPacketIpSumFuzzerTest(data, size);
985     CheckPacketUdpSumFuzzerTest(data, size);
986     GetDhcpRawPacketFuzzerTest(data, size);
987 }
988 
DhcpClientStateMachineFuzzerTest(const uint8_t * data,size_t size)989 void DhcpClientStateMachineFuzzerTest(const uint8_t *data, size_t size)
990 {
991     CloseSignalHandleFuzzerTest(data, size);
992     RunGetIPThreadFuncFuzzerTest(data, size);
993     InitConfigFuzzerTest(data, size);
994     InitSpecifiedClientCfgFuzzerTest(data, size);
995     GetClientNetworkInfoFuzzerTest(data, size);
996     ExitIpv4FuzzerTest(data, size);
997     StopIpv4FuzzerTest(data, size);
998     GetActionFuzzerTest(data, size);
999     DhcpInitFuzzerTest(data, size);
1000     InitSocketFdFuzzerTest(data, size);
1001     GetPacketReadSockFdFuzzerTest(data, size);
1002     GetSigReadSockFdFuzzerTest(data, size);
1003     GetDhcpTransIDFuzzerTest(data, size);
1004     SetSocketModeFuzzerTest(data, size);
1005     ExecDhcpRenewFuzzerTest(data, size);
1006     ExecDhcpReleaseFuzzerTest(data, size);
1007     GetRandomIdFuzzerTest(data, size);
1008     InitSelectingFuzzerTest(data, size);
1009     DhcpRebootFuzzerTest(data, size);
1010     SendRebootFuzzerTest(data, size);
1011     RebootFuzzerTest(data, size);
1012     RequestingFuzzerTest(data, size);
1013     RenewingFuzzerTest(data, size);
1014     RebindingFuzzerTest(data, size);
1015     DecliningFuzzerTest(data, size);
1016     DhcpRequestHandleFuzzerTest(data, size);
1017     DhcpOfferPacketHandleFuzzerTest(data, size);
1018     ParseNetworkServerIdInfoFuzzerTest(data, size);
1019     ParseNetworkDnsInfoFuzzerTest(data, size);
1020     ParseNetworkDnsValueFuzzerTest(data, size);
1021     ParseNetworkInfoFuzzerTest(data, size);
1022     FormatStringFuzzerTest(data, size);
1023     GetDHCPServerHostNameFuzzerTest(data, size);
1024     ParseNetworkVendorInfoFuzzerTest(data, size);
1025     DhcpAckOrNakPacketHandleFuzzerTest(data, size);
1026     ParseDhcpAckPacketFuzzerTest(data, size);
1027     ParseDhcpNakPacketFuzzerTest(data, size);
1028     GetDhcpOfferFuzzerTest(data, size);
1029     DhcpResponseHandleFuzzerTest(data, size);
1030     SignalReceiverFuzzerTest(data, size);
1031     SetIpv4StateFuzzerTest(data, size);
1032     PublishDhcpResultEventFuzzerTest(data, size);
1033 }
1034 
DhcpClientStateMachineExFuzzerTest(const uint8_t * data,size_t size)1035 void DhcpClientStateMachineExFuzzerTest(const uint8_t *data, size_t size)
1036 {
1037     GetPacketHeaderInfoFuzzerTest(data, size);
1038     GetPacketCommonInfoFuzzerTest(data, size);
1039     AddClientIdToOptsFuzzerTest(data, size);
1040     AddHostNameToOptsFuzzerTest(data, size);
1041     AddStrToOptsFuzzerTest(data, size);
1042     DhcpDiscoverFuzzerTest(data, size);
1043     DhcpRequestFuzzerTest(data, size);
1044     DhcpRenewFuzzerTest(data, size);
1045     DhcpReleaseFuzzerTest(data, size);
1046     DhcpDeclineFuzzerTest(data, size);
1047     IpConflictDetectFuzzerTest(data, size);
1048     FastArpDetectFuzzerTest(data, size);
1049     SlowArpDetectCallbackFuzzerTest(data, size);
1050     SlowArpDetectFuzzerTest(data, size);
1051     IsArpReachableFuzzerTest(data, size);
1052     GetCachedDhcpResultFuzzerTest(data, size);
1053     SaveIpInfoInLocalFileFuzzerTest(data, size);
1054     TryCachedIpFuzzerTest(data, size);
1055     SetConfigurationFuzzerTest(data, size);
1056     GetIpTimerCallbackFuzzerTest(data, size);
1057     StartTimerFuzzerTest(data, size);
1058     StopTimerFuzzerTest(data, size);
1059     RenewDelayCallbackFuzzerTest(data, size);
1060     RebindDelayCallbackFuzzerTest(data, size);
1061     RemainingDelayCallbackFuzzerTest(data, size);
1062     SendStopSignalFuzzerTest(data, size);
1063     CloseAllRenewTimerFuzzerTest(data, size);
1064 }
1065 
1066 /* Fuzzer entry point */
LLVMFuzzerTestOneInput(const uint8_t * data,size_t size)1067 extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
1068 {
1069     DhcpClientStateMachineFunFuzzerTest(data, size);
1070     DhcpIpv6FunFuzzerTest(data, size);
1071     DhcpIpv6ClientFuzzerTest(data, size);
1072     DhcpIpv6EventFuzzerTest(data, size);
1073     DhcpSocketFuzzerTest(data, size);
1074     DhcpClientStateMachineFuzzerTest(data, size);
1075     DhcpClientStateMachineExFuzzerTest(data, size);
1076     return 0;
1077 }
1078 } // namespace DHCP
1079 } // namespace OHOS