diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/cmd/rcm_daemon/common/ip_rcm.c | 13 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdlaggr.c | 2 | ||||
-rw-r--r-- | usr/src/uts/common/io/mac/mac.c | 16 | ||||
-rw-r--r-- | usr/src/uts/common/io/softmac/softmac_ctl.c | 5 |
4 files changed, 28 insertions, 8 deletions
diff --git a/usr/src/cmd/rcm_daemon/common/ip_rcm.c b/usr/src/cmd/rcm_daemon/common/ip_rcm.c index 5421d7364a..f1e7b2931b 100644 --- a/usr/src/cmd/rcm_daemon/common/ip_rcm.c +++ b/usr/src/cmd/rcm_daemon/common/ip_rcm.c @@ -1126,8 +1126,17 @@ update_pif(rcm_handle_t *hd, int af, int sock, struct lifreq *lifr) } (void) memcpy(&ifflags, &lifreq.lifr_flags, sizeof (ifflags)); - /* Ignore loopback and multipoint interfaces */ - if (!(ifflags & IFF_MULTICAST) || (ifflags & IFF_LOOPBACK)) { + /* + * Ignore interfaces that are always incapable of DR: + * - IFF_VIRTUAL: e.g., loopback and vni + * - IFF_POINTOPOINT: e.g., sppp and ip.tun + * - !IFF_MULTICAST: e.g., ip.6to4tun + * + * Note: The !IFF_MULTICAST check can be removed once iptun is + * implemented as a datalink. + */ + if (!(ifflags & IFF_MULTICAST) || + (ifflags & (IFF_POINTOPOINT | IFF_VIRTUAL))) { rcm_log_message(RCM_TRACE3, "IP: if ignored (%s)\n", pif.pi_ifname); return (0); diff --git a/usr/src/lib/libdladm/common/libdlaggr.c b/usr/src/lib/libdladm/common/libdlaggr.c index 75291d0d1d..dfac1a2a92 100644 --- a/usr/src/lib/libdladm/common/libdlaggr.c +++ b/usr/src/lib/libdladm/common/libdlaggr.c @@ -380,7 +380,7 @@ i_dladm_aggr_add_rmv(datalink_id_t linkid, uint32_t nports, dladm_aggr_port_attr_db_t *ports, uint32_t flags, int cmd) { char *orig_portstr = NULL, *portstr = NULL; - laioc_add_rem_t *iocp; + laioc_add_rem_t *iocp = NULL; laioc_port_t *ioc_ports; uint32_t orig_nports, result_nports, len, i, j; dladm_conf_t conf; diff --git a/usr/src/uts/common/io/mac/mac.c b/usr/src/uts/common/io/mac/mac.c index 3bc71547de..d564add30d 100644 --- a/usr/src/uts/common/io/mac/mac.c +++ b/usr/src/uts/common/io/mac/mac.c @@ -33,6 +33,7 @@ #include <sys/types.h> #include <sys/conf.h> #include <sys/id_space.h> +#include <sys/esunddi.h> #include <sys/stat.h> #include <sys/mkdev.h> #include <sys/stream.h> @@ -507,6 +508,19 @@ mac_open(const char *macname, mac_handle_t *mhp) if ((err = mac_hold(macname, &mip)) != 0) return (err); + /* + * Hold the dip associated to the MAC to prevent it from being + * detached. For a softmac, its underlying dip is held by the + * mi_open() callback. + * + * This is done to be more tolerant with some defective drivers, + * which incorrectly handle mac_unregister() failure in their + * xxx_detach() routine. For example, some drivers ignore the + * failure of mac_unregister() and free all resources that + * that are needed for data transmition. + */ + e_ddi_hold_devi(mip->mi_dip); + rw_enter(&mip->mi_gen_lock, RW_WRITER); if ((mip->mi_oref != 0) || @@ -521,6 +535,7 @@ mac_open(const char *macname, mac_handle_t *mhp) */ if ((err = mip->mi_open(mip->mi_driver)) != 0) { rw_exit(&mip->mi_gen_lock); + ddi_release_devi(mip->mi_dip); mac_rele(mip); return (err); } @@ -578,6 +593,7 @@ mac_close(mac_handle_t mh) } rw_exit(&mip->mi_gen_lock); + ddi_release_devi(mip->mi_dip); mac_rele(mip); } diff --git a/usr/src/uts/common/io/softmac/softmac_ctl.c b/usr/src/uts/common/io/softmac/softmac_ctl.c index 33472bd303..b1b8cd4f42 100644 --- a/usr/src/uts/common/io/softmac/softmac_ctl.c +++ b/usr/src/uts/common/io/softmac/softmac_ctl.c @@ -287,11 +287,6 @@ softmac_rput_process_proto(queue_t *rq, mblk_t *mp) if (len < DL_ERROR_ACK_SIZE) goto runt; - cmn_err(CE_NOTE, "softmac: received DL_ERROR_ACK for " - "%s errno/unix_errno 0x%x/%d", - dl_primstr(dlp->error_ack.dl_error_primitive), - dlp->error_ack.dl_errno, dlp->error_ack.dl_unix_errno); - softmac_process_dlpi(slp, mp, DL_ERROR_ACK_SIZE, dlp->error_ack.dl_error_primitive); return; |