xref: /openbmc/phosphor-networkd/test/mock_syscall.cpp (revision d8bad197fb6d7a18c52d19f472676ecae8ec900d)
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 
4 #include <net/if.h>
5 #include <netinet/in.h>
6 #include <arpa/inet.h>
7 
8 #include <ifaddrs.h>
9 
10 #define MAX_IFADDRS 5
11 
12 int debugging = false;
13 
14 /* Data for mocking getifaddrs */
15 struct ifaddr_storage {
16     struct ifaddrs ifaddr;
17     struct sockaddr_storage addr;
18     struct sockaddr_storage mask;
19     struct sockaddr_storage bcast;
20 } mock_ifaddr_storage[MAX_IFADDRS];
21 
22 struct ifaddrs *mock_ifaddrs = nullptr;
23 
24 int ifaddr_count = 0;
25 
26 /* Stub library functions */
27 void freeifaddrs(ifaddrs *ifp)
28 {
29     return ;
30 }
31 
32 void mock_addIP(const char* name, const char* addr, const char* mask,
33                 unsigned int flags)
34 {
35     struct ifaddrs *ifaddr = &mock_ifaddr_storage[ifaddr_count].ifaddr;
36 
37     struct sockaddr_in *in = reinterpret_cast<sockaddr_in*>
38                     (&mock_ifaddr_storage[ifaddr_count].addr);
39     struct sockaddr_in *mask_in = reinterpret_cast<sockaddr_in*>
40                     (&mock_ifaddr_storage[ifaddr_count].mask);
41 
42     in->sin_family = AF_INET;
43     in->sin_port = 0;
44     in->sin_addr.s_addr = inet_addr(addr);
45 
46     mask_in->sin_family = AF_INET;
47     mask_in->sin_port = 0;
48     mask_in->sin_addr.s_addr = inet_addr(mask);
49 
50     ifaddr->ifa_next = nullptr;
51     ifaddr->ifa_name = const_cast<char*>(name);
52     ifaddr->ifa_flags = flags;
53     ifaddr->ifa_addr = reinterpret_cast<struct sockaddr*>(in);
54     ifaddr->ifa_netmask = reinterpret_cast<struct sockaddr*>(mask_in);
55     ifaddr->ifa_data = nullptr;
56 
57     if (ifaddr_count > 0)
58         mock_ifaddr_storage[ifaddr_count - 1].ifaddr.ifa_next = ifaddr;
59     ifaddr_count++;
60     mock_ifaddrs = &mock_ifaddr_storage[0].ifaddr;
61 
62 }
63 
64 int getifaddrs(ifaddrs **ifap)
65 {
66     *ifap = mock_ifaddrs;
67     if (mock_ifaddrs == nullptr)
68         return -1;
69     return (0);
70 }
71 
72