start of new file
[IRC.git] / Robust / src / Runtime / DSTM / interface / ip.c
index d959f49c2a110d1fa69021f25b0fe3c8b022d4c0..9c97347e5b8422e8ecdb198df0bbe7e1aab2d0af 100644 (file)
@@ -6,6 +6,8 @@
 #include <netdb.h>
 #include <netinet/in.h>
 #include <string.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
 
 #define LISTEN_PORT 2156
 
@@ -27,6 +29,9 @@ void midtoIP(unsigned int mid, char *ptr) {
        i.c = (mid & 0x0000ff00) >> 8;
        i.d = mid & 0x000000ff;
        sprintf(ptr, "%d.%d.%d.%d", i.a, i.b, i.c, i.d);
+#ifdef DEBUG
+       printf("DEBUG-> midtoIP() mid = %d.%d.%d.%d\n", i.a, i.b, i.c, i.d);
+#endif
        return;
 }
 
@@ -54,6 +59,35 @@ int checkServer(int mid, char *machineip) {
        close(tmpsd);
        return 0;
 }
+
+unsigned int getMyIpAddr(const char *interfaceStr)
+{      
+       int sock;
+       struct ifreq interfaceInfo;
+       struct sockaddr_in *myAddr = (struct sockaddr_in *)&interfaceInfo.ifr_addr;
+
+       memset(&interfaceInfo, 0, sizeof(struct ifreq));
+
+       if((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
+       {
+               perror("getMyIpAddr():socket()");
+               return 1;
+       }
+
+       strcpy(interfaceInfo.ifr_name, interfaceStr);
+       myAddr->sin_family = AF_INET;
+       
+       if(ioctl(sock, SIOCGIFADDR, &interfaceInfo) != 0)
+       {
+               perror("getMyIpAddr():ioctl()");
+               return 1;
+       }
+
+       close(sock);
+
+       return ntohl(myAddr->sin_addr.s_addr);
+}
+
 /*
 main() {
        unsigned int mid;