diff options
author | sowmini <none@none> | 2008-01-24 14:49:21 -0800 |
---|---|---|
committer | sowmini <none@none> | 2008-01-24 14:49:21 -0800 |
commit | e7801d59e8ceda0cde8ebdfdddd7582ee2ea96ef (patch) | |
tree | aa5f6ba96fab8905146ea99d10af75f480c45e9e /usr/src/uts/common/sys | |
parent | 575bd8a230f2c20b1878ebb473c30a12f0eb1b2e (diff) | |
download | illumos-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.h | 64 | ||||
-rw-r--r-- | usr/src/uts/common/sys/mac.h | 31 | ||||
-rw-r--r-- | usr/src/uts/common/sys/mac_impl.h | 2 |
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; |