10Sstevel@tonic-gate /* 20Sstevel@tonic-gate * CDDL HEADER START 30Sstevel@tonic-gate * 40Sstevel@tonic-gate * The contents of this file are subject to the terms of the 52311Sseb * Common Development and Distribution License (the "License"). 62311Sseb * You may not use this file except in compliance with the License. 70Sstevel@tonic-gate * 80Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 100Sstevel@tonic-gate * See the License for the specific language governing permissions 110Sstevel@tonic-gate * and limitations under the License. 120Sstevel@tonic-gate * 130Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 140Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 160Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 170Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 180Sstevel@tonic-gate * 190Sstevel@tonic-gate * CDDL HEADER END 200Sstevel@tonic-gate */ 210Sstevel@tonic-gate /* 228558SGirish.Moodalbail@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 230Sstevel@tonic-gate * Use is subject to license terms. 240Sstevel@tonic-gate */ 250Sstevel@tonic-gate 260Sstevel@tonic-gate #ifndef _SYS_DLD_H 270Sstevel@tonic-gate #define _SYS_DLD_H 280Sstevel@tonic-gate 290Sstevel@tonic-gate /* 300Sstevel@tonic-gate * Data-Link Driver (public header). 317408SSebastien.Roy@Sun.COM * 327408SSebastien.Roy@Sun.COM * Note that the datastructures defined here define an ioctl interface 337408SSebastien.Roy@Sun.COM * that is shared betwen user and kernel space. The dld driver thus 347408SSebastien.Roy@Sun.COM * assumes that the structures have identical layout and size when 357408SSebastien.Roy@Sun.COM * compiled in either IPL32 or LP64. 360Sstevel@tonic-gate */ 370Sstevel@tonic-gate 380Sstevel@tonic-gate #include <sys/types.h> 390Sstevel@tonic-gate #include <sys/stream.h> 407408SSebastien.Roy@Sun.COM #include <sys/dld_ioc.h> 418275SEric Cheng #include <sys/mac_flow.h> 425895Syz147064 #include <sys/conf.h> 435895Syz147064 #include <sys/sad.h> 440Sstevel@tonic-gate #include <net/if.h> 455903Ssowmini #include <sys/ddi.h> 465903Ssowmini #include <sys/sunddi.h> 476789Sam223141 #include <sys/mac.h> 480Sstevel@tonic-gate 490Sstevel@tonic-gate #ifdef __cplusplus 500Sstevel@tonic-gate extern "C" { 510Sstevel@tonic-gate #endif 520Sstevel@tonic-gate 530Sstevel@tonic-gate /* 540Sstevel@tonic-gate * Data-Link Driver Information (text emitted by modinfo(1m)) 550Sstevel@tonic-gate */ 566512Ssowmini #define DLD_INFO "Data-Link Driver" 570Sstevel@tonic-gate 580Sstevel@tonic-gate /* 590Sstevel@tonic-gate * Options: To enable an option set the property name to a non-zero value 600Sstevel@tonic-gate * in kernel/drv/dld.conf. 610Sstevel@tonic-gate */ 620Sstevel@tonic-gate 630Sstevel@tonic-gate /* 640Sstevel@tonic-gate * Prevent use of the IP fast-path (direct M_DATA transmit). 650Sstevel@tonic-gate */ 660Sstevel@tonic-gate #define DLD_PROP_NO_FASTPATH "no-fastpath" 670Sstevel@tonic-gate 680Sstevel@tonic-gate /* 690Sstevel@tonic-gate * Prevent advertising of the DL_CAPAB_POLL capability. 700Sstevel@tonic-gate */ 710Sstevel@tonic-gate #define DLD_PROP_NO_POLL "no-poll" 720Sstevel@tonic-gate 730Sstevel@tonic-gate /* 740Sstevel@tonic-gate * Prevent advertising of the DL_CAPAB_ZEROCOPY capability. 750Sstevel@tonic-gate */ 760Sstevel@tonic-gate #define DLD_PROP_NO_ZEROCOPY "no-zerocopy" 770Sstevel@tonic-gate 780Sstevel@tonic-gate /* 794114Sja97890 * Prevent advertising of the DL_CAPAB_SOFTRING capability. 804114Sja97890 */ 814114Sja97890 #define DLD_PROP_NO_SOFTRING "no-softring" 824114Sja97890 834114Sja97890 /* 840Sstevel@tonic-gate * The name of the driver. 850Sstevel@tonic-gate */ 860Sstevel@tonic-gate #define DLD_DRIVER_NAME "dld" 870Sstevel@tonic-gate 888275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 898275SEric Cheng #pragma pack(4) 908275SEric Cheng #endif 918275SEric Cheng 920Sstevel@tonic-gate /* 930Sstevel@tonic-gate * IOCTL codes and data structures. 940Sstevel@tonic-gate */ 957408SSebastien.Roy@Sun.COM #define DLDIOC_ATTR DLDIOC(0x03) 960Sstevel@tonic-gate 970Sstevel@tonic-gate typedef struct dld_ioc_attr { 988275SEric Cheng datalink_id_t dia_linkid; 998275SEric Cheng uint_t dia_max_sdu; 1000Sstevel@tonic-gate } dld_ioc_attr_t; 1010Sstevel@tonic-gate 1027408SSebastien.Roy@Sun.COM #define DLDIOC_VLAN_ATTR DLDIOC(0x04) 1035895Syz147064 typedef struct dld_ioc_vlan_attr { 1045895Syz147064 datalink_id_t div_vlanid; 1055895Syz147064 uint16_t div_vid; 1065895Syz147064 datalink_id_t div_linkid; 1075895Syz147064 boolean_t div_force; 1085895Syz147064 } dld_ioc_vlan_attr_t; 109269Sericheng 1107408SSebastien.Roy@Sun.COM #define DLDIOC_PHYS_ATTR DLDIOC(0x05) 1115903Ssowmini #define DLPI_LINKNAME_MAX 32 1125903Ssowmini 1135895Syz147064 typedef struct dld_ioc_phys_attr { 1145895Syz147064 datalink_id_t dip_linkid; 1155895Syz147064 /* 1165895Syz147064 * Whether this physical link supports vanity naming. Note that 1175895Syz147064 * physical links whose media type is not supported by GLDv3 1185895Syz147064 * can not support vanity naming. 1195895Syz147064 */ 1205895Syz147064 boolean_t dip_novanity; 1215895Syz147064 char dip_dev[MAXLINKNAMELEN]; 1225895Syz147064 } dld_ioc_phys_attr_t; 1233448Sdh155122 1243147Sxc151355 /* 1253147Sxc151355 * Secure objects ioctls 1263147Sxc151355 */ 1273147Sxc151355 typedef enum { 1284126Szf162725 DLD_SECOBJ_CLASS_WEP = 1, 1294126Szf162725 DLD_SECOBJ_CLASS_WPA 1303147Sxc151355 } dld_secobj_class_t; 1313147Sxc151355 1323147Sxc151355 #define DLD_SECOBJ_OPT_CREATE 0x00000001 1333147Sxc151355 #define DLD_SECOBJ_NAME_MAX 32 1343147Sxc151355 #define DLD_SECOBJ_VAL_MAX 256 1353147Sxc151355 typedef struct dld_secobj { 1363147Sxc151355 char so_name[DLD_SECOBJ_NAME_MAX]; 1373147Sxc151355 dld_secobj_class_t so_class; 1383147Sxc151355 uint8_t so_val[DLD_SECOBJ_VAL_MAX]; 1393147Sxc151355 uint_t so_len; 1403147Sxc151355 } dld_secobj_t; 1413147Sxc151355 1427408SSebastien.Roy@Sun.COM #define DLDIOC_SECOBJ_SET DLDIOC(0x06) 1433147Sxc151355 typedef struct dld_ioc_secobj_set { 1443147Sxc151355 dld_secobj_t ss_obj; 1453147Sxc151355 uint_t ss_flags; 1463147Sxc151355 } dld_ioc_secobj_set_t; 1473147Sxc151355 1487408SSebastien.Roy@Sun.COM #define DLDIOC_SECOBJ_GET DLDIOC(0x07) 1493147Sxc151355 typedef struct dld_ioc_secobj_get { 1503147Sxc151355 dld_secobj_t sg_obj; 1513147Sxc151355 uint_t sg_count; 1527408SSebastien.Roy@Sun.COM uint_t sg_size; 1533147Sxc151355 } dld_ioc_secobj_get_t; 1543147Sxc151355 1555895Syz147064 /* 1565895Syz147064 * The following two slots were used outside of ON, so don't reuse them. 1575895Syz147064 * 1587408SSebastien.Roy@Sun.COM * #define DLDIOCHOLDVLAN DLDIOC(0x08) 1597408SSebastien.Roy@Sun.COM * #define DLDIOCRELEVLAN DLDIOC(0x09) 1605895Syz147064 */ 1615895Syz147064 1627408SSebastien.Roy@Sun.COM #define DLDIOC_SECOBJ_UNSET DLDIOC(0x0a) 1633147Sxc151355 typedef struct dld_ioc_secobj_unset { 1643147Sxc151355 char su_name[DLD_SECOBJ_NAME_MAX]; 1653147Sxc151355 } dld_ioc_secobj_unset_t; 1663147Sxc151355 1677408SSebastien.Roy@Sun.COM #define DLDIOC_CREATE_VLAN DLDIOC(0x0b) 1685895Syz147064 typedef struct dld_ioc_create_vlan { 1695895Syz147064 datalink_id_t dic_vlanid; 1705895Syz147064 datalink_id_t dic_linkid; 1715895Syz147064 uint16_t dic_vid; 1725895Syz147064 boolean_t dic_force; 1735895Syz147064 } dld_ioc_create_vlan_t; 1745895Syz147064 1757408SSebastien.Roy@Sun.COM #define DLDIOC_DELETE_VLAN DLDIOC(0x0c) 1765895Syz147064 typedef struct dld_ioc_delete_vlan { 1775895Syz147064 datalink_id_t did_linkid; 1785895Syz147064 } dld_ioc_delete_vlan_t; 1795895Syz147064 1807342SAruna.Ramakrishna@Sun.COM /* 1817342SAruna.Ramakrishna@Sun.COM * The following constants have been removed, and the slots are open: 1827342SAruna.Ramakrishna@Sun.COM * 1837408SSebastien.Roy@Sun.COM * #define DLDIOC_SETAUTOPUSH DLDIOC(0x0d) 1847408SSebastien.Roy@Sun.COM * #define DLDIOC_GETAUTOPUSH DLDIOC(0x0e) 1857408SSebastien.Roy@Sun.COM * #define DLDIOC_CLRAUTOPUSH DLDIOC(0x0f) 1867342SAruna.Ramakrishna@Sun.COM */ 1875895Syz147064 1887408SSebastien.Roy@Sun.COM #define DLDIOC_DOORSERVER DLDIOC(0x10) 1895895Syz147064 typedef struct dld_ioc_door { 1905895Syz147064 boolean_t did_start_door; 1915895Syz147064 } dld_ioc_door_t; 1925895Syz147064 1937408SSebastien.Roy@Sun.COM #define DLDIOC_RENAME DLDIOC(0x11) 1945895Syz147064 typedef struct dld_ioc_rename { 1955895Syz147064 datalink_id_t dir_linkid1; 1965895Syz147064 datalink_id_t dir_linkid2; 1975895Syz147064 char dir_link[MAXLINKNAMELEN]; 1985895Syz147064 } dld_ioc_rename_t; 1995895Syz147064 2003448Sdh155122 /* 2017342SAruna.Ramakrishna@Sun.COM * The following constants have been removed, and the slots are open: 2027342SAruna.Ramakrishna@Sun.COM * 2037408SSebastien.Roy@Sun.COM * #define DLDIOC_SETZID DLDIOC(0x12) 2047408SSebastien.Roy@Sun.COM * #define DLDIOC_GETZID DLDIOC(0x13) 2053448Sdh155122 */ 2063448Sdh155122 2077342SAruna.Ramakrishna@Sun.COM typedef struct dld_ioc_zid { 2087342SAruna.Ramakrishna@Sun.COM zoneid_t diz_zid; 2097342SAruna.Ramakrishna@Sun.COM char diz_link[MAXLINKNAMELEN]; 2107342SAruna.Ramakrishna@Sun.COM } dld_ioc_zid_t; 2113448Sdh155122 2125895Syz147064 /* 2135895Syz147064 * data-link autopush configuration. 2145895Syz147064 */ 2155895Syz147064 struct dlautopush { 2165895Syz147064 uint_t dap_anchor; 2175895Syz147064 uint_t dap_npush; 2185895Syz147064 char dap_aplist[MAXAPUSH][FMNAMESZ+1]; 2195895Syz147064 }; 2203448Sdh155122 2218275SEric Cheng #define DLDIOC_MACADDRGET DLDIOC(0x15) 2228275SEric Cheng typedef struct dld_ioc_macaddrget { 2238275SEric Cheng datalink_id_t dig_linkid; 2248275SEric Cheng uint_t dig_count; 2258275SEric Cheng uint_t dig_size; 2268275SEric Cheng } dld_ioc_macaddrget_t; 2278275SEric Cheng 2288275SEric Cheng /* possible flags for dmi_flags below */ 2298275SEric Cheng #define DLDIOCMACADDR_USED 0x1 /* address slot used */ 2308275SEric Cheng 2318275SEric Cheng typedef struct dld_macaddrinfo { 2328275SEric Cheng uint_t dmi_slot; 2338275SEric Cheng uint_t dmi_flags; 2348275SEric Cheng uint_t dmi_addrlen; 2358275SEric Cheng uchar_t dmi_addr[MAXMACADDRLEN]; 2368275SEric Cheng char dmi_client_name[MAXNAMELEN]; 2378275SEric Cheng datalink_id_t dma_client_linkid; 2388275SEric Cheng } dld_macaddrinfo_t; 2398275SEric Cheng 2408275SEric Cheng /* 2418275SEric Cheng * IOCTL codes and data structures for flowadm. 2428275SEric Cheng */ 2438275SEric Cheng #define DLDIOC_ADDFLOW DLDIOC(0x16) 2448275SEric Cheng typedef struct dld_ioc_addflow { 2458275SEric Cheng datalink_id_t af_linkid; 2468275SEric Cheng flow_desc_t af_flow_desc; 2478275SEric Cheng mac_resource_props_t af_resource_props; 2488558SGirish.Moodalbail@Sun.COM char af_name[MAXFLOWNAMELEN]; 2498275SEric Cheng } dld_ioc_addflow_t; 2508275SEric Cheng 2518275SEric Cheng #define DLDIOC_REMOVEFLOW DLDIOC(0x17) 2528275SEric Cheng typedef struct dld_ioc_removeflow { 2538558SGirish.Moodalbail@Sun.COM char rf_name[MAXFLOWNAMELEN]; 2548275SEric Cheng } dld_ioc_removeflow_t; 2558275SEric Cheng 2568275SEric Cheng #define DLDIOC_MODIFYFLOW DLDIOC(0x18) 2578275SEric Cheng typedef struct dld_ioc_modifyflow { 2588558SGirish.Moodalbail@Sun.COM char mf_name[MAXFLOWNAMELEN]; 2598275SEric Cheng mac_resource_props_t mf_resource_props; 2608275SEric Cheng } dld_ioc_modifyflow_t; 2618275SEric Cheng 2628275SEric Cheng #define DLDIOC_WALKFLOW DLDIOC(0x19) 2638275SEric Cheng typedef struct dld_ioc_walkflow { 2648275SEric Cheng datalink_id_t wf_linkid; 2658558SGirish.Moodalbail@Sun.COM char wf_name[MAXFLOWNAMELEN]; 2668275SEric Cheng uint32_t wf_nflows; 2678275SEric Cheng uint_t wf_len; 2688275SEric Cheng } dld_ioc_walkflow_t; 2698275SEric Cheng 2708275SEric Cheng typedef struct dld_flowinfo { 2718275SEric Cheng datalink_id_t fi_linkid; 2728275SEric Cheng flow_desc_t fi_flow_desc; 2738275SEric Cheng mac_resource_props_t fi_resource_props; 2748558SGirish.Moodalbail@Sun.COM char fi_flowname[MAXFLOWNAMELEN]; 2758275SEric Cheng uint32_t fi_pad; 2768275SEric Cheng } dld_flowinfo_t; 2778275SEric Cheng 2788275SEric Cheng #define DLDIOC_USAGELOG DLDIOC(0x1a) 2798275SEric Cheng typedef struct dld_ioc_usagelog { 2808275SEric Cheng mac_logtype_t ul_type; 2818275SEric Cheng boolean_t ul_onoff; 2828275SEric Cheng uint_t ul_interval; 2838275SEric Cheng } dld_ioc_usagelog_t; 2848275SEric Cheng 2858275SEric Cheng #define DLDIOC_SETMACPROP DLDIOC(0x1b) 2868275SEric Cheng #define DLDIOC_GETMACPROP DLDIOC(0x1c) 2876789Sam223141 #define MAC_PROP_VERSION 1 2885903Ssowmini 2896789Sam223141 typedef struct dld_ioc_macprop_s { 2905903Ssowmini int pr_version; 2916512Ssowmini uint_t pr_flags; 2925960Ssowmini datalink_id_t pr_linkid; 2936789Sam223141 mac_prop_id_t pr_num; 2948118SVasumathi.Sundaram@Sun.COM uint_t pr_perm_flags; 2956512Ssowmini char pr_name[MAXLINKPROPNAME]; 2965903Ssowmini uint_t pr_valsize; /* sizeof pr_val */ 2975903Ssowmini char pr_val[1]; 2986789Sam223141 } dld_ioc_macprop_t; 2995903Ssowmini 3008275SEric Cheng #define DLDIOC_GETHWGRP DLDIOC(0x1d) 3018275SEric Cheng 3028275SEric Cheng typedef struct dld_ioc_hwgrpget { 3038275SEric Cheng datalink_id_t dih_linkid; 3048275SEric Cheng uint_t dih_n_groups; /* number of groups included in ioc */ 3058275SEric Cheng uint_t dih_size; 3068275SEric Cheng } dld_ioc_hwgrpget_t; 3078275SEric Cheng 3088275SEric Cheng #define MAXCLIENTNAMELEN 1024 3098275SEric Cheng typedef struct dld_hwgrpinfo { 3108275SEric Cheng char dhi_link_name[MAXLINKNAMELEN]; 3118275SEric Cheng uint_t dhi_grp_num; 3128275SEric Cheng uint_t dhi_grp_type; 3138275SEric Cheng uint_t dhi_n_rings; 3148275SEric Cheng uint_t dhi_n_clnts; 3158275SEric Cheng /* XXXX later we should use dhi_n_clnts * MAXNAMELEN for dhi_clnts */ 3168275SEric Cheng char dhi_clnts[MAXCLIENTNAMELEN]; 3178275SEric Cheng } dld_hwgrpinfo_t; 3188275SEric Cheng 3198275SEric Cheng #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4 3208275SEric Cheng #pragma pack() 3218275SEric Cheng #endif 3228275SEric Cheng 323269Sericheng #ifdef _KERNEL 3248275SEric Cheng 3258275SEric Cheng #define DLD_CAPAB_DIRECT 0x00000001 3268275SEric Cheng #define DLD_CAPAB_POLL 0x00000002 3278275SEric Cheng #define DLD_CAPAB_PERIM 0x00000003 3288275SEric Cheng #define DLD_CAPAB_LSO 0x00000004 3298275SEric Cheng 3308275SEric Cheng #define DLD_ENABLE 0x00000001 3318275SEric Cheng #define DLD_DISABLE 0x00000002 3328275SEric Cheng #define DLD_QUERY 0x00000003 3338275SEric Cheng 3348275SEric Cheng /* 3358275SEric Cheng * GLDv3 entry point for negotiating capabilities. 3368275SEric Cheng * This is exposed to IP after negotiation of DL_CAPAB_DLD. 3378275SEric Cheng * 3388275SEric Cheng * This function takes the following arguments: 3398275SEric Cheng * handle: used for identifying the interface to operate on (provided by dld). 3408275SEric Cheng * type: capability type. 3418275SEric Cheng * arg: points to a capability-specific structure. 3428275SEric Cheng * flags: used for indicating whether to enable or disable a capability. 3438275SEric Cheng * 3448275SEric Cheng * With this function, capability negotiation is reduced from a multi-step 3458275SEric Cheng * process to just one single function call. 3468275SEric Cheng * e.g. the following code would pass 'x' from IP to dld and obtain 3478275SEric Cheng * arg.output_arg from dld: 3488275SEric Cheng * 3498275SEric Cheng * arg.input_arg = x; 3508275SEric Cheng * rc = (*dld_capab)(handle, DLD_CAPAB_XXX, &arg, DLD_ENABLE); 3518275SEric Cheng * ill->info1 = arg.output_arg; 3528275SEric Cheng */ 3538275SEric Cheng typedef int (*dld_capab_func_t)(void *, uint_t, void *, uint_t); 3548275SEric Cheng 3558275SEric Cheng /* 3568275SEric Cheng * Direct Tx/Rx capability. 3578275SEric Cheng */ 3588275SEric Cheng typedef struct dld_capab_direct_s { 3598275SEric Cheng /* 3608275SEric Cheng * Rx entry point and handle, owned by IP. 3618275SEric Cheng */ 3628275SEric Cheng uintptr_t di_rx_cf; 3638275SEric Cheng void *di_rx_ch; 3648275SEric Cheng 3658275SEric Cheng /* 3668275SEric Cheng * Tx entry points and handle, owned by DLD. 3678275SEric Cheng */ 3688275SEric Cheng /* Entry point for transmitting packets */ 3698275SEric Cheng uintptr_t di_tx_df; 3708275SEric Cheng void *di_tx_dh; 3718275SEric Cheng 3728275SEric Cheng /* flow control notification callback */ 3738275SEric Cheng uintptr_t di_tx_cb_df; /* callback registration/de-registration */ 3748275SEric Cheng void *di_tx_cb_dh; 375*8833SVenu.Iyer@Sun.COM 376*8833SVenu.Iyer@Sun.COM /* flow control "can I put on a ring" callback */ 377*8833SVenu.Iyer@Sun.COM uintptr_t di_tx_fctl_df; /* canput-like callback */ 378*8833SVenu.Iyer@Sun.COM void *di_tx_fctl_dh; 3798275SEric Cheng } dld_capab_direct_t; 3808275SEric Cheng 3818275SEric Cheng /* 3828275SEric Cheng * Polling/softring capability. 3838275SEric Cheng */ 3848275SEric Cheng #define POLL_SOFTRING 0x00000001 3858275SEric Cheng typedef struct dld_capab_poll_s { 3868275SEric Cheng uintptr_t poll_ring_add_cf; 3878275SEric Cheng uintptr_t poll_ring_remove_cf; 3888275SEric Cheng uintptr_t poll_ring_quiesce_cf; 3898275SEric Cheng uintptr_t poll_ring_restart_cf; 3908275SEric Cheng uintptr_t poll_ring_bind_cf; 3918275SEric Cheng void *poll_ring_ch; 3928275SEric Cheng uintptr_t poll_mac_accept_df; 3938275SEric Cheng void *poll_mac_dh; 3948275SEric Cheng } dld_capab_poll_t; 3958275SEric Cheng 3968275SEric Cheng /* 3978275SEric Cheng * LSO capability 3988275SEric Cheng */ 3998275SEric Cheng /* 4008275SEric Cheng * Currently supported flags for LSO. 4018275SEric Cheng */ 4028275SEric Cheng #define DLD_LSO_TX_BASIC_TCP_IPV4 0x01 /* TCP LSO capability */ 4038275SEric Cheng 4048275SEric Cheng typedef struct dld_capab_lso_s { 4058275SEric Cheng uint_t lso_flags; /* capability flags */ 4068275SEric Cheng uint_t lso_max; /* maximum payload */ 4078275SEric Cheng } dld_capab_lso_t; 4088275SEric Cheng 409269Sericheng int dld_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **); 410269Sericheng int dld_open(queue_t *, dev_t *, int, int, cred_t *); 411269Sericheng int dld_close(queue_t *); 412269Sericheng void dld_wput(queue_t *, mblk_t *); 413269Sericheng void dld_wsrv(queue_t *); 414269Sericheng void dld_init_ops(struct dev_ops *, const char *); 415269Sericheng void dld_fini_ops(struct dev_ops *); 4165895Syz147064 int dld_autopush(dev_t *, struct dlautopush *); 4178275SEric Cheng 4188275SEric Cheng int dld_add_flow(datalink_id_t, char *, flow_desc_t *, 4198275SEric Cheng mac_resource_props_t *); 4208275SEric Cheng int dld_remove_flow(char *); 4218275SEric Cheng int dld_modify_flow(char *, mac_resource_props_t *); 4228275SEric Cheng int dld_walk_flow(dld_ioc_walkflow_t *, intptr_t); 4238275SEric Cheng 424269Sericheng #endif 425269Sericheng 4260Sstevel@tonic-gate #ifdef __cplusplus 4270Sstevel@tonic-gate } 4280Sstevel@tonic-gate #endif 4290Sstevel@tonic-gate 4300Sstevel@tonic-gate #endif /* _SYS_DLD_H */ 431