Deleted Added
full compact
in6.c (238967) in6.c (238990)
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 * @(#)in.c 8.2 (Berkeley) 11/15/93
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 * @(#)in.c 8.2 (Berkeley) 11/15/93
61 */
62
63#include <sys/cdefs.h>
64__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238967 2012-08-01 09:00:26Z glebius $");
64__FBSDID("$FreeBSD: head/sys/netinet6/in6.c 238990 2012-08-02 13:57:49Z glebius $");
65
66#include "opt_compat.h"
67#include "opt_inet.h"
68#include "opt_inet6.h"
69
70#include <sys/param.h>
71#include <sys/errno.h>
72#include <sys/jail.h>

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

2492 const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask;
2493 struct llentry *lle, *next;
2494 int i;
2495
2496 /*
2497 * (flags & LLE_STATIC) means deleting all entries
2498 * including static ND6 entries.
2499 */
65
66#include "opt_compat.h"
67#include "opt_inet.h"
68#include "opt_inet6.h"
69
70#include <sys/param.h>
71#include <sys/errno.h>
72#include <sys/jail.h>

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

2492 const struct sockaddr_in6 *msk = (const struct sockaddr_in6 *)mask;
2493 struct llentry *lle, *next;
2494 int i;
2495
2496 /*
2497 * (flags & LLE_STATIC) means deleting all entries
2498 * including static ND6 entries.
2499 */
2500 IF_AFDATA_WLOCK(llt->llt_ifp);
2500 for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
2501 LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
2502 if (IN6_ARE_MASKED_ADDR_EQUAL(
2501 for (i = 0; i < LLTBL_HASHTBL_SIZE; i++) {
2502 LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
2503 if (IN6_ARE_MASKED_ADDR_EQUAL(
2503 &((struct sockaddr_in6 *)L3_ADDR(lle))->sin6_addr,
2504 &pfx->sin6_addr,
2505 &msk->sin6_addr) &&
2506 ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))) {
2507 int canceled;
2508
2509 canceled = callout_drain(&lle->la_timer);
2504 &satosin6(L3_ADDR(lle))->sin6_addr,
2505 &pfx->sin6_addr, &msk->sin6_addr) &&
2506 ((flags & LLE_STATIC) ||
2507 !(lle->la_flags & LLE_STATIC))) {
2510 LLE_WLOCK(lle);
2508 LLE_WLOCK(lle);
2511 if (canceled)
2509 if (callout_stop(&lle->la_timer))
2512 LLE_REMREF(lle);
2513 llentry_free(lle);
2514 }
2515 }
2516 }
2510 LLE_REMREF(lle);
2511 llentry_free(lle);
2512 }
2513 }
2514 }
2515 IF_AFDATA_WUNLOCK(llt->llt_ifp);
2517}
2518
2519static int
2520in6_lltable_rtcheck(struct ifnet *ifp,
2521 u_int flags,
2522 const struct sockaddr *l3addr)
2523{
2524 struct rtentry *rt;

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

2600 lle->la_flags = flags & ~LLE_CREATE;
2601 if ((flags & (LLE_CREATE | LLE_IFADDR)) == (LLE_CREATE | LLE_IFADDR)) {
2602 bcopy(IF_LLADDR(ifp), &lle->ll_addr, ifp->if_addrlen);
2603 lle->la_flags |= (LLE_VALID | LLE_STATIC);
2604 }
2605
2606 lle->lle_tbl = llt;
2607 lle->lle_head = lleh;
2516}
2517
2518static int
2519in6_lltable_rtcheck(struct ifnet *ifp,
2520 u_int flags,
2521 const struct sockaddr *l3addr)
2522{
2523 struct rtentry *rt;

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

2599 lle->la_flags = flags & ~LLE_CREATE;
2600 if ((flags & (LLE_CREATE | LLE_IFADDR)) == (LLE_CREATE | LLE_IFADDR)) {
2601 bcopy(IF_LLADDR(ifp), &lle->ll_addr, ifp->if_addrlen);
2602 lle->la_flags |= (LLE_VALID | LLE_STATIC);
2603 }
2604
2605 lle->lle_tbl = llt;
2606 lle->lle_head = lleh;
2607 lle->la_flags |= LLE_LINKED;
2608 LIST_INSERT_HEAD(lleh, lle, lle_next);
2609 } else if (flags & LLE_DELETE) {
2610 if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
2611 LLE_WLOCK(lle);
2608 LIST_INSERT_HEAD(lleh, lle, lle_next);
2609 } else if (flags & LLE_DELETE) {
2610 if (!(lle->la_flags & LLE_IFADDR) || (flags & LLE_IFADDR)) {
2611 LLE_WLOCK(lle);
2612 lle->la_flags = LLE_DELETED;
2612 lle->la_flags |= LLE_DELETED;
2613 LLE_WUNLOCK(lle);
2614#ifdef DIAGNOSTIC
2615 log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
2616#endif
2617 }
2618 lle = (void *)-1;
2619 }
2620 if (LLE_IS_VALID(lle)) {

--- 187 unchanged lines hidden ---
2613 LLE_WUNLOCK(lle);
2614#ifdef DIAGNOSTIC
2615 log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
2616#endif
2617 }
2618 lle = (void *)-1;
2619 }
2620 if (LLE_IS_VALID(lle)) {

--- 187 unchanged lines hidden ---