| | 959 | | iflist(alp, np) |
| | 960 | | struct in_addr **alp; |
| | 961 | | int *np; |
| | 962 | | { |
| | 963 | | int soc = -1; |
| | 964 | | static struct in_addr *iplist = 0; |
| | 965 | | int nip = 0; |
| | 966 | | char buf[4096]; |
| | 967 | | struct ifconf sif; |
| | 968 | | struct ifreq *reqp; |
| | 969 | | struct ifreq req; |
| | 970 | | char *cp; |
| | 971 | | |
| | 972 | | if (iplist) |
| | 973 | | PVM_FREE(iplist);
|
| | 974 | | iplist = TALLOC(10, struct in_addr, "ifl");
|
| | 975 | | |
| referenced by returned value | 976 | | if ((soc = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { | Problem | | referenced by returned value |
|
| | 977 | | perror("socket"); |
| | 978 | | goto bail; |
| | 979 | | } |
| | 980 | | |
| referenced by soc | 981 | | sif.ifc_ifcu.ifcu_buf = buf; |
| | 982 | | sif.ifc_len = sizeof(buf); |
| | 983 | | if (ioctl(soc, |
| | 984 | | #ifdef OSIOCGIFCONF |
| | 985 | | #if defined(IMA_RS6K) || defined(IMA_RS6KMP) || defined(IMA_SP2MPI) \ |
| | 986 | | || defined(IMA_AIX4SP2) || defined(IMA_AIX5SP2) \ |
| | 987 | | || defined(IMA_FREEBSD) |
| | 988 | | SIOCGIFCONF |
| | 989 | | #else |
| | 990 | | OSIOCGIFCONF |
| | 991 | | #endif |
| | 992 | | #else |
| | 993 | | SIOCGIFCONF
|
| | 994 | | #endif |
| | 995 | | , &sif) == -1) { |
| | 996 | | perror("ioctl"); |
| | 997 | | goto bail; |
| | 998 | | } |
| | 999 | | |
| | 1000 | | for (cp = sif.ifc_ifcu.ifcu_buf; |
| | 1001 | | cp - sif.ifc_ifcu.ifcu_buf < sif.ifc_len; |
| | 1002 | | cp += sizeof(*reqp) - sizeof(struct sockaddr) + SIZ(reqp->ifr_addr))
|
| | 1003 | | { |
| | 1004 | | reqp = (struct ifreq*)cp; |
| | 1005 | | if (reqp->ifr_addr.sa_family != AF_INET)
|
| | 1006 | | continue; |
| | 1007 | | BCOPY(reqp->ifr_name, req.ifr_name, sizeof(req.ifr_name));
|
| | 1008 | | if (ioctl(soc, SIOCGIFFLAGS, &req) == -1) {
|
| | 1009 | | perror("ioctl"); |
| | 1010 | | goto bail; |
| | 1011 | | } |
| | | | ... |
| | 1024 | | pvmlogprintf("iflist() %s %d.%d.%d.%d\n", |
| | 1025 | | reqp->ifr_name,
|
| | 1026 | | 0xff & (a >> 24), |
| | 1027 | | 0xff & (a >> 16), |
| | 1028 | | 0xff & (a >> 8), |
| | 1029 | | 0xff & a); |
| | 1030 | | } |
| | 1031 | | } |
| | 1032 | | } |
| | 1033 | | |
| | 1034 | | *alp = iplist; |
| | 1035 | | *np = nip; |
| | 1036 | | return 0; |
| | 1037 | | |
| | 1038 | | bail: |
| | 1039 | | (void)close(soc); |
| | 1040 | | return -1; |
| | 1041 | | } |