ndp.c (238273) | ndp.c (243903) |
---|---|
1/* $FreeBSD: head/usr.sbin/ndp/ndp.c 238273 2012-07-09 06:21:46Z hrs $ */ | 1/* $FreeBSD: head/usr.sbin/ndp/ndp.c 243903 2012-12-05 19:45:24Z hrs $ */ |
2/* $KAME: ndp.c,v 1.104 2003/06/27 07:48:39 itojun Exp $ */ 3 4/* 5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 389 unchanged lines hidden (view full) --- 399 hints.ai_family = AF_INET6; 400 gai_error = getaddrinfo(host, NULL, &hints, &res); 401 if (gai_error) { 402 fprintf(stderr, "ndp: %s: %s\n", host, 403 gai_strerror(gai_error)); 404 return 1; 405 } 406 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; | 2/* $KAME: ndp.c,v 1.104 2003/06/27 07:48:39 itojun Exp $ */ 3 4/* 5 * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 389 unchanged lines hidden (view full) --- 399 hints.ai_family = AF_INET6; 400 gai_error = getaddrinfo(host, NULL, &hints, &res); 401 if (gai_error) { 402 fprintf(stderr, "ndp: %s: %s\n", host, 403 gai_strerror(gai_error)); 404 return 1; 405 } 406 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; |
407#ifdef __KAME__ 408 if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr)) { 409 *(u_int16_t *)&sin->sin6_addr.s6_addr[2] = 410 htons(((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id); 411 } 412#endif | 407 sin->sin6_scope_id = 408 ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; |
413 ea = (u_char *)LLADDR(&sdl_m); 414 if (ndp_ether_aton(eaddr, ea) == 0) 415 sdl_m.sdl_alen = 6; 416 flags = expire_time = 0; 417 while (argc-- > 0) { 418 if (strncmp(argv[0], "temp", 4) == 0) { 419 struct timeval time; 420 --- 52 unchanged lines hidden (view full) --- 473 hints.ai_family = AF_INET6; 474 gai_error = getaddrinfo(host, NULL, &hints, &res); 475 if (gai_error) { 476 fprintf(stderr, "ndp: %s: %s\n", host, 477 gai_strerror(gai_error)); 478 return; 479 } 480 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; | 409 ea = (u_char *)LLADDR(&sdl_m); 410 if (ndp_ether_aton(eaddr, ea) == 0) 411 sdl_m.sdl_alen = 6; 412 flags = expire_time = 0; 413 while (argc-- > 0) { 414 if (strncmp(argv[0], "temp", 4) == 0) { 415 struct timeval time; 416 --- 52 unchanged lines hidden (view full) --- 469 hints.ai_family = AF_INET6; 470 gai_error = getaddrinfo(host, NULL, &hints, &res); 471 if (gai_error) { 472 fprintf(stderr, "ndp: %s: %s\n", host, 473 gai_strerror(gai_error)); 474 return; 475 } 476 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; |
481#ifdef __KAME__ 482 if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr)) { 483 *(u_int16_t *)&sin->sin6_addr.s6_addr[2] = 484 htons(((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id); 485 } 486#endif | |
487 dump(&sin->sin6_addr, 0); 488 if (found_entry == 0) { 489 getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, 490 sizeof(host_buf), NULL ,0, 491 (nflag ? NI_NUMERICHOST : 0)); 492 printf("%s (%s) -- no entry\n", host, host_buf); 493 exit(1); 494 } --- 20 unchanged lines hidden (view full) --- 515 hints.ai_family = AF_INET6; 516 gai_error = getaddrinfo(host, NULL, &hints, &res); 517 if (gai_error) { 518 fprintf(stderr, "ndp: %s: %s\n", host, 519 gai_strerror(gai_error)); 520 return 1; 521 } 522 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; | 477 dump(&sin->sin6_addr, 0); 478 if (found_entry == 0) { 479 getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, 480 sizeof(host_buf), NULL ,0, 481 (nflag ? NI_NUMERICHOST : 0)); 482 printf("%s (%s) -- no entry\n", host, host_buf); 483 exit(1); 484 } --- 20 unchanged lines hidden (view full) --- 505 hints.ai_family = AF_INET6; 506 gai_error = getaddrinfo(host, NULL, &hints, &res); 507 if (gai_error) { 508 fprintf(stderr, "ndp: %s: %s\n", host, 509 gai_strerror(gai_error)); 510 return 1; 511 } 512 sin->sin6_addr = ((struct sockaddr_in6 *)res->ai_addr)->sin6_addr; |
523#ifdef __KAME__ 524 if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr)) { 525 *(u_int16_t *)&sin->sin6_addr.s6_addr[2] = 526 htons(((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id); 527 } 528#endif | 513 sin->sin6_scope_id = 514 ((struct sockaddr_in6 *)res->ai_addr)->sin6_scope_id; |
529 if (rtmsg(RTM_GET) < 0) { 530 errx(1, "RTM_GET(%s) failed", host); 531 /* NOTREACHED */ 532 } 533 sin = (struct sockaddr_in6 *)(rtm + 1); 534 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin); 535 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { 536 if (sdl->sdl_family == AF_LINK && --- 14 unchanged lines hidden (view full) --- 551 } 552 /* 553 * need to reinit the field because it has rt_key 554 * but we want the actual address 555 */ 556 NEXTADDR(RTA_DST, sin_m); 557 rtm->rtm_flags |= RTF_LLDATA; 558 if (rtmsg(RTM_DELETE) == 0) { | 515 if (rtmsg(RTM_GET) < 0) { 516 errx(1, "RTM_GET(%s) failed", host); 517 /* NOTREACHED */ 518 } 519 sin = (struct sockaddr_in6 *)(rtm + 1); 520 sdl = (struct sockaddr_dl *)(ROUNDUP(sin->sin6_len) + (char *)sin); 521 if (IN6_ARE_ADDR_EQUAL(&sin->sin6_addr, &sin_m.sin6_addr)) { 522 if (sdl->sdl_family == AF_LINK && --- 14 unchanged lines hidden (view full) --- 537 } 538 /* 539 * need to reinit the field because it has rt_key 540 * but we want the actual address 541 */ 542 NEXTADDR(RTA_DST, sin_m); 543 rtm->rtm_flags |= RTF_LLDATA; 544 if (rtmsg(RTM_DELETE) == 0) { |
559 struct sockaddr_in6 s6 = *sin; /* XXX: for safety */ 560 561#ifdef __KAME__ 562 if (IN6_IS_ADDR_LINKLOCAL(&s6.sin6_addr)) { 563 s6.sin6_scope_id = ntohs(*(u_int16_t *)&s6.sin6_addr.s6_addr[2]); 564 *(u_int16_t *)&s6.sin6_addr.s6_addr[2] = 0; 565 } 566#endif 567 getnameinfo((struct sockaddr *)&s6, 568 s6.sin6_len, host_buf, | 545 getnameinfo((struct sockaddr *)sin, 546 sin->sin6_len, host_buf, |
569 sizeof(host_buf), NULL, 0, 570 (nflag ? NI_NUMERICHOST : 0)); 571 printf("%s (%s) deleted\n", host, host_buf); 572 } 573 574 return 0; 575} 576 --- 84 unchanged lines hidden (view full) --- 661 found_entry = 1; 662 } else if (IN6_IS_ADDR_MULTICAST(&sin->sin6_addr)) 663 continue; 664 if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr) || 665 IN6_IS_ADDR_MC_LINKLOCAL(&sin->sin6_addr)) { 666 /* XXX: should scope id be filled in the kernel? */ 667 if (sin->sin6_scope_id == 0) 668 sin->sin6_scope_id = sdl->sdl_index; | 547 sizeof(host_buf), NULL, 0, 548 (nflag ? NI_NUMERICHOST : 0)); 549 printf("%s (%s) deleted\n", host, host_buf); 550 } 551 552 return 0; 553} 554 --- 84 unchanged lines hidden (view full) --- 639 found_entry = 1; 640 } else if (IN6_IS_ADDR_MULTICAST(&sin->sin6_addr)) 641 continue; 642 if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr) || 643 IN6_IS_ADDR_MC_LINKLOCAL(&sin->sin6_addr)) { 644 /* XXX: should scope id be filled in the kernel? */ 645 if (sin->sin6_scope_id == 0) 646 sin->sin6_scope_id = sdl->sdl_index; |
669#ifdef __KAME__ 670 /* KAME specific hack; removed the embedded id */ 671 *(u_int16_t *)&sin->sin6_addr.s6_addr[2] = 0; 672#endif | |
673 } 674 getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, 675 sizeof(host_buf), NULL, 0, (nflag ? NI_NUMERICHOST : 0)); 676 if (cflag) { 677#ifdef RTF_WASCLONED 678 if (rtm->rtm_flags & RTF_WASCLONED) 679 delete(host_buf); 680#elif defined(RTF_CLONED) --- 645 unchanged lines hidden (view full) --- 1326#ifdef NDPRF_ONLINK 1327 p6 = PR.prefix; 1328#else 1329 memset(&p6, 0, sizeof(p6)); 1330 p6.sin6_family = AF_INET6; 1331 p6.sin6_len = sizeof(p6); 1332 p6.sin6_addr = PR.prefix; 1333#endif | 647 } 648 getnameinfo((struct sockaddr *)sin, sin->sin6_len, host_buf, 649 sizeof(host_buf), NULL, 0, (nflag ? NI_NUMERICHOST : 0)); 650 if (cflag) { 651#ifdef RTF_WASCLONED 652 if (rtm->rtm_flags & RTF_WASCLONED) 653 delete(host_buf); 654#elif defined(RTF_CLONED) --- 645 unchanged lines hidden (view full) --- 1300#ifdef NDPRF_ONLINK 1301 p6 = PR.prefix; 1302#else 1303 memset(&p6, 0, sizeof(p6)); 1304 p6.sin6_family = AF_INET6; 1305 p6.sin6_len = sizeof(p6); 1306 p6.sin6_addr = PR.prefix; 1307#endif |
1334 1335 /* 1336 * copy link index to sin6_scope_id field. 1337 * XXX: KAME specific. 1338 */ 1339 if (IN6_IS_ADDR_LINKLOCAL(&p6.sin6_addr)) { 1340 u_int16_t linkid; 1341 1342 memcpy(&linkid, &p6.sin6_addr.s6_addr[2], 1343 sizeof(linkid)); 1344 linkid = ntohs(linkid); 1345 p6.sin6_scope_id = linkid; 1346 p6.sin6_addr.s6_addr[2] = 0; 1347 p6.sin6_addr.s6_addr[3] = 0; 1348 } 1349 | |
1350 niflags = NI_NUMERICHOST; 1351 if (getnameinfo((struct sockaddr *)&p6, 1352 sizeof(p6), namebuf, sizeof(namebuf), 1353 NULL, 0, niflags)) { 1354 warnx("getnameinfo failed"); 1355 continue; 1356 } 1357 printf("%s/%d if=%s\n", namebuf, PR.prefixlen, --- 275 unchanged lines hidden --- | 1308 niflags = NI_NUMERICHOST; 1309 if (getnameinfo((struct sockaddr *)&p6, 1310 sizeof(p6), namebuf, sizeof(namebuf), 1311 NULL, 0, niflags)) { 1312 warnx("getnameinfo failed"); 1313 continue; 1314 } 1315 printf("%s/%d if=%s\n", namebuf, PR.prefixlen, --- 275 unchanged lines hidden --- |