iplib: Clang-format iplib C files
[akaros.git] / user / iplib / myipaddr.c
1 /*
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9 #include <stdlib.h>
10
11 #include <iplib/iplib.h>
12 #include <parlib/parlib.h>
13 #include <signal.h>
14 #include <stdio.h>
15 #include <unistd.h>
16
17 static uint8_t loopbacknet[IPaddrlen] = {
18         0, 0, 0, 0,
19         0, 0, 0, 0,
20         0, 0, 0xff, 0xff,
21         127, 0, 0, 0
22 };
23 static uint8_t loopbackmask[IPaddrlen] = {
24         0xff, 0xff, 0xff, 0xff,
25         0xff, 0xff, 0xff, 0xff,
26         0xff, 0xff, 0xff, 0xff,
27         0xff, 0, 0, 0
28 };
29
30 // find first ip addr that isn't the friggin loopback address
31 // unless there are no others
32 int myipaddr(uint8_t *ip, char *net)
33 {
34         struct ipifc *nifc;
35         struct iplifc *lifc;
36         static struct ipifc *ifc;
37         uint8_t mynet[IPaddrlen];
38
39         ifc = readipifc(net, ifc, -1);
40         for (nifc = ifc; nifc; nifc = nifc->next)
41                 for (lifc = nifc->lifc; lifc; lifc = lifc->next) {
42                         maskip(lifc->ip, loopbackmask, mynet);
43                         if (ipcmp(mynet, loopbacknet) == 0) {
44                                 continue;
45                         }
46                         if (ipcmp(lifc->ip, IPnoaddr) != 0) {
47                                 ipmove(ip, lifc->ip);
48                                 return 0;
49                         }
50                 }
51         ipmove(ip, IPnoaddr);
52         return -1;
53 }