int main(int argc, char **argv) { char name[16]; if (argc != 2) err_quit("usage: prifname <interface-index>"); printf("interface name = %s\n", If_indextoname(atoi(argv[1]), name)); exit(0); }
void dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen) { int flags; const int on = 1; socklen_t len; ssize_t n; char mesg[MAXLINE], str[INET6_ADDRSTRLEN], ifname[IFNAMSIZ]; struct in_addr in_zero; struct unp_in_pktinfo pktinfo; #ifdef IP_RECVDSTADDR if (setsockopt(sockfd, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on)) < 0) err_ret("setsockopt of IP_RECVDSTADDR"); #endif #ifdef IP_RECVIF if (setsockopt(sockfd, IPPROTO_IP, IP_RECVIF, &on, sizeof(on)) < 0) err_ret("setsockopt of IP_RECVIF"); #endif bzero(&in_zero, sizeof(struct in_addr)); /* all 0 IPv4 address */ for ( ; ; ) { len = clilen; flags = 0; n = Recvfrom_flags(sockfd, mesg, MAXLINE, &flags, pcliaddr, &len, &pktinfo); printf("%d-byte datagram from %s", n, Sock_ntop(pcliaddr, len)); if (memcmp(&pktinfo.ipi_addr, &in_zero, sizeof(in_zero)) != 0) printf(", to %s", Inet_ntop(AF_INET, &pktinfo.ipi_addr, str, sizeof(str))); if (pktinfo.ipi_ifindex > 0) printf(", recv i/f = %s", If_indextoname(pktinfo.ipi_ifindex, ifname)); #ifdef MSG_TRUNC if (flags & MSG_TRUNC) printf(" (datagram truncated)"); #endif #ifdef MSG_CTRUNC if (flags & MSG_CTRUNC) printf(" (control info truncated)"); #endif #ifdef MSG_BCAST if (flags & MSG_BCAST) printf(" (broadcast)"); #endif #ifdef MSG_MCAST if (flags & MSG_MCAST) printf(" (multicast)"); #endif printf("\n"); Sendto(sockfd, mesg, n, 0, pcliaddr, len); } }
int main(int argc, char **argv) { int n; char ifname[IFNAMSIZ]; struct if_nameindex *ifptr, *save; if (argc != 1) err_quit("usage: prifnameindex"); /* print all the interface names and indexes */ for (save = ifptr = If_nameindex(); ifptr->if_index > 0; ifptr++) { printf("name = %s, index = %d\n", ifptr->if_name, ifptr->if_index);; if ( (n = If_nametoindex(ifptr->if_name)) != ifptr->if_index) err_quit("if_nametoindex returned %d, expected %d, for %s", n, ifptr->if_index, ifptr->if_name); If_indextoname(ifptr->if_index, ifname); if (strcmp(ifname, ifptr->if_name) != 0) err_quit("if_indextoname returned %s, expected %s, for %d", ifname, ifptr->if_name, ifptr->if_index); } n = if_nametoindex("fkjhkjhgjhgjhgdjhguyetiuyiuyhkjhkjdh"); if (n != 0) err_quit("if_nametoindex returned %d for fkjh...", n); n = if_nametoindex(""); if (n != 0) err_quit("if_nametoindex returned %d for (null)", n); if (if_indextoname(0, ifname) != NULL) err_quit("if_indextoname error for 0"); if (if_indextoname(888888, ifname) != NULL) err_quit("if_indextoname error for 888888"); if_freenameindex(save); exit(0); }