diff options
Diffstat (limited to 'usr/src/uts/common/sys/dld.h')
-rw-r--r-- | usr/src/uts/common/sys/dld.h | 127 |
1 files changed, 93 insertions, 34 deletions
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h index 71555d364b..8cc70e52f9 100644 --- a/usr/src/uts/common/sys/dld.h +++ b/usr/src/uts/common/sys/dld.h @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -36,6 +36,8 @@ #include <sys/stream.h> #include <sys/mac.h> #include <sys/dls.h> +#include <sys/conf.h> +#include <sys/sad.h> #include <net/if.h> #ifdef __cplusplus @@ -47,9 +49,6 @@ extern "C" { */ #define DLD_INFO "Data-Link Driver v%I%" -#define DLD_MAX_PPA 999 -#define DLD_MAX_MINOR (DLD_MAX_PPA + 1) - /* * Options: To enable an option set the property name to a non-zero value * in kernel/drv/dld.conf. @@ -93,31 +92,33 @@ extern "C" { */ #define DLDIOC ('D' << 24 | 'L' << 16 | 'D' << 8) -#define DLDIOCATTR (DLDIOC | 0x03) +#define DLDIOC_ATTR (DLDIOC | 0x03) typedef struct dld_ioc_attr { - char dia_name[IFNAMSIZ]; - char dia_dev[MAXNAMELEN]; + datalink_id_t dia_linkid; uint_t dia_max_sdu; - uint16_t dia_vid; } dld_ioc_attr_t; -#define DLDIOCVLAN (DLDIOC | 0x04) - -typedef struct dld_ioc_vlan { - char div_name[IFNAMSIZ]; - uint_t div_count; -} dld_ioc_vlan_t; - -typedef struct dld_vlan_info { - char dvi_name[IFNAMSIZ]; -} dld_vlan_info_t; - -typedef struct dld_hold_vlan { - char dhv_name[IFNAMSIZ]; - zoneid_t dhv_zid; - boolean_t dhv_docheck; -} dld_hold_vlan_t; +#define DLDIOC_VLAN_ATTR (DLDIOC | 0x04) +typedef struct dld_ioc_vlan_attr { + datalink_id_t div_vlanid; + uint16_t div_vid; + datalink_id_t div_linkid; + boolean_t div_force; + boolean_t div_implicit; +} dld_ioc_vlan_attr_t; + +#define DLDIOC_PHYS_ATTR (DLDIOC | 0x05) +typedef struct dld_ioc_phys_attr { + datalink_id_t dip_linkid; + /* + * Whether this physical link supports vanity naming. Note that + * physical links whose media type is not supported by GLDv3 + * can not support vanity naming. + */ + boolean_t dip_novanity; + char dip_dev[MAXLINKNAMELEN]; +} dld_ioc_phys_attr_t; /* * Secure objects ioctls @@ -137,33 +138,90 @@ typedef struct dld_secobj { uint_t so_len; } dld_secobj_t; -#define DLDIOCSECOBJSET (DLDIOC | 0x05) +#define DLDIOC_SECOBJ_SET (DLDIOC | 0x06) typedef struct dld_ioc_secobj_set { dld_secobj_t ss_obj; uint_t ss_flags; } dld_ioc_secobj_set_t; -#define DLDIOCSECOBJGET (DLDIOC | 0x06) +#define DLDIOC_SECOBJ_GET (DLDIOC | 0x07) typedef struct dld_ioc_secobj_get { dld_secobj_t sg_obj; uint_t sg_count; } dld_ioc_secobj_get_t; -#define DLDIOCSECOBJUNSET (DLDIOC | 0x07) +/* + * The following two slots were used outside of ON, so don't reuse them. + * + * #define DLDIOCHOLDVLAN (DLDIOC | 0x08) + * #define DLDIOCRELEVLAN (DLDIOC | 0x09) + */ + +#define DLDIOC_SECOBJ_UNSET (DLDIOC | 0x0a) typedef struct dld_ioc_secobj_unset { char su_name[DLD_SECOBJ_NAME_MAX]; } dld_ioc_secobj_unset_t; +#define DLDIOC_CREATE_VLAN (DLDIOC | 0x0b) +typedef struct dld_ioc_create_vlan { + datalink_id_t dic_vlanid; + datalink_id_t dic_linkid; + uint16_t dic_vid; + boolean_t dic_force; +} dld_ioc_create_vlan_t; + +#define DLDIOC_DELETE_VLAN (DLDIOC | 0x0c) +typedef struct dld_ioc_delete_vlan { + datalink_id_t did_linkid; +} dld_ioc_delete_vlan_t; + +#define DLDIOC_SETAUTOPUSH (DLDIOC | 0x0d) +#define DLDIOC_GETAUTOPUSH (DLDIOC | 0x0e) +#define DLDIOC_CLRAUTOPUSH (DLDIOC | 0x0f) +typedef struct dld_ioc_ap { + datalink_id_t dia_linkid; + uint_t dia_anchor; + uint_t dia_npush; + char dia_aplist[MAXAPUSH][FMNAMESZ+1]; +} dld_ioc_ap_t; + +#define DLDIOC_DOORSERVER (DLDIOC | 0x10) +typedef struct dld_ioc_door { + boolean_t did_start_door; +} dld_ioc_door_t; + +#define DLDIOC_RENAME (DLDIOC | 0x11) +typedef struct dld_ioc_rename { + datalink_id_t dir_linkid1; + datalink_id_t dir_linkid2; + char dir_link[MAXLINKNAMELEN]; +} dld_ioc_rename_t; + /* - * DLDIOCHOLDVLAN/DLDIOCRELEVLAN are added to support a "hold/release" - * operation on a VLAN. A hold will cause a VLAN to be created or the - * reference count will be increased, release will do the reverse. + * DLDIOC_SETZID sets the zoneid of a given link. It could cause a VLAN to be + * implicitly created. Note that we will hold a reference for the given link + * whenever it has a zoneid other than the global zone. */ -#define DLDIOCHOLDVLAN (DLDIOC | 0x08) +#define DLDIOC_SETZID (DLDIOC | 0x12) +typedef struct dld_ioc_setzid { + char dis_link[MAXLINKNAMELEN]; + zoneid_t dis_zid; +} dld_ioc_setzid_t; + +#define DLDIOC_GETZID (DLDIOC | 0x13) +typedef struct dld_ioc_getzid { + datalink_id_t dig_linkid; + zoneid_t dig_zid; +} dld_ioc_getzid_t; -#define DLDIOCRELEVLAN (DLDIOC | 0x09) - -#define DLDIOCZIDGET (DLDIOC | 0x0a) +/* + * data-link autopush configuration. + */ +struct dlautopush { + uint_t dap_anchor; + uint_t dap_npush; + char dap_aplist[MAXAPUSH][FMNAMESZ+1]; +}; #ifdef _KERNEL int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); @@ -173,6 +231,7 @@ void dld_wput(queue_t *, mblk_t *); void dld_wsrv(queue_t *); void dld_init_ops(struct dev_ops *, const char *); void dld_fini_ops(struct dev_ops *); +int dld_autopush(dev_t *, struct dlautopush *); #endif #ifdef __cplusplus |