summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys
diff options
context:
space:
mode:
authorsowmini <none@none>2008-01-24 14:49:21 -0800
committersowmini <none@none>2008-01-24 14:49:21 -0800
commite7801d59e8ceda0cde8ebdfdddd7582ee2ea96ef (patch)
treeaa5f6ba96fab8905146ea99d10af75f480c45e9e /usr/src/uts/common/sys
parent575bd8a230f2c20b1878ebb473c30a12f0eb1b2e (diff)
downloadillumos-joyent-e7801d59e8ceda0cde8ebdfdddd7582ee2ea96ef.tar.gz
PSARC 2007/429 Brussels - enhanced network driver configuration via dladm
6565373 driver ndd parameter behavior does not match the ieee802.3(5) man page. 6598690 need support for 'dladm show-ether' subcommand. 6619126 ndd abuse in network (Layer 2) drivers 6621285 bge_setup_params_kstat is dead code
Diffstat (limited to 'usr/src/uts/common/sys')
-rw-r--r--usr/src/uts/common/sys/dld.h64
-rw-r--r--usr/src/uts/common/sys/mac.h31
-rw-r--r--usr/src/uts/common/sys/mac_impl.h2
3 files changed, 92 insertions, 5 deletions
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h
index 8cc70e52f9..ad3530c1a3 100644
--- a/usr/src/uts/common/sys/dld.h
+++ b/usr/src/uts/common/sys/dld.h
@@ -34,11 +34,11 @@
#include <sys/types.h>
#include <sys/stream.h>
-#include <sys/mac.h>
-#include <sys/dls.h>
#include <sys/conf.h>
#include <sys/sad.h>
#include <net/if.h>
+#include <sys/ddi.h>
+#include <sys/sunddi.h>
#ifdef __cplusplus
extern "C" {
@@ -94,6 +94,8 @@ extern "C" {
#define DLDIOC_ATTR (DLDIOC | 0x03)
+typedef uint32_t datalink_id_t;
+
typedef struct dld_ioc_attr {
datalink_id_t dia_linkid;
uint_t dia_max_sdu;
@@ -109,6 +111,8 @@ typedef struct dld_ioc_vlan_attr {
} dld_ioc_vlan_attr_t;
#define DLDIOC_PHYS_ATTR (DLDIOC | 0x05)
+#define DLPI_LINKNAME_MAX 32
+
typedef struct dld_ioc_phys_attr {
datalink_id_t dip_linkid;
/*
@@ -223,7 +227,63 @@ struct dlautopush {
char dap_aplist[MAXAPUSH][FMNAMESZ+1];
};
+/*
+ * Encodings for public properties.
+ * A most significant bit value of 1 indicates private property, intended
+ * to allow private property implementations to use internal encodings
+ * if desired.
+ *
+ * Note that there are 2 sets of parameters: the *_EN_*
+ * values are those that the Administrator configures for autonegotiation.
+ * The _ADV_* values are those that are currently exposed over the wire.
+ */
+typedef enum {
+ DLD_PROP_DUPLEX = 0x00000001,
+ DLD_PROP_SPEED,
+ DLD_PROP_STATUS,
+ DLD_PROP_AUTONEG,
+ DLD_PROP_EN_AUTONEG,
+ DLD_PROP_DEFMTU,
+ DLD_PROP_NDD_LEGACY,
+ DLD_PROP_FLOWCTRL,
+ DLD_PROP_ADV_1000FDX_CAP,
+ DLD_PROP_EN_1000FDX_CAP,
+ DLD_PROP_ADV_1000HDX_CAP,
+ DLD_PROP_EN_1000HDX_CAP,
+ DLD_PROP_ADV_100FDX_CAP,
+ DLD_PROP_EN_100FDX_CAP,
+ DLD_PROP_ADV_100HDX_CAP,
+ DLD_PROP_EN_100HDX_CAP,
+ DLD_PROP_ADV_10FDX_CAP,
+ DLD_PROP_EN_10FDX_CAP,
+ DLD_PROP_ADV_10HDX_CAP,
+ DLD_PROP_EN_10HDX_CAP,
+ DLD_PROP_PRIVATE = -1
+} dld_prop_id_t;
+
+/*
+ * to figure out r/w status of legacy ndd props.
+ */
+#define DLD_NDD_READ 0x01
+#define DLD_NDD_WRITE 0x10
+
+#define DLDIOCSETPROP (DLDIOC | 0x14)
+#define DLDIOCGETPROP (DLDIOC | 0x15)
+#define DLD_LINKPROP_NAME_MAX 256
+#define DLD_PROP_VERSION 1
+
+typedef struct dld_ioc_prop_s {
+ int pr_version;
+ uint_t pr_flags; /* private to libdladm */
+ char pr_linkname[DLPI_LINKNAME_MAX]; /* interface name */
+ dld_prop_id_t pr_num;
+ char pr_name[DLD_LINKPROP_NAME_MAX];
+ uint_t pr_valsize; /* sizeof pr_val */
+ char pr_val[1];
+} dld_ioc_prop_t;
+
#ifdef _KERNEL
+typedef dld_prop_id_t mac_prop_id_t;
int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
int dld_open(queue_t *, dev_t *, int, int, cred_t *);
int dld_close(queue_t *);
diff --git a/usr/src/uts/common/sys/mac.h b/usr/src/uts/common/sys/mac.h
index 4fd83059c4..b83f5cb981 100644
--- a/usr/src/uts/common/sys/mac.h
+++ b/usr/src/uts/common/sys/mac.h
@@ -32,6 +32,7 @@
#include <sys/ddi.h>
#include <sys/sunddi.h>
#include <sys/stream.h>
+#include <sys/dld.h>
/*
* MAC Services Module
@@ -84,11 +85,17 @@ typedef enum {
LINK_DUPLEX_FULL
} link_duplex_t;
-typedef uint32_t datalink_id_t;
#define DATALINK_INVALID_LINKID 0
#define DATALINK_ALL_LINKID 0
#define DATALINK_MAX_LINKID 0xffffffff
+typedef enum {
+ LINK_FLOWCTRL_NONE = 0,
+ LINK_FLOWCTRL_RX,
+ LINK_FLOWCTRL_TX,
+ LINK_FLOWCTRL_BI
+} link_flowctrl_t;
+
/*
* Maximum MAC address length
*/
@@ -177,8 +184,6 @@ enum mac_driver_stat {
typedef struct mac_info_s {
uint_t mi_media;
uint_t mi_nativemedia;
- uint_t mi_sdu_min;
- uint_t mi_sdu_max;
uint_t mi_addr_length;
uint8_t *mi_unicst_addr;
uint8_t *mi_brdcst_addr;
@@ -292,6 +297,10 @@ typedef mblk_t *(*mac_tx_t)(void *, mblk_t *);
typedef boolean_t (*mac_getcapab_t)(void *, mac_capab_t, void *);
typedef int (*mac_open_t)(void *);
typedef void (*mac_close_t)(void *);
+typedef int (*mac_set_prop_t)(void *, const char *, mac_prop_id_t,
+ uint_t, const void *);
+typedef int (*mac_get_prop_t)(void *, const char *, mac_prop_id_t,
+ uint_t, void *);
/*
* Drivers must set all of these callbacks except for mc_resources,
@@ -315,6 +324,8 @@ typedef struct mac_callbacks_s {
mac_getcapab_t mc_getcapab; /* Get capability information */
mac_open_t mc_open; /* Open the device */
mac_close_t mc_close; /* Close the device */
+ mac_set_prop_t mc_setprop;
+ mac_get_prop_t mc_getprop;
} mac_callbacks_t;
/*
@@ -328,6 +339,8 @@ typedef struct mac_callbacks_s {
#define MC_GETCAPAB 0x004
#define MC_OPEN 0x008
#define MC_CLOSE 0x010
+#define MC_SETPROP 0x020
+#define MC_GETPROP 0x040
#define MAC_MAX_MINOR 1000
@@ -367,6 +380,7 @@ typedef enum {
MAC_NOTE_RESOURCE,
MAC_NOTE_DEVPROMISC,
MAC_NOTE_FASTPATH_FLUSH,
+ MAC_NOTE_SDU_SIZE,
MAC_NOTE_VNIC,
MAC_NOTE_MARGIN,
MAC_NNOTE /* must be the last entry */
@@ -534,6 +548,11 @@ typedef struct mactype_register_s {
size_t mtr_statcount;
} mactype_register_t;
+typedef struct mac_prop_s {
+ mac_prop_id_t mp_id;
+ char *mp_name;
+} mac_prop_t;
+
/*
* Client interface functions.
*/
@@ -560,6 +579,7 @@ extern boolean_t mac_unicst_verify(mac_handle_t,
extern int mac_unicst_set(mac_handle_t, const uint8_t *);
extern void mac_unicst_get(mac_handle_t, uint8_t *);
extern void mac_dest_get(mac_handle_t, uint8_t *);
+extern void mac_sdu_get(mac_handle_t, uint_t *, uint_t *);
extern void mac_resources(mac_handle_t);
extern void mac_ioctl(mac_handle_t, queue_t *, mblk_t *);
extern const mac_txinfo_t *mac_tx_get(mac_handle_t);
@@ -626,6 +646,7 @@ extern void mac_tx_update(mac_handle_t);
extern void mac_resource_update(mac_handle_t);
extern mac_resource_handle_t mac_resource_add(mac_handle_t,
mac_resource_t *);
+extern int mac_maxsdu_update(mac_handle_t, uint_t);
extern int mac_pdata_update(mac_handle_t, void *,
size_t);
extern void mac_multicst_refresh(mac_handle_t,
@@ -650,6 +671,10 @@ extern mactype_register_t *mactype_alloc(uint_t);
extern void mactype_free(mactype_register_t *);
extern int mactype_register(mactype_register_t *);
extern int mactype_unregister(const char *);
+extern int mac_set_prop(mac_handle_t, mac_prop_t *,
+ void *, uint_t);
+extern int mac_get_prop(mac_handle_t, mac_prop_t *,
+ void *, uint_t);
#endif /* _KERNEL */
diff --git a/usr/src/uts/common/sys/mac_impl.h b/usr/src/uts/common/sys/mac_impl.h
index c0acfc5c37..6e39232224 100644
--- a/usr/src/uts/common/sys/mac_impl.h
+++ b/usr/src/uts/common/sys/mac_impl.h
@@ -152,6 +152,8 @@ typedef struct mac_impl_s {
uint_t mi_devpromisc;
uint8_t mi_addr[MAXMACADDRLEN];
uint8_t mi_dstaddr[MAXMACADDRLEN];
+ uint_t mi_sdu_min;
+ uint_t mi_sdu_max;
mac_multicst_addr_t *mi_mmap;
krwlock_t mi_notify_lock;