Exemplo n.º 1
0
Arquivo: ndp.c Projeto: ryo/netbsd-src
/*
 * Display an individual neighbor cache entry
 */
static void
get(char *host)
{
	struct sockaddr_in6 *mysin = &sin_m;
	struct addrinfo hints, *res;
	int gai_error;

	sin_m = blank_sin;
	(void)memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_INET6;
	gai_error = getaddrinfo(host, NULL, &hints, &res);
	if (gai_error) {
		warnx("%s: %s", host, gai_strerror(gai_error));
		return;
	}
	makeaddr(mysin, res->ai_addr);
	dump(&mysin->sin6_addr, 0);
	if (found_entry == 0) {
		(void)getnameinfo((struct sockaddr *)(void *)mysin,
		    (socklen_t)mysin->sin6_len,
		    host_buf, sizeof(host_buf), NULL ,0,
		    (nflag ? NI_NUMERICHOST : 0));
		errx(1, "%s (%s) -- no entry", host, host_buf);
	}
}
Exemplo n.º 2
0
/*-----------------------------------------------------------------------------------*/
static void
makestrings(void)
{
  uip_ipaddr_t addr, *addrptr;

  uip_gethostaddr(&addr);
  makeaddr(&addr, ipaddr);
  
  uip_getnetmask(&addr);
  makeaddr(&addr, netmask);
  
  uip_getdraddr(&addr);
  makeaddr(&addr, gateway);

#if WITH_DNS
  addrptr = resolv_getserver();
  if(addrptr != NULL) {
    makeaddr(addrptr, dnsserver);
  }
#endif /* WITH_DNS */
}
Exemplo n.º 3
0
void main(int argc, char *argv[])
{
	int opt, noauth = 0;
	char cmdline[1024], *str;

	while ((opt  = getopt(argc, argv, "f")) != EOF)
		switch (opt) {
		case 'f':
			noauth = 1;
			break;
		}
	dup2(0, 1);
	dup2(0, 2);
	net = 1;
	fgets((char *)&cmdline, 1024, stdin);
	if ((str = strtok((char *)&cmdline, " \n\t\v\r")) == NULL)
		help();
	(void)makeaddr(&from, str);
	if ((str = strtok((char *)NULL, " \n\t\v\r")) == NULL)
		help();
	(void)makeaddr(&to, str);
	if ((str = strtok((char *)NULL, " \n\t\v\r")) != NULL)
		(void)strncpy((char *)&to.pe_tty, str, UT_LINESIZE);
	if (to.pe_host == NULL) 
		if (getTTY(&to) == -1)
			exit(1);
	if (strncmp(from.pe_user, "", UT_NAMESIZE) == 0 || from.pe_host ==
	    NULL || strncmp(from.pe_tty, "", UT_LINESIZE) == 0)
		help();
	if (ident(0, &auth) == 0)
		exit(loop(&from, &to, &auth));
	else 
		if (noauth == 0)
			exit(loop(&from, &to, (struct person *)NULL));
		else
			fprintf(stderr, "write: You cannot be authenticated\n");
	exit(1);
}
Exemplo n.º 4
0
Arquivo: ndp.c Projeto: ryo/netbsd-src
/*
 * Set an individual neighbor cache entry
 */
static int
set(int argc, char **argv)
{
	register struct sockaddr_in6 *mysin = &sin_m;
	register struct sockaddr_dl *sdl;
	register struct rt_msghdr *rtm = &(m_rtmsg.m_rtm);
	struct addrinfo hints, *res;
	int gai_error;
	u_char *ea;
	char *host = argv[0], *eaddr = argv[1];

	getsocket();
	argc -= 2;
	argv += 2;
	sdl_m = blank_sdl;
	sin_m = blank_sin;

	(void)memset(&hints, 0, sizeof(hints));
	hints.ai_family = AF_INET6;
	gai_error = getaddrinfo(host, NULL, &hints, &res);
	if (gai_error) {
		warnx("%s: %s", host, gai_strerror(gai_error));
		return 1;
	}
	makeaddr(mysin, res->ai_addr);
	ea = (u_char *)LLADDR(&sdl_m);
	if (ndp_ether_aton(eaddr, ea) == 0)
		sdl_m.sdl_alen = 6;
	flags = expire_time = 0;
	while (argc-- > 0) {
		if (strncmp(argv[0], "temp", 4) == 0) {
			struct timeval tim;

			(void)gettimeofday(&tim, 0);
			expire_time = tim.tv_sec + 20 * 60;
		} else if (strncmp(argv[0], "proxy", 5) == 0)
			flags |= RTF_ANNOUNCE;
		argv++;
	}
	if (rtmsg(RTM_GET) < 0) {
		errx(1, "RTM_GET(%s) failed", host);
		/* NOTREACHED */
	}
	mysin = (struct sockaddr_in6 *)(void *)(rtm + 1);
	sdl = (struct sockaddr_dl *)(void *)(RT_ROUNDUP(mysin->sin6_len) + (char *)(void *)mysin);
	if (IN6_ARE_ADDR_EQUAL(&mysin->sin6_addr, &sin_m.sin6_addr)) {
		if (sdl->sdl_family == AF_LINK &&
		    !(rtm->rtm_flags & RTF_GATEWAY)) {
			switch (sdl->sdl_type) {
			case IFT_ETHER: case IFT_FDDI: case IFT_ISO88023:
			case IFT_ISO88024: case IFT_ISO88025:
				goto overwrite;
			}
		}
		/*
		 * IPv4 arp command retries with sin_other = SIN_PROXY here.
		 */
		(void)fprintf(stderr, "set: cannot configure a new entry\n");
		return 1;
	}

overwrite:
	if (sdl->sdl_family != AF_LINK) {
		warnx("cannot intuit interface index and type for %s", host);
		return (1);
	}
	sdl_m.sdl_type = sdl->sdl_type;
	sdl_m.sdl_index = sdl->sdl_index;
	return (rtmsg(RTM_ADD));
}