diff options
author | ericheng <none@none> | 2005-08-01 12:58:24 -0700 |
---|---|---|
committer | ericheng <none@none> | 2005-08-01 12:58:24 -0700 |
commit | 210db2243d3b5ca39c96a4c34c6d9453ddfbeaa9 (patch) | |
tree | a9b505b9cd0c944c476713e42180c724a44833a6 /usr/src/lib/libmacadm/common/libmacadm.c | |
parent | d01412971af32f806ad2e91e40c00b485e893b2c (diff) | |
download | illumos-gate-210db2243d3b5ca39c96a4c34c6d9453ddfbeaa9.tar.gz |
PSARC 2005/365 Nemo drivers interface simplification
6246540 race condition between aggr driver detach and create-aggr
6253542 dld breaks autopush, PPPoE, ipfilter for bge and xge
6261226 Nemo should use modhash
6272908 in.rarpd no longer works for GLDv3 interfaces
6303082 ill_tx fastpath lacks flow control
--HG--
rename : usr/src/cmd/dladm/datalink.conf => deleted_files/usr/src/cmd/dladm/datalink.conf
rename : usr/src/cmd/rcm_daemon/common/mac_rcm.c => deleted_files/usr/src/cmd/rcm_daemon/common/mac_rcm.c
rename : usr/src/cmd/svc/milestone/aggregation => deleted_files/usr/src/cmd/svc/milestone/aggregation
rename : usr/src/cmd/svc/milestone/aggregation.xml => deleted_files/usr/src/cmd/svc/milestone/aggregation.xml
rename : usr/src/cmd/svc/milestone/datalink => deleted_files/usr/src/cmd/svc/milestone/datalink
rename : usr/src/cmd/svc/milestone/datalink-init => deleted_files/usr/src/cmd/svc/milestone/datalink-init
rename : usr/src/cmd/svc/milestone/datalink-init.xml => deleted_files/usr/src/cmd/svc/milestone/datalink-init.xml
rename : usr/src/cmd/svc/milestone/datalink.xml => deleted_files/usr/src/cmd/svc/milestone/datalink.xml
rename : usr/src/pkgdefs/SUNWcnetr/postinstall => deleted_files/usr/src/pkgdefs/SUNWcnetr/postinstall
rename : usr/src/pkgdefs/common_files/i.datalinkconf => deleted_files/usr/src/pkgdefs/common_files/i.datalinkconf
rename : usr/src/uts/common/io/dld/dld_ioc.c => deleted_files/usr/src/uts/common/io/dld/dld_ioc.c
rename : usr/src/uts/common/io/dld/dld_minor.c => deleted_files/usr/src/uts/common/io/dld/dld_minor.c
rename : usr/src/uts/common/io/dld/dld_node.c => deleted_files/usr/src/uts/common/io/dld/dld_node.c
rename : usr/src/uts/common/io/dld/dld_ppa.c => deleted_files/usr/src/uts/common/io/dld/dld_ppa.c
rename : usr/src/uts/common/os/ght.c => deleted_files/usr/src/uts/common/os/ght.c
rename : usr/src/uts/common/sys/ght.h => deleted_files/usr/src/uts/common/sys/ght.h
rename : usr/src/uts/intel/ght/Makefile => deleted_files/usr/src/uts/intel/ght/Makefile
rename : usr/src/uts/sparc/ght/Makefile => deleted_files/usr/src/uts/sparc/ght/Makefile
Diffstat (limited to 'usr/src/lib/libmacadm/common/libmacadm.c')
-rw-r--r-- | usr/src/lib/libmacadm/common/libmacadm.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/usr/src/lib/libmacadm/common/libmacadm.c b/usr/src/lib/libmacadm/common/libmacadm.c index 2dd66131aa..053d1c5011 100644 --- a/usr/src/lib/libmacadm/common/libmacadm.c +++ b/usr/src/lib/libmacadm/common/libmacadm.c @@ -33,6 +33,8 @@ #include <stropts.h> #include <sys/dld.h> #include <libdevinfo.h> +#include <libdladm.h> +#include <libdlpi.h> #define _KERNEL #include <sys/sysmacros.h> @@ -48,24 +50,39 @@ typedef struct macadm_walk { void *mw_arg; - void (*mw_fn)(void *, const char *, uint_t); + void (*mw_fn)(void *, const char *); } macadm_walk_t; /* - * Local callback invoked for each DDI_NT_MAC node. + * Local callback invoked for each DDI_NT_NET node. */ +/* ARGSUSED */ static int i_macadm_apply(di_node_t node, di_minor_t minor, void *arg) { macadm_walk_t *mwp = arg; char dev[MAXNAMELEN]; - uint_t port; + dladm_attr_t dlattr; + int fd; (void) snprintf(dev, MAXNAMELEN, "%s%d", di_driver_name(node), di_instance(node)); - port = getminor(di_minor_devt(minor)); - mwp->mw_fn(mwp->mw_arg, dev, port); + /* + * We need to be able to report devices that are + * reported by the walker, but have not yet attached + * to the system. Attempting to opening them will + * cause them to temporarely attach and be known + * by dld. + */ + if ((fd = dlpi_open(dev)) == -1 && errno != EPERM) + return (DI_WALK_CONTINUE); + if (fd != 0) + (void) dlpi_close(fd); + + /* invoke callback only for non-legacy devices */ + if (dladm_info(dev, &dlattr) == 0) + mwp->mw_fn(mwp->mw_arg, dev); return (DI_WALK_CONTINUE); } @@ -74,7 +91,7 @@ i_macadm_apply(di_node_t node, di_minor_t minor, void *arg) * Invoke the specified callback for each DDI_NT_MAC node. */ int -macadm_walk(void (*fn)(void *, const char *, uint_t), void *arg, +macadm_walk(void (*fn)(void *, const char *), void *arg, boolean_t use_cache) { di_node_t root; @@ -94,7 +111,7 @@ macadm_walk(void (*fn)(void *, const char *, uint_t), void *arg, mw.mw_fn = fn; mw.mw_arg = arg; - (void) di_walk_minor(root, DDI_NT_MAC, 0, &mw, i_macadm_apply); + (void) di_walk_minor(root, DDI_NT_NET, 0, &mw, i_macadm_apply); di_fini(root); return (0); |