Deleted Added
full compact
icmp6.c (285084) icmp6.c (287798)
1/*-
2 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 47 unchanged lines hidden (view full) ---

56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 * SUCH DAMAGE.
59 *
60 * @(#)ip_icmp.c 8.2 (Berkeley) 1/4/94
61 */
62
63#include <sys/cdefs.h>
1/*-
2 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 47 unchanged lines hidden (view full) ---

56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 * SUCH DAMAGE.
59 *
60 * @(#)ip_icmp.c 8.2 (Berkeley) 1/4/94
61 */
62
63#include <sys/cdefs.h>
64__FBSDID("$FreeBSD: head/sys/netinet6/icmp6.c 285084 2015-07-03 09:53:56Z bz $");
64__FBSDID("$FreeBSD: head/sys/netinet6/icmp6.c 287798 2015-09-14 19:17:25Z vangyzen $");
65
66#define MBUF_PRIVATE /* XXXRW: Optimisation tries to avoid M_EXT mbufs */
67
68#include "opt_inet.h"
69#include "opt_inet6.h"
70
71#include <sys/param.h>
72#include <sys/domain.h>

--- 2356 unchanged lines hidden (view full) ---

2429 }
2430
2431 /* Validation passed. */
2432
2433 /* RFC 2461 8.3 */
2434 nd6_cache_lladdr(ifp, &redtgt6, lladdr, lladdrlen, ND_REDIRECT,
2435 is_onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER);
2436
65
66#define MBUF_PRIVATE /* XXXRW: Optimisation tries to avoid M_EXT mbufs */
67
68#include "opt_inet.h"
69#include "opt_inet6.h"
70
71#include <sys/param.h>
72#include <sys/domain.h>

--- 2356 unchanged lines hidden (view full) ---

2429 }
2430
2431 /* Validation passed. */
2432
2433 /* RFC 2461 8.3 */
2434 nd6_cache_lladdr(ifp, &redtgt6, lladdr, lladdrlen, ND_REDIRECT,
2435 is_onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER);
2436
2437 if (!is_onlink) { /* better router case. perform rtredirect. */
2438 /* perform rtredirect */
2437 /*
2438 * Install a gateway route in the better-router case or an interface
2439 * route in the on-link-destination case.
2440 */
2441 {
2439 struct sockaddr_in6 sdst;
2440 struct sockaddr_in6 sgw;
2441 struct sockaddr_in6 ssrc;
2442 struct sockaddr_in6 sdst;
2443 struct sockaddr_in6 sgw;
2444 struct sockaddr_in6 ssrc;
2445 struct sockaddr *gw;
2446 int rt_flags;
2442 u_int fibnum;
2443
2444 bzero(&sdst, sizeof(sdst));
2447 u_int fibnum;
2448
2449 bzero(&sdst, sizeof(sdst));
2445 bzero(&sgw, sizeof(sgw));
2446 bzero(&ssrc, sizeof(ssrc));
2450 bzero(&ssrc, sizeof(ssrc));
2447 sdst.sin6_family = sgw.sin6_family = ssrc.sin6_family = AF_INET6;
2448 sdst.sin6_len = sgw.sin6_len = ssrc.sin6_len =
2449 sizeof(struct sockaddr_in6);
2450 bcopy(&redtgt6, &sgw.sin6_addr, sizeof(struct in6_addr));
2451 sdst.sin6_family = ssrc.sin6_family = AF_INET6;
2452 sdst.sin6_len = ssrc.sin6_len = sizeof(struct sockaddr_in6);
2451 bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr));
2452 bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr));
2453 bcopy(&reddst6, &sdst.sin6_addr, sizeof(struct in6_addr));
2454 bcopy(&src6, &ssrc.sin6_addr, sizeof(struct in6_addr));
2455 rt_flags = RTF_HOST;
2456 if (is_router) {
2457 bzero(&sgw, sizeof(sgw));
2458 sgw.sin6_family = AF_INET6;
2459 sgw.sin6_len = sizeof(struct sockaddr_in6);
2460 bcopy(&redtgt6, &sgw.sin6_addr,
2461 sizeof(struct in6_addr));
2462 gw = (struct sockaddr *)&sgw;
2463 rt_flags |= RTF_GATEWAY;
2464 } else
2465 gw = ifp->if_addr->ifa_addr;
2453 for (fibnum = 0; fibnum < rt_numfibs; fibnum++)
2466 for (fibnum = 0; fibnum < rt_numfibs; fibnum++)
2454 in6_rtredirect((struct sockaddr *)&sdst,
2455 (struct sockaddr *)&sgw, (struct sockaddr *)NULL,
2456 RTF_GATEWAY | RTF_HOST, (struct sockaddr *)&ssrc,
2457 fibnum);
2467 in6_rtredirect((struct sockaddr *)&sdst, gw,
2468 (struct sockaddr *)NULL, rt_flags,
2469 (struct sockaddr *)&ssrc, fibnum);
2458 }
2459 /* finally update cached route in each socket via pfctlinput */
2460 {
2461 struct sockaddr_in6 sdst;
2462
2463 bzero(&sdst, sizeof(sdst));
2464 sdst.sin6_family = AF_INET6;
2465 sdst.sin6_len = sizeof(struct sockaddr_in6);

--- 405 unchanged lines hidden ---
2470 }
2471 /* finally update cached route in each socket via pfctlinput */
2472 {
2473 struct sockaddr_in6 sdst;
2474
2475 bzero(&sdst, sizeof(sdst));
2476 sdst.sin6_family = AF_INET6;
2477 sdst.sin6_len = sizeof(struct sockaddr_in6);

--- 405 unchanged lines hidden ---