summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/inet/ip.h3
-rw-r--r--usr/src/uts/common/inet/ip/ip.c2
-rw-r--r--usr/src/uts/common/inet/ip/ip_if.c74
-rw-r--r--usr/src/uts/common/inet/ip/ip_ire.c303
-rw-r--r--usr/src/uts/common/inet/ip/ip_ndp.c40
-rw-r--r--usr/src/uts/common/inet/ip_ire.h9
-rw-r--r--usr/src/uts/common/inet/ip_ndp.h4
7 files changed, 56 insertions, 379 deletions
diff --git a/usr/src/uts/common/inet/ip.h b/usr/src/uts/common/inet/ip.h
index 909a1a71a2..ab4e145aed 100644
--- a/usr/src/uts/common/inet/ip.h
+++ b/usr/src/uts/common/inet/ip.h
@@ -20,7 +20,7 @@
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1990 Mentat Inc. */
@@ -2519,7 +2519,6 @@ typedef struct ire_s {
ipaddr_t ire_in_src_addr;
/* source ip-addr of incoming packet */
clock_t ire_last_used_time; /* Last used time */
- struct ire_s *ire_fastpath; /* Pointer to next ire in fastpath */
tsol_ire_gw_secattr_t *ire_gw_secattr; /* gateway security attributes */
zoneid_t ire_zoneid; /* for local address discrimination */
/*
diff --git a/usr/src/uts/common/inet/ip/ip.c b/usr/src/uts/common/inet/ip/ip.c
index d3ed41cf45..f94130944a 100644
--- a/usr/src/uts/common/inet/ip/ip.c
+++ b/usr/src/uts/common/inet/ip/ip.c
@@ -27681,7 +27681,7 @@ nak:
nce->nce_res_mp = mp1;
nce->nce_state = ND_REACHABLE;
mutex_exit(&nce->nce_lock);
- ire_fastpath(ire);
+ nce_fastpath(nce);
}
/*
* The cached nce_t has been updated to be reachable;
diff --git a/usr/src/uts/common/inet/ip/ip_if.c b/usr/src/uts/common/inet/ip/ip_if.c
index 32367adb79..7868efa93d 100644
--- a/usr/src/uts/common/inet/ip/ip_if.c
+++ b/usr/src/uts/common/inet/ip/ip_if.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1990 Mentat Inc. */
@@ -1765,11 +1765,7 @@ ill_downi_mrtun_srcif(ire_t *ire, char *ill_arg)
void
ill_fastpath_nack(ill_t *ill)
{
- if (ill->ill_isv6) {
- nce_fastpath_list_dispatch(ill, NULL, NULL);
- } else {
- ire_fastpath_list_dispatch(ill, NULL, NULL);
- }
+ nce_fastpath_list_dispatch(ill, NULL, NULL);
}
/* Consume an M_IOCACK of the fastpath probe. */
@@ -1796,38 +1792,7 @@ ill_fastpath_ack(ill_t *ill, mblk_t *mp)
* Update all IRE's or NCE's that are waiting for
* fastpath update.
*/
- if (ill->ill_isv6) {
- /*
- * update nce's in the fastpath list.
- */
- nce_fastpath_list_dispatch(ill,
- ndp_fastpath_update, mp);
- } else {
-
- /*
- * update ire's in the fastpath list.
- */
- ire_fastpath_list_dispatch(ill,
- ire_fastpath_update, mp);
- /*
- * Check if we need to traverse reverse tunnel table.
- * Since there is only single ire_type (IRE_MIPRTUN)
- * in the table, we don't need to match on ire_type.
- * We have to check ire_mrtun_count and not the
- * ill_mrtun_refcnt since ill_mrtun_refcnt is set
- * on the incoming ill and here we are dealing with
- * outgoing ill.
- */
- mutex_enter(&ire_mrtun_lock);
- if (ire_mrtun_count != 0) {
- mutex_exit(&ire_mrtun_lock);
- ire_walk_ill_mrtun(MATCH_IRE_WQ, IRE_MIPRTUN,
- (void (*)(ire_t *, void *))
- ire_fastpath_update, mp, ill);
- } else {
- mutex_exit(&ire_mrtun_lock);
- }
- }
+ nce_fastpath_list_dispatch(ill, ndp_fastpath_update, mp);
mp1 = mp->b_cont;
freeb(mp);
mp = mp1;
@@ -15470,10 +15435,8 @@ redo:
clear_ire->ire_marks |= IRE_MARK_CONDEMNED;
irb->irb_marks |= IRB_MARK_CONDEMNED;
- if (clear_ire_stq != NULL) {
- ire_fastpath_list_delete(
- (ill_t *)clear_ire_stq->ire_stq->q_ptr,
- clear_ire_stq);
+ if (clear_ire_stq != NULL && clear_ire_stq->ire_nce != NULL) {
+ nce_fastpath_list_delete(clear_ire_stq->ire_nce);
clear_ire_stq->ire_marks |= IRE_MARK_CONDEMNED;
}
@@ -24267,30 +24230,17 @@ ipif_getby_indexes(uint_t ifindex, uint_t lifidx, boolean_t isv6)
}
/*
- * Flush the fastpath by deleting any IRE's that are waiting for the fastpath,
- * and any IRE's that are using the fastpath. There are two exceptions:
- * IRE_MIPRTUN and IRE_BROADCAST are difficult to recreate, so instead we just
- * nuke their nce_fp_mp's; see ire_fastpath_flush() for details.
+ * Flush the fastpath by deleting any nce's that are waiting for the fastpath,
+ * There is one exceptions IRE_BROADCAST are difficult to recreate,
+ * so instead we just nuke their nce_fp_mp's; see ndp_fastpath_flush()
+ * for details.
*/
void
ill_fastpath_flush(ill_t *ill)
{
- if (ill->ill_isv6) {
- nce_fastpath_list_dispatch(ill, NULL, NULL);
- ndp_walk(ill, (pfi_t)ndp_fastpath_flush, NULL);
- } else {
- ire_fastpath_list_dispatch(ill, NULL, NULL);
- ire_walk_ill_v4(MATCH_IRE_WQ | MATCH_IRE_TYPE,
- IRE_CACHE | IRE_BROADCAST, ire_fastpath_flush, NULL, ill);
- mutex_enter(&ire_mrtun_lock);
- if (ire_mrtun_count != 0) {
- mutex_exit(&ire_mrtun_lock);
- ire_walk_ill_mrtun(MATCH_IRE_WQ, IRE_MIPRTUN,
- ire_fastpath_flush, NULL, ill);
- } else {
- mutex_exit(&ire_mrtun_lock);
- }
- }
+ nce_fastpath_list_dispatch(ill, NULL, NULL);
+ ndp_walk_common((ill->ill_isv6 ? &ndp6 : &ndp4), ill,
+ (pfi_t)ndp_fastpath_flush, NULL, B_TRUE);
}
/*
diff --git a/usr/src/uts/common/inet/ip/ip_ire.c b/usr/src/uts/common/inet/ip/ip_ire.c
index 62ef6b603e..31e51a6b51 100644
--- a/usr/src/uts/common/inet/ip/ip_ire.c
+++ b/usr/src/uts/common/inet/ip/ip_ire.c
@@ -399,7 +399,6 @@ static void ire_walk_ill_ipvers(uint_t match_flags, uint_t ire_type,
pfv_t func, void *arg, uchar_t vers, ill_t *ill);
static void ire_cache_cleanup(irb_t *irb, uint32_t threshold, int cnt);
extern void ill_unlock_ills(ill_t **list, int cnt);
-static void ire_fastpath_list_add(ill_t *ill, ire_t *ire);
static void ip_nce_clookup_and_delete(nce_t *nce, void *arg);
extern void th_trace_rrecord(th_trace_t *);
#ifdef IRE_DEBUG
@@ -2139,284 +2138,6 @@ ire_expire(ire_t *ire, char *arg)
}
/*
- * Do fast path probing if necessary.
- */
-void
-ire_fastpath(ire_t *ire)
-{
- ill_t *ill;
- int res;
-
- if (ire->ire_nce == NULL || ire->ire_nce->nce_fp_mp != NULL ||
- ire->ire_nce->nce_state != ND_REACHABLE ||
- ire->ire_nce->nce_res_mp == NULL) {
-
- /*
- * Already contains fastpath info or
- * doesn't have DL_UNITDATA_REQ header or
- * or is an incomplete ire in the ire table
- * or is a loopback broadcast ire i.e. no stq.
- */
- return;
- }
- ill = ire_to_ill(ire);
- if (ill == NULL)
- return;
- ire_fastpath_list_add(ill, ire);
- res = ill_fastpath_probe(ill, ire->ire_nce->nce_res_mp);
- /*
- * EAGAIN is an indication of a transient error
- * i.e. allocation failure etc. leave the ire in the list it will
- * be updated when another probe happens for another ire if not
- * it will be taken out of the list when the ire is deleted.
- */
- if (res != 0 && res != EAGAIN)
- ire_fastpath_list_delete(ill, ire);
-}
-
-/*
- * Update all IRE's that are not in fastpath mode and
- * have an dlureq_mp that matches mp. mp->b_cont contains
- * the fastpath header.
- *
- * Returns TRUE if entry should be dequeued, or FALSE otherwise.
- */
-boolean_t
-ire_fastpath_update(ire_t *ire, void *arg)
-{
- mblk_t *mp, *fp_mp;
- uchar_t *up, *up2;
- ptrdiff_t cmplen;
- nce_t *arpce;
-
- ASSERT((ire->ire_type & (IRE_CACHE | IRE_BROADCAST |
- IRE_MIPRTUN)) != 0);
-
- /*
- * Already contains fastpath info or doesn't have
- * DL_UNITDATA_REQ header or is an incomplete ire.
- */
- if (ire->ire_nce == NULL || ire->ire_nce->nce_res_mp == NULL ||
- ire->ire_nce->nce_fp_mp != NULL ||
- ire->ire_nce->nce_state != ND_REACHABLE)
- return (B_TRUE);
-
- ip2dbg(("ire_fastpath_update: trying\n"));
- mp = arg;
- up = mp->b_rptr;
- cmplen = mp->b_wptr - up;
- /* Serialize multiple fast path updates */
- mutex_enter(&ire->ire_nce->nce_lock);
- up2 = ire->ire_nce->nce_res_mp->b_rptr;
- ASSERT(cmplen >= 0);
- if (ire->ire_nce->nce_res_mp->b_wptr - up2 != cmplen ||
- bcmp(up, up2, cmplen) != 0) {
- mutex_exit(&ire->ire_nce->nce_lock);
- /*
- * Don't take the ire off the fastpath list yet,
- * since the response may come later.
- */
- return (B_FALSE);
- }
- arpce = ire->ire_nce;
- /* Matched - install mp as the nce_fp_mp */
- ip1dbg(("ire_fastpath_update: match\n"));
- fp_mp = dupb(mp->b_cont);
- if (fp_mp) {
- /*
- * We checked nce_fp_mp above. Check it again with the
- * lock. Update fp_mp only if it has not been done
- * already.
- */
- if (arpce->nce_fp_mp == NULL) {
- /*
- * ire_ll_hdr_length is just an optimization to
- * store the length. It is used to return the
- * fast path header length to the upper layers.
- */
- arpce->nce_fp_mp = fp_mp;
- ire->ire_ll_hdr_length =
- (uint_t)(fp_mp->b_wptr - fp_mp->b_rptr);
- } else {
- freeb(fp_mp);
- }
- }
- mutex_exit(&ire->ire_nce->nce_lock);
- return (B_TRUE);
-}
-
-/*
- * This function handles the DL_NOTE_FASTPATH_FLUSH notification from the
- * driver.
- */
-/* ARGSUSED */
-void
-ire_fastpath_flush(ire_t *ire, void *arg)
-{
- ill_t *ill;
- int res;
-
- /* No fastpath info? */
- if (ire->ire_nce == NULL ||
- ire->ire_nce->nce_fp_mp == NULL || ire->ire_nce->nce_res_mp == NULL)
- return;
-
- /*
- * Just remove the IRE if it is for non-broadcast dest. Then
- * we will create another one which will have the correct
- * fastpath info.
- */
- switch (ire->ire_type) {
- case IRE_CACHE:
- ire_delete(ire);
- break;
- case IRE_MIPRTUN:
- case IRE_BROADCAST:
- /*
- * We can't delete the ire since it is difficult to
- * recreate these ire's without going through the
- * ipif down/up dance. The nce_fp_mp is protected by the
- * nce_lock in the case of IRE_MIPRTUN and IRE_BROADCAST.
- * All access to ire->ire_nce->nce_fp_mp in the case of these
- * 2 ire types * is protected by nce_lock.
- */
- mutex_enter(&ire->ire_nce->nce_lock);
- if (ire->ire_nce->nce_fp_mp != NULL) {
- freeb(ire->ire_nce->nce_fp_mp);
- ire->ire_nce->nce_fp_mp = NULL;
- mutex_exit(&ire->ire_nce->nce_lock);
- /*
- * No fastpath probe if there is no stq i.e.
- * i.e. the case of loopback broadcast ire.
- */
- if (ire->ire_stq == NULL)
- break;
- ill = (ill_t *)((ire->ire_stq)->q_ptr);
- ire_fastpath_list_add(ill, ire);
- res = ill_fastpath_probe(ill, ire->ire_nce->nce_res_mp);
- /*
- * EAGAIN is an indication of a transient error
- * i.e. allocation failure etc. leave the ire in the
- * list it will be updated when another probe happens
- * for another ire if not it will be taken out of the
- * list when the ire is deleted.
- */
- if (res != 0 && res != EAGAIN)
- ire_fastpath_list_delete(ill, ire);
- } else {
- mutex_exit(&ire->ire_nce->nce_lock);
- }
- break;
- default:
- /* This should not happen! */
- ip0dbg(("ire_fastpath_flush: Wrong ire type %s\n",
- ip_nv_lookup(ire_nv_tbl, (int)ire->ire_type)));
- break;
- }
-}
-
-/*
- * Drain the list of ire's waiting for fastpath response.
- */
-void
-ire_fastpath_list_dispatch(ill_t *ill, boolean_t (*func)(ire_t *, void *),
- void *arg)
-{
- ire_t *next_ire;
- ire_t *current_ire;
- ire_t *first_ire;
- ire_t *prev_ire = NULL;
-
- ASSERT(ill != NULL);
-
- mutex_enter(&ill->ill_lock);
- first_ire = current_ire = (ire_t *)ill->ill_fastpath_list;
- while (current_ire != (ire_t *)&ill->ill_fastpath_list) {
- next_ire = current_ire->ire_fastpath;
- /*
- * Take it off the list if we're flushing, or if the callback
- * routine tells us to do so. Otherwise, leave the ire in the
- * fastpath list to handle any pending response from the lower
- * layer. We can't drain the list when the callback routine
- * comparison failed, because the response is asynchronous in
- * nature, and may not arrive in the same order as the list
- * insertion.
- */
- if (func == NULL || func(current_ire, arg)) {
- current_ire->ire_fastpath = NULL;
- if (current_ire == first_ire)
- ill->ill_fastpath_list = first_ire = next_ire;
- else
- prev_ire->ire_fastpath = next_ire;
- } else {
- /* previous element that is still in the list */
- prev_ire = current_ire;
- }
- current_ire = next_ire;
- }
- mutex_exit(&ill->ill_lock);
-}
-
-/*
- * Add ire to the ire fastpath list.
- */
-static void
-ire_fastpath_list_add(ill_t *ill, ire_t *ire)
-{
- ASSERT(ill != NULL);
- ASSERT(ire->ire_stq != NULL);
-
- rw_enter(&ire->ire_bucket->irb_lock, RW_READER);
- mutex_enter(&ill->ill_lock);
-
- /*
- * if ire has not been deleted and
- * is not already in the list add it.
- */
- if (((ire->ire_marks & IRE_MARK_CONDEMNED) == 0) &&
- (ire->ire_fastpath == NULL)) {
- ire->ire_fastpath = (ire_t *)ill->ill_fastpath_list;
- ill->ill_fastpath_list = ire;
- }
-
- mutex_exit(&ill->ill_lock);
- rw_exit(&ire->ire_bucket->irb_lock);
-}
-
-/*
- * remove ire from the ire fastpath list.
- */
-void
-ire_fastpath_list_delete(ill_t *ill, ire_t *ire)
-{
- ire_t *ire_ptr;
-
- ASSERT(ire->ire_stq != NULL && ill != NULL);
-
- mutex_enter(&ill->ill_lock);
- if (ire->ire_fastpath == NULL)
- goto done;
-
- ASSERT(ill->ill_fastpath_list != &ill->ill_fastpath_list);
-
- if (ill->ill_fastpath_list == ire) {
- ill->ill_fastpath_list = ire->ire_fastpath;
- } else {
- ire_ptr = ill->ill_fastpath_list;
- while (ire_ptr != (ire_t *)&ill->ill_fastpath_list) {
- if (ire_ptr->ire_fastpath == ire) {
- ire_ptr->ire_fastpath = ire->ire_fastpath;
- break;
- }
- ire_ptr = ire_ptr->ire_fastpath;
- }
- }
- ire->ire_fastpath = NULL;
-done:
- mutex_exit(&ill->ill_lock);
-}
-
-/*
* Return any local address. We use this to target ourselves
* when the src address was specified as 'default'.
* Preference for IRE_LOCAL entries.
@@ -3844,8 +3565,11 @@ ire_add_v4(ire_t **ire_p, queue_t *q, mblk_t *mp, ipsq_func_t func,
* in the list. Otherwise the fast path ack won't find the ire in
* the table.
*/
- if (ire->ire_type == IRE_CACHE || ire->ire_type == IRE_BROADCAST)
- ire_fastpath(ire);
+ if (ire->ire_type == IRE_CACHE ||
+ (ire->ire_type == IRE_BROADCAST && ire->ire_stq != NULL)) {
+ ASSERT(ire->ire_nce != NULL);
+ nce_fastpath(ire->ire_nce);
+ }
if (ire->ire_ipif != NULL)
ASSERT(!MUTEX_HELD(&ire->ire_ipif->ipif_ill->ill_lock));
*ire_p = ire;
@@ -4074,12 +3798,11 @@ ire_delete(ire_t *ire)
/*
* In case of V4 we might still be waiting for fastpath ack.
*/
- if (ire->ire_ipversion == IPV4_VERSION && ire->ire_stq != NULL) {
- ill_t *ill;
-
- ill = ire_to_ill(ire);
- if (ill != NULL)
- ire_fastpath_list_delete(ill, ire);
+ if (ire->ire_ipversion == IPV4_VERSION &&
+ (ire->ire_type == IRE_CACHE ||
+ (ire->ire_type == IRE_BROADCAST && ire->ire_stq != NULL))) {
+ ASSERT(ire->ire_nce != NULL);
+ nce_fastpath_list_delete(ire->ire_nce);
}
if (ire->ire_ptpn == NULL) {
@@ -4213,7 +3936,6 @@ ire_inactive(ire_t *ire)
}
if (ire->ire_mp != NULL) {
- ASSERT(ire->ire_fastpath == NULL);
ASSERT(ire->ire_bucket == NULL);
mutex_destroy(&ire->ire_lock);
BUMP_IRE_STATS(ire_stats_v4, ire_stats_freed);
@@ -4346,7 +4068,6 @@ ire_inactive(ire_t *ire)
}
end:
/* This should be true for both V4 and V6 */
- ASSERT(ire->ire_fastpath == NULL);
if ((ire->ire_type & IRE_FORWARDTABLE) &&
(ire->ire_ipversion == IPV4_VERSION) &&
@@ -5486,7 +5207,7 @@ ire_add_mrtun(ire_t **ire_p, queue_t *q, mblk_t *mp, ipsq_func_t func)
}
ire_atomic_end(irb_ptr, ire);
- ire_fastpath(ire);
+ nce_fastpath(ire->ire_nce);
*ire_p = ire;
return (0);
}
@@ -6947,7 +6668,7 @@ ire_nce_init(ire_t *ire, mblk_t *fp_mp, mblk_t *res_mp)
*/
mutex_enter(&arpce->nce_lock);
arpce->nce_state = ND_REACHABLE;
- arpce->nce_flags |= NCE_F_PERMANENT;
+ arpce->nce_flags |= (NCE_F_PERMANENT | NCE_F_BCAST);
arpce->nce_last = TICK_TO_MSEC(lbolt64);
ire->ire_nce = arpce;
mutex_exit(&arpce->nce_lock);
diff --git a/usr/src/uts/common/inet/ip/ip_ndp.c b/usr/src/uts/common/inet/ip/ip_ndp.c
index 91ebbd3cc4..e68c4119d5 100644
--- a/usr/src/uts/common/inet/ip/ip_ndp.c
+++ b/usr/src/uts/common/inet/ip/ip_ndp.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -81,7 +81,6 @@
static boolean_t nce_cmp_ll_addr(const nce_t *nce, const uchar_t *new_ll_addr,
uint32_t ll_addr_len);
-static void nce_fastpath(nce_t *nce);
static void nce_ire_delete(nce_t *nce);
static void nce_ire_delete1(ire_t *ire, char *nce_arg);
static void nce_set_ll(nce_t *nce, uchar_t *ll_addr);
@@ -3220,7 +3219,7 @@ ndp_sioc_update(ill_t *ill, lif_nd_req_t *lnr)
* Note that since ill_fastpath_probe() copies the mblk there is
* no need for the hold beyond this function.
*/
-static void
+void
nce_fastpath(nce_t *nce)
{
ill_t *ill = nce->nce_ill;
@@ -3260,8 +3259,6 @@ nce_fastpath_list_dispatch(ill_t *ill, boolean_t (*func)(nce_t *, void *),
nce_t *first_nce;
nce_t *prev_nce = NULL;
- ASSERT(ill != NULL && ill->ill_isv6);
-
mutex_enter(&ill->ill_lock);
first_nce = current_nce = (nce_t *)ill->ill_fastpath_list;
while (current_nce != (nce_t *)&ill->ill_fastpath_list) {
@@ -3299,7 +3296,6 @@ nce_fastpath_list_add(nce_t *nce)
ill_t *ill;
ill = nce->nce_ill;
- ASSERT(ill != NULL && ill->ill_isv6);
mutex_enter(&ill->ill_lock);
mutex_enter(&nce->nce_lock);
@@ -3330,12 +3326,6 @@ nce_fastpath_list_delete(nce_t *nce)
ill = nce->nce_ill;
ASSERT(ill != NULL);
- if (!ill->ill_isv6) {
- /*
- * v4 nce_t's do not have nce_fastpath set.
- */
- return;
- }
mutex_enter(&ill->ill_lock);
if (nce->nce_fastpath == NULL)
@@ -3429,8 +3419,30 @@ ndp_fastpath_flush(nce_t *nce, char *arg)
if (nce->nce_fp_mp == NULL || nce->nce_res_mp == NULL)
return;
- /* Just delete the NCE... */
- ndp_delete(nce);
+ if (nce->nce_ipversion == IPV4_VERSION &&
+ nce->nce_flags & NCE_F_BCAST) {
+ /*
+ * IPv4 BROADCAST entries:
+ * We can't delete the nce since it is difficult to
+ * recreate these without going through the
+ * ipif down/up dance.
+ *
+ * All access to nce->nce_fp_mp in the case of these
+ * is protected by nce_lock.
+ */
+ mutex_enter(&nce->nce_lock);
+ if (nce->nce_fp_mp != NULL) {
+ freeb(nce->nce_fp_mp);
+ nce->nce_fp_mp = NULL;
+ mutex_exit(&nce->nce_lock);
+ nce_fastpath(nce);
+ } else {
+ mutex_exit(&nce->nce_lock);
+ }
+ } else {
+ /* Just delete the NCE... */
+ ndp_delete(nce);
+ }
}
/*
diff --git a/usr/src/uts/common/inet/ip_ire.h b/usr/src/uts/common/inet/ip_ire.h
index b32847944e..78a6d6cb82 100644
--- a/usr/src/uts/common/inet/ip_ire.h
+++ b/usr/src/uts/common/inet/ip_ire.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/* Copyright (c) 1990 Mentat Inc. */
@@ -313,8 +313,6 @@ extern void ire_delete_srcif(ire_t *);
extern void ire_delete_v6(ire_t *);
extern void ire_expire(ire_t *, char *);
-extern void ire_fastpath_flush(ire_t *, void *);
-extern boolean_t ire_fastpath_update(ire_t *, void *);
extern void ire_flush_cache_v4(ire_t *, int);
extern void ire_flush_cache_v6(ire_t *, int);
@@ -376,16 +374,11 @@ extern boolean_t ire_multirt_need_resolve_v6(const in6_addr_t *,
extern ire_t *ipif_lookup_multi_ire(ipif_t *, ipaddr_t);
extern ire_t *ipif_lookup_multi_ire_v6(ipif_t *, const in6_addr_t *);
-extern void ire_fastpath_list_dispatch(ill_t *,
- boolean_t (*)(ire_t *, void *), void *);
-extern void ire_fastpath_list_delete(ill_t *, ire_t *);
-
extern ire_t *ire_get_next_bcast_ire(ire_t *, ire_t *);
extern ire_t *ire_get_next_default_ire(ire_t *, ire_t *);
extern void ire_arpresolve(ire_t *, ill_t *);
extern void ire_freemblk(ire_t *);
-extern void ire_fastpath(ire_t *);
extern boolean_t ire_match_args(ire_t *, ipaddr_t, ipaddr_t, ipaddr_t,
int, const ipif_t *, zoneid_t, uint32_t, const struct ts_label_s *, int);
extern int ire_nce_init(ire_t *, mblk_t *, mblk_t *);
diff --git a/usr/src/uts/common/inet/ip_ndp.h b/usr/src/uts/common/inet/ip_ndp.h
index 4d0dbd5428..ad12297624 100644
--- a/usr/src/uts/common/inet/ip_ndp.h
+++ b/usr/src/uts/common/inet/ip_ndp.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -128,6 +128,7 @@ extern ndp_g_t ndp4, ndp6;
#define NCE_F_ANYCAST 0x20
#define NCE_F_CONDEMNED 0x40
#define NCE_F_UNSOL_ADV 0x80
+#define NCE_F_BCAST 0x100
#define NCE_EXTERNAL_FLAGS_MASK \
(NCE_F_PERMANENT | NCE_F_MAPPING | NCE_F_ISROUTER | NCE_F_NONUD | \
@@ -331,6 +332,7 @@ extern void nce_queue_mp_common(nce_t *, mblk_t *, boolean_t);
extern void ndp_flush_qd_mp(nce_t *);
extern nce_t *nce_reinit(nce_t *);
extern void nce_delete_hw_changed(nce_t *, void *);
+extern void nce_fastpath(nce_t *);
#ifdef NCE_DEBUG
extern void nce_trace_inactive(nce_t *);