remove some codes for scheduling
[IRC.git] / Robust / src / Runtime / DSTM / interface / ip.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "ip.h"
4 #include <sys/types.h>
5 #include <sys/socket.h>
6 #include <netdb.h>
7 #include <netinet/in.h>
8 #include <string.h>
9 #include <sys/ioctl.h>
10 #include <net/if.h>
11
12 #define LISTEN_PORT 2156
13
14 unsigned int iptoMid(char *addr) {
15         ip_t i;
16         unsigned int mid;
17
18         sscanf(addr, "%d.%d.%d.%d", &i.a, &i.b, &i.c, &i.d);
19         mid = (i.a << 24) | (i.b << 16) | (i.c << 8) | i.d;
20         fflush(stdout);
21         return mid;
22 }
23
24 void midtoIP(unsigned int mid, char *ptr) {
25         ip_t i;
26
27         i.a = (mid & 0xff000000) >> 24;
28         i.b = (mid & 0x00ff0000) >> 16;
29         i.c = (mid & 0x0000ff00) >> 8;
30         i.d = mid & 0x000000ff;
31         sprintf(ptr, "%d.%d.%d.%d", i.a, i.b, i.c, i.d);
32         return;
33 }
34
35 int checkServer(int mid, char *machineip) {
36         int tmpsd;
37         struct sockaddr_in serv_addr;
38         char m[20];
39
40         strncpy(m, machineip, strlen(machineip));
41         // Foreach machine you want to transact with
42         // check if its up and running
43         if ((tmpsd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
44                 perror("");
45                 return(-1);
46         }
47         bzero((char*) &serv_addr, sizeof(serv_addr));
48         serv_addr.sin_family = AF_INET;
49         serv_addr.sin_port = htons(LISTEN_PORT);
50         midtoIP(mid, m);
51         m[15] = '\0';
52         serv_addr.sin_addr.s_addr = inet_addr(m);
53         while (connect(tmpsd, (struct sockaddr *) &serv_addr, sizeof(struct sockaddr)) < 0) {
54                 sleep(1);
55         }
56         close(tmpsd);
57         return 0;
58 }
59
60 unsigned int getMyIpAddr(const char *interfaceStr)
61 {       
62         int sock;
63         struct ifreq interfaceInfo;
64         struct sockaddr_in *myAddr = (struct sockaddr_in *)&interfaceInfo.ifr_addr;
65
66         memset(&interfaceInfo, 0, sizeof(struct ifreq));
67
68         if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
69         {
70                 perror("getMyIpAddr():socket()");
71                 return 1;
72         }
73
74         strcpy(interfaceInfo.ifr_name, interfaceStr);
75         myAddr->sin_family = AF_INET;
76         
77         if(ioctl(sock, SIOCGIFADDR, &interfaceInfo) != 0)
78         {
79                 perror("getMyIpAddr():ioctl()");
80                 return 1;
81         }
82
83         close(sock);
84
85         return ntohl(myAddr->sin_addr.s_addr);
86 }
87
88 /*
89 main() {
90         unsigned int mid;
91         ip_t i;
92         char ip[16];
93
94         memset(ip, 0, 16);
95         mid = iptoMid("192.10.0.1");
96         printf("mid = %x\n", mid);
97         midtoIP(mid, ip);
98         ip[15] = '\0';
99         printf("%s\n",ip);
100 }
101 */