summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/dls/dls.c
diff options
context:
space:
mode:
authorericheng <none@none>2005-08-29 18:49:03 -0700
committerericheng <none@none>2005-08-29 18:49:03 -0700
commitcd93090ec4fd8704271aee7cc8241a848bc78ffd (patch)
tree8866a859b0500824028a7b4e13d28ba415351201 /usr/src/uts/common/io/dls/dls.c
parenta14d39b7841e304340dbd4378ec3266bd6868156 (diff)
downloadillumos-gate-cd93090ec4fd8704271aee7cc8241a848bc78ffd.tar.gz
6252036 dladm show-link outputs nothing for regular users
6260551 aggr_grp_detach_port() can be called without AGGR_LACP_LOCK_HELD 6270678 The aggregation was unavailable after using dladm modify-aggr change mac address to zero 6283674 potential race condition between dls_rx_set and i_dls_link_ether_rx 6293292 dladm show-dev deceives when passed unknown device names 6309909 dld_open must call qassociate(9F) to inform the framework it is DDI-compliant 6311907 poll_tx, ill_tx and str_mdata_fastpath_put() comments are incorrect 6313057 dladm show-dev doesn't show legacy devices 6315019 sparc full kernel lint is missing many modules
Diffstat (limited to 'usr/src/uts/common/io/dls/dls.c')
-rw-r--r--usr/src/uts/common/io/dls/dls.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/usr/src/uts/common/io/dls/dls.c b/usr/src/uts/common/io/dls/dls.c
index d7f9d876fb..0968818e07 100644
--- a/usr/src/uts/common/io/dls/dls.c
+++ b/usr/src/uts/common/io/dls/dls.c
@@ -788,7 +788,8 @@ dls_tx(dls_channel_t dc, mblk_t *mp)
}
boolean_t
-dls_accept(dls_impl_t *dip, const uint8_t *daddr)
+dls_accept(dls_impl_t *dip, const uint8_t *daddr, dls_rx_t *di_rx,
+ void **di_rx_arg)
{
boolean_t match;
dls_multicst_addr_t *dmap;
@@ -852,13 +853,20 @@ refuse:
return (B_FALSE);
accept:
+ /*
+ * Since we hold di_lock here, the returned di_rx and di_rx_arg will
+ * always be in sync.
+ */
+ *di_rx = dip->di_rx;
+ *di_rx_arg = dip->di_rx_arg;
rw_exit(&(dip->di_lock));
return (B_TRUE);
}
/*ARGSUSED*/
boolean_t
-dls_accept_loopback(dls_impl_t *dip, const uint8_t *daddr)
+dls_accept_loopback(dls_impl_t *dip, const uint8_t *daddr, dls_rx_t *di_rx,
+ void **di_rx_arg)
{
/*
* We must not accept packets if the dls_impl_t is not marked as bound
@@ -880,6 +888,12 @@ refuse:
return (B_FALSE);
accept:
+ /*
+ * Since we hold di_lock here, the returned di_rx and di_rx_arg will
+ * always be in sync.
+ */
+ *di_rx = dip->di_rx;
+ *di_rx_arg = dip->di_rx_arg;
rw_exit(&(dip->di_lock));
return (B_TRUE);
}