144099b7bSPaul Traina /* 244099b7bSPaul Traina * trygetif.c - test program for getif.c 344099b7bSPaul Traina */ 444099b7bSPaul Traina 544099b7bSPaul Traina #include <sys/types.h> 644099b7bSPaul Traina #include <sys/socket.h> 744099b7bSPaul Traina 844099b7bSPaul Traina #if defined(SUNOS) || defined(SVR4) 944099b7bSPaul Traina #include <sys/sockio.h> 1044099b7bSPaul Traina #endif 1144099b7bSPaul Traina 12e08ac58bSPaul Traina #ifdef _AIX32 13e08ac58bSPaul Traina #include <sys/time.h> /* for struct timeval in net/if.h */ 14e08ac58bSPaul Traina #endif 1544099b7bSPaul Traina #include <net/if.h> /* for struct ifreq */ 1644099b7bSPaul Traina #include <netinet/in.h> 1744099b7bSPaul Traina #include <arpa/inet.h> /* inet_ntoa */ 1844099b7bSPaul Traina 1944099b7bSPaul Traina #include <netdb.h> 2044099b7bSPaul Traina #include <stdio.h> 2144099b7bSPaul Traina #include <ctype.h> 2244099b7bSPaul Traina #include <errno.h> 2344099b7bSPaul Traina 2444099b7bSPaul Traina #include "getif.h" 2544099b7bSPaul Traina 2644099b7bSPaul Traina int debug = 0; 2744099b7bSPaul Traina char *progname; 2844099b7bSPaul Traina 29e08ac58bSPaul Traina void 3044099b7bSPaul Traina main(argc, argv) 31e08ac58bSPaul Traina int argc; 3244099b7bSPaul Traina char **argv; 3344099b7bSPaul Traina { 3444099b7bSPaul Traina struct hostent *hep; 3544099b7bSPaul Traina struct sockaddr_in *sip; /* Interface address */ 3644099b7bSPaul Traina struct ifreq *ifr; 3744099b7bSPaul Traina struct in_addr dst_addr; 3844099b7bSPaul Traina struct in_addr *dap; 39e08ac58bSPaul Traina int s; 4044099b7bSPaul Traina 4144099b7bSPaul Traina progname = argv[0]; /* for report */ 4244099b7bSPaul Traina 4344099b7bSPaul Traina dap = NULL; 4444099b7bSPaul Traina if (argc > 1) { 4544099b7bSPaul Traina dap = &dst_addr; 46e08ac58bSPaul Traina if (isdigit(argv[1][0])) 47e08ac58bSPaul Traina dst_addr.s_addr = inet_addr(argv[1]); 48e08ac58bSPaul Traina else { 4944099b7bSPaul Traina hep = gethostbyname(argv[1]); 5044099b7bSPaul Traina if (!hep) { 5144099b7bSPaul Traina printf("gethostbyname(%s)\n", argv[1]); 5244099b7bSPaul Traina exit(1); 5344099b7bSPaul Traina } 5444099b7bSPaul Traina memcpy(&dst_addr, hep->h_addr, sizeof(dst_addr)); 5544099b7bSPaul Traina } 5644099b7bSPaul Traina } 5744099b7bSPaul Traina s = socket(AF_INET, SOCK_DGRAM, 0); 5844099b7bSPaul Traina if (s < 0) { 5944099b7bSPaul Traina perror("socket open"); 6044099b7bSPaul Traina exit(1); 6144099b7bSPaul Traina } 6244099b7bSPaul Traina ifr = getif(s, dap); 6344099b7bSPaul Traina if (!ifr) { 6444099b7bSPaul Traina printf("no interface for address\n"); 6544099b7bSPaul Traina exit(1); 6644099b7bSPaul Traina } 6744099b7bSPaul Traina printf("Intf-name:%s\n", ifr->ifr_name); 6844099b7bSPaul Traina sip = (struct sockaddr_in *) &(ifr->ifr_addr); 6944099b7bSPaul Traina printf("Intf-addr:%s\n", inet_ntoa(sip->sin_addr)); 7044099b7bSPaul Traina 7144099b7bSPaul Traina exit(0); 7244099b7bSPaul Traina } 73