1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 * Copyright 2025 Oxide Computer Company 25 */ 26 27 #ifndef _SYS_DLS_H 28 #define _SYS_DLS_H 29 30 #include <sys/types.h> 31 #include <sys/stream.h> 32 #include <sys/mac_client.h> 33 #include <sys/dls_mgmt.h> 34 35 /* 36 * Data-Link Services Module 37 */ 38 39 #ifdef __cplusplus 40 extern "C" { 41 #endif 42 43 /* 44 * Module name. 45 */ 46 #define DLS_MODULE_NAME "dls" 47 48 /* 49 * Data-Link Services Information (text emitted by modinfo(8)) 50 */ 51 #define DLS_INFO "Data-Link Services" 52 53 /* 54 * Macros for converting ppas to instance #s, Vlan ID, or minor. 55 */ 56 #define DLS_PPA2INST(ppa) ((int)((ppa) % 1000)) 57 #define DLS_PPA2VID(ppa) ((uint16_t)((ppa) / 1000)) 58 #define DLS_PPA2MINOR(ppa) ((minor_t)((DLS_PPA2INST(ppa)) + 1)) 59 60 /* 61 * Maps a (VID, INST) pair to ppa 62 */ 63 #define DLS_VIDINST2PPA(vid, inst) ((minor_t)((vid) * 1000 + (inst))) 64 65 /* 66 * Converts a minor to an instance#; makes sense only when minor <= 1000. 67 */ 68 #define DLS_MINOR2INST(minor) ((int)((minor) - 1)) 69 70 #ifdef _KERNEL 71 72 #define DLS_MAX_PPA 999 73 #define DLS_MAX_MINOR (DLS_MAX_PPA + 1) 74 75 typedef void (*dls_rx_t)(void *, mac_resource_handle_t, mblk_t *, 76 mac_header_info_t *); 77 78 typedef struct dld_str_s dld_str_t; 79 typedef struct dls_devnet_s *dls_dl_handle_t; 80 typedef struct dls_dev_t *dls_dev_handle_t; 81 typedef struct dls_link_s dls_link_t; 82 83 #define DLS_SAP_LLC 0 84 #define DLS_SAP_PROMISC (1 << 16) 85 86 #define DLS_PROMISC_SAP 0x00000001 87 #define DLS_PROMISC_MULTI 0x00000002 88 #define DLS_PROMISC_PHYS 0x00000004 89 #define DLS_PROMISC_RX_ONLY 0x00000008 90 #define DLS_PROMISC_INCOMING 0x00000010 91 #define DLS_PROMISC_OUTGOING 0x00000020 92 93 extern int dls_open(dls_link_t *, dls_dl_handle_t, dld_str_t *); 94 extern void dls_close(dld_str_t *); 95 extern int dls_bind(dld_str_t *, uint32_t); 96 extern void dls_unbind(dld_str_t *); 97 98 extern int dls_promisc(dld_str_t *, uint32_t); 99 100 extern int dls_multicst_add(dld_str_t *, const uint8_t *); 101 extern int dls_multicst_remove(dld_str_t *, const uint8_t *); 102 103 extern mblk_t *dls_header(dld_str_t *, const uint8_t *, 104 uint16_t, uint_t, mblk_t **); 105 106 extern void dls_rx_set(dld_str_t *, dls_rx_t, void *); 107 extern dld_str_t *dls_rx_get(char *, flow_desc_t *, size_t *); 108 109 extern void str_notify(void *, mac_notify_type_t); 110 111 extern int dls_devnet_open(const char *, 112 dls_dl_handle_t *, dev_t *); 113 extern void dls_devnet_close(dls_dl_handle_t); 114 extern boolean_t dls_devnet_rebuild(); 115 116 extern int dls_devnet_rename(datalink_id_t, datalink_id_t, 117 const char *); 118 extern int dls_devnet_create(mac_handle_t, datalink_id_t, 119 zoneid_t); 120 extern int dls_devnet_destroy(mac_handle_t, datalink_id_t *, 121 boolean_t); 122 extern int dls_devnet_recreate(mac_handle_t, datalink_id_t); 123 extern int dls_devnet_hold_tmp(datalink_id_t, dls_dl_handle_t *); 124 extern void dls_devnet_rele_tmp(dls_dl_handle_t); 125 extern int dls_devnet_hold_by_dev(dev_t, dls_dl_handle_t *); 126 extern void dls_devnet_rele(dls_dl_handle_t); 127 extern void dls_devnet_prop_task_wait(dls_dl_handle_t); 128 129 extern const char *dls_devnet_link(dls_dl_handle_t); 130 extern const char *dls_devnet_mac(dls_dl_handle_t); 131 extern uint16_t dls_devnet_vid(dls_dl_handle_t); 132 extern datalink_id_t dls_devnet_linkid(dls_dl_handle_t); 133 extern int dls_devnet_dev2linkid(dev_t, datalink_id_t *); 134 extern int dls_devnet_phydev(datalink_id_t, dev_t *); 135 extern int dls_devnet_setzid(dls_dl_handle_t, zoneid_t); 136 extern zoneid_t dls_devnet_getzid(dls_dl_handle_t); 137 extern zoneid_t dls_devnet_getownerzid(dls_dl_handle_t); 138 extern boolean_t dls_devnet_islinkvisible(datalink_id_t, zoneid_t); 139 140 extern int dls_mgmt_door_set(boolean_t); 141 extern int dls_mgmt_create(const char *, dev_t, datalink_class_t, 142 uint32_t, boolean_t, datalink_id_t *); 143 extern int dls_mgmt_destroy(datalink_id_t, boolean_t); 144 extern int dls_mgmt_update(const char *, uint32_t, boolean_t, 145 uint32_t *, datalink_id_t *); 146 extern int dls_mgmt_get_linkinfo(datalink_id_t, char *, 147 datalink_class_t *, uint32_t *, uint32_t *); 148 extern int dls_mgmt_get_linkid(const char *, datalink_id_t *); 149 extern datalink_id_t dls_mgmt_get_next(datalink_id_t, datalink_class_t, 150 datalink_media_t, uint32_t); 151 extern int dls_devnet_macname2linkid(const char *, 152 datalink_id_t *); 153 154 #endif /* _KERNEL */ 155 156 #ifdef __cplusplus 157 } 158 #endif 159 160 #endif /* _SYS_DLS_H */ 161