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 1244099b7bSPaul Traina #include <net/if.h> /* for struct ifreq */ 1344099b7bSPaul Traina #include <netinet/in.h> 1444099b7bSPaul Traina #include <arpa/inet.h> /* inet_ntoa */ 1544099b7bSPaul Traina 1644099b7bSPaul Traina #include <netdb.h> 1744099b7bSPaul Traina #include <stdio.h> 1844099b7bSPaul Traina #include <ctype.h> 1944099b7bSPaul Traina #include <errno.h> 2044099b7bSPaul Traina 2144099b7bSPaul Traina #include "getif.h" 2244099b7bSPaul Traina 2344099b7bSPaul Traina int debug = 0; 2444099b7bSPaul Traina char *progname; 2544099b7bSPaul Traina 2644099b7bSPaul Traina main(argc, argv) 2744099b7bSPaul Traina char **argv; 2844099b7bSPaul Traina { 2944099b7bSPaul Traina struct hostent *hep; 3044099b7bSPaul Traina struct sockaddr ea; /* Ethernet address */ 3144099b7bSPaul Traina struct sockaddr_in *sip; /* Interface address */ 3244099b7bSPaul Traina struct ifreq *ifr; 3344099b7bSPaul Traina struct in_addr dst_addr; 3444099b7bSPaul Traina struct in_addr *dap; 3544099b7bSPaul Traina int i, s; 3644099b7bSPaul Traina 3744099b7bSPaul Traina progname = argv[0]; /* for report */ 3844099b7bSPaul Traina 3944099b7bSPaul Traina dap = NULL; 4044099b7bSPaul Traina if (argc > 1) { 4144099b7bSPaul Traina dap = &dst_addr; 4244099b7bSPaul Traina if (isdigit(argv[1][0])) 4344099b7bSPaul Traina dst_addr.s_addr = inet_addr(argv[1]); 4444099b7bSPaul Traina else { 4544099b7bSPaul Traina hep = gethostbyname(argv[1]); 4644099b7bSPaul Traina if (!hep) { 4744099b7bSPaul Traina printf("gethostbyname(%s)\n", argv[1]); 4844099b7bSPaul Traina exit(1); 4944099b7bSPaul Traina } 5044099b7bSPaul Traina memcpy(&dst_addr, hep->h_addr, sizeof(dst_addr)); 5144099b7bSPaul Traina } 5244099b7bSPaul Traina } 5344099b7bSPaul Traina s = socket(AF_INET, SOCK_DGRAM, 0); 5444099b7bSPaul Traina if (s < 0) { 5544099b7bSPaul Traina perror("socket open"); 5644099b7bSPaul Traina exit(1); 5744099b7bSPaul Traina } 5844099b7bSPaul Traina ifr = getif(s, dap); 5944099b7bSPaul Traina if (!ifr) { 6044099b7bSPaul Traina printf("no interface for address\n"); 6144099b7bSPaul Traina exit(1); 6244099b7bSPaul Traina } 6344099b7bSPaul Traina printf("Intf-name:%s\n", ifr->ifr_name); 6444099b7bSPaul Traina sip = (struct sockaddr_in *) &(ifr->ifr_addr); 6544099b7bSPaul Traina printf("Intf-addr:%s\n", inet_ntoa(sip->sin_addr)); 6644099b7bSPaul Traina 6744099b7bSPaul Traina exit(0); 6844099b7bSPaul Traina } 69