コード例 #1
0
ファイル: prifname.c プロジェクト: jiayuehua/unpv13e
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);
}
コード例 #2
0
ファイル: dgechoaddr.c プロジェクト: as2120/ZAchieve
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);
    }
}
コード例 #3
0
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);
}