10ba2cbe9Sxc /* 20ba2cbe9Sxc * CDDL HEADER START 30ba2cbe9Sxc * 40ba2cbe9Sxc * The contents of this file are subject to the terms of the 50ba2cbe9Sxc * Common Development and Distribution License (the "License"). 60ba2cbe9Sxc * You may not use this file except in compliance with the License. 70ba2cbe9Sxc * 80ba2cbe9Sxc * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 90ba2cbe9Sxc * or http://www.opensolaris.org/os/licensing. 100ba2cbe9Sxc * See the License for the specific language governing permissions 110ba2cbe9Sxc * and limitations under the License. 120ba2cbe9Sxc * 130ba2cbe9Sxc * When distributing Covered Code, include this CDDL HEADER in each 140ba2cbe9Sxc * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 150ba2cbe9Sxc * If applicable, add the following below this CDDL HEADER, with the 160ba2cbe9Sxc * fields enclosed by brackets "[]" replaced with your own identifying 170ba2cbe9Sxc * information: Portions Copyright [yyyy] [name of copyright owner] 180ba2cbe9Sxc * 190ba2cbe9Sxc * CDDL HEADER END 200ba2cbe9Sxc */ 210ba2cbe9Sxc /* 221cfa752fSRamaswamy Tummala * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. 2336589d6bSRobert Mustacchi * Copyright 2015, Joyent, Inc. 240ba2cbe9Sxc */ 250ba2cbe9Sxc 26399dcf08Scarlos antonio neira bustos /* 27*faa2068dSAndy Fiddaman * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. 28399dcf08Scarlos antonio neira bustos */ 29399dcf08Scarlos antonio neira bustos 300ba2cbe9Sxc #ifndef _LIBDLADM_IMPL_H 310ba2cbe9Sxc #define _LIBDLADM_IMPL_H 320ba2cbe9Sxc 332b24ab6bSSebastien Roy #include <sys/types.h> 344eaa4710SRishi Srivatsavai #include <sys/mac.h> 354eaa4710SRishi Srivatsavai #include <sys/mac_flow.h> 360ba2cbe9Sxc #include <libdladm.h> 370ba2cbe9Sxc #include <stdio.h> 380ba2cbe9Sxc 390ba2cbe9Sxc #ifdef __cplusplus 400ba2cbe9Sxc extern "C" { 410ba2cbe9Sxc #endif 420ba2cbe9Sxc 430ba2cbe9Sxc #define MAXLINELEN 1024 440ba2cbe9Sxc #define BUFLEN(lim, ptr) (((lim) > (ptr)) ? ((lim) - (ptr)) : 0) 450dc2366fSVenugopal Iyer #define V4_PART_OF_V6(v6) ((v6)._S6_un._S6_u32[3]) 460ba2cbe9Sxc 474ac67f02SAnurag S. Maskey /* 484ac67f02SAnurag S. Maskey * The handle contains file descriptors to DLD_CONTROL_DEV and 494ac67f02SAnurag S. Maskey * DLMGMT_DOOR. Rather than opening the file descriptor each time 504ac67f02SAnurag S. Maskey * it is required, the handle is opened by consumers of libdladm 514ac67f02SAnurag S. Maskey * (e.g., dladm) and then passed to libdladm. 524ac67f02SAnurag S. Maskey */ 534ac67f02SAnurag S. Maskey struct dladm_handle { 544ac67f02SAnurag S. Maskey int dld_fd; /* file descriptor to DLD_CONTROL_DEV */ 554ac67f02SAnurag S. Maskey int door_fd; /* file descriptor to DLMGMT_DOOR */ 56399dcf08Scarlos antonio neira bustos kstat_ctl_t *dld_kcp; /* for kstat consumers */ 574ac67f02SAnurag S. Maskey }; 584ac67f02SAnurag S. Maskey 594ac67f02SAnurag S. Maskey /* DLMGMT_DOOR can only be accessed by libdladm and dlmgmtd */ 604ac67f02SAnurag S. Maskey extern dladm_status_t dladm_door_fd(dladm_handle_t, int *); 614ac67f02SAnurag S. Maskey 620ba2cbe9Sxc extern dladm_status_t dladm_errno2status(int); 634ac67f02SAnurag S. Maskey extern dladm_status_t i_dladm_rw_db(dladm_handle_t, const char *, mode_t, 644ac67f02SAnurag S. Maskey dladm_status_t (*)(dladm_handle_t, void *, FILE *, 654ac67f02SAnurag S. Maskey FILE *), void *, boolean_t); 660dc2366fSVenugopal Iyer extern dladm_status_t dladm_get_state(dladm_handle_t, datalink_id_t, 674ac67f02SAnurag S. Maskey link_state_t *); 6825ec3e3dSEric Cheng extern void dladm_find_setbits32(uint32_t, uint32_t *, uint32_t *); 69da14cebeSEric Cheng extern dladm_status_t dladm_parse_args(char *, dladm_arg_list_t **, 70da14cebeSEric Cheng boolean_t); 71da14cebeSEric Cheng extern void dladm_free_args(dladm_arg_list_t *); 72da14cebeSEric Cheng 73d62bc4baSyz /* 74d62bc4baSyz * Link attributes persisted by dlmgmtd. 75d62bc4baSyz */ 76*faa2068dSAndy Fiddaman 77*faa2068dSAndy Fiddaman /* 78*faa2068dSAndy Fiddaman * Set for overlays only 79*faa2068dSAndy Fiddaman */ 80*faa2068dSAndy Fiddaman #define FENCAP "encap" /* string */ 81*faa2068dSAndy Fiddaman #define FSEARCH "search" /* string */ 82*faa2068dSAndy Fiddaman #define FVNETID "vnetid" /* uint64_t */ 83*faa2068dSAndy Fiddaman 84d62bc4baSyz /* 85d62bc4baSyz * Set for VLANs only 86d62bc4baSyz */ 87d62bc4baSyz #define FVLANID "vid" /* uint64_t */ 88d62bc4baSyz #define FLINKOVER "linkover" /* uint64_t */ 89d62bc4baSyz 90d62bc4baSyz /* 91d62bc4baSyz * Set for AGGRs only 92d62bc4baSyz */ 93d62bc4baSyz #define FKEY "key" /* uint64_t */ 94d62bc4baSyz #define FNPORTS "nports" /* uint64_t */ 95d62bc4baSyz #define FPORTS "portnames" /* string */ 96d62bc4baSyz #define FPOLICY "policy" /* uint64_t */ 97d62bc4baSyz #define FFIXMACADDR "fix_macaddr" /* boolean_t */ 98d62bc4baSyz #define FFORCE "force" /* boolean_t */ 99d62bc4baSyz #define FLACPMODE "lacp_mode" /* uint64_t */ 100d62bc4baSyz #define FLACPTIMER "lacp_timer" /* uint64_t */ 101d62bc4baSyz 102da14cebeSEric Cheng /* 103da14cebeSEric Cheng * Set for VNICs only 104da14cebeSEric Cheng */ 105da14cebeSEric Cheng #define FMADDRTYPE "maddrtype" /* uint64_t */ 106da14cebeSEric Cheng #define FMADDRLEN "maddrlen" /* uint64_t */ 107da14cebeSEric Cheng #define FMADDRSLOT "maddrslot" /* uint64_t */ 108da14cebeSEric Cheng #define FMADDRPREFIXLEN "maddrpreflen" /* uint64_t */ 1091cb875aeSCathy Zhou #define FVRID "vrid" /* uint64_t */ 1101cb875aeSCathy Zhou #define FVRAF "vraf" /* uint64_t */ 111da14cebeSEric Cheng 112b509e89bSRishi Srivatsavai /* 113b509e89bSRishi Srivatsavai * Set for simlinks only 114b509e89bSRishi Srivatsavai */ 115b509e89bSRishi Srivatsavai #define FSIMNETTYPE "simnettype" /* uint64_t */ 116b509e89bSRishi Srivatsavai #define FSIMNETPEER "simnetpeer" /* uint64_t */ 117b509e89bSRishi Srivatsavai 1181cfa752fSRamaswamy Tummala /* 1191cfa752fSRamaswamy Tummala * Set for IB partitions only 1201cfa752fSRamaswamy Tummala */ 1211cfa752fSRamaswamy Tummala #define FPORTPKEY "pkey" /* uint64_t */ 1221cfa752fSRamaswamy Tummala 123da14cebeSEric Cheng /* 124da14cebeSEric Cheng * Common fields 125da14cebeSEric Cheng */ 126da14cebeSEric Cheng #define FMACADDR "macaddr" /* string */ 127da14cebeSEric Cheng 12862ee1d25SArtem Kachitchkine /* 12962ee1d25SArtem Kachitchkine * List of all the above attributes. 13062ee1d25SArtem Kachitchkine */ 131*faa2068dSAndy Fiddaman #define DLADM_ATTR_NAMES FENCAP, FSEARCH, FVNETID, \ 132*faa2068dSAndy Fiddaman FVLANID, FLINKOVER, \ 13362ee1d25SArtem Kachitchkine FKEY, FNPORTS, FPORTS, FPOLICY, \ 13462ee1d25SArtem Kachitchkine FFIXMACADDR, FFORCE, FLACPMODE, FLACPTIMER, \ 13562ee1d25SArtem Kachitchkine FMADDRTYPE, FMADDRLEN, FMADDRSLOT, \ 1369056fcebSCathy Zhou FMADDRPREFIXLEN, FVRID, FVRAF, \ 137b509e89bSRishi Srivatsavai FMACADDR, FSIMNETTYPE, FSIMNETPEER 13862ee1d25SArtem Kachitchkine 139da14cebeSEric Cheng /* 140da14cebeSEric Cheng * Data structures used for implementing temporary properties 141da14cebeSEric Cheng */ 142da14cebeSEric Cheng 143da14cebeSEric Cheng typedef struct val_desc { 144da14cebeSEric Cheng char *vd_name; 145da14cebeSEric Cheng uintptr_t vd_val; 146da14cebeSEric Cheng } val_desc_t; 147da14cebeSEric Cheng 148da14cebeSEric Cheng #define VALCNT(vals) (sizeof ((vals)) / sizeof (val_desc_t)) 149da14cebeSEric Cheng 1504ac67f02SAnurag S. Maskey extern dladm_status_t dladm_link_proplist_extract(dladm_handle_t, 1510dc2366fSVenugopal Iyer dladm_arg_list_t *, mac_resource_props_t *, 1520dc2366fSVenugopal Iyer uint_t); 153da14cebeSEric Cheng 154da14cebeSEric Cheng extern dladm_status_t dladm_flow_proplist_extract(dladm_arg_list_t *, 155da14cebeSEric Cheng mac_resource_props_t *); 156da14cebeSEric Cheng 157da14cebeSEric Cheng /* 158da14cebeSEric Cheng * The prop extract() callback. 159da14cebeSEric Cheng * 160da14cebeSEric Cheng * rp_extract extracts the kernel structure from the val_desc_t created 161da14cebeSEric Cheng * by the pd_check function. 162da14cebeSEric Cheng */ 16325ec3e3dSEric Cheng typedef dladm_status_t rp_extractf_t(val_desc_t *, uint_t, void *); 1640dc2366fSVenugopal Iyer extern rp_extractf_t extract_maxbw, extract_priority, 1650dc2366fSVenugopal Iyer extract_cpus, extract_protection, 1660dc2366fSVenugopal Iyer extract_allowedips, extract_allowedcids, 1670dc2366fSVenugopal Iyer extract_rxrings, extract_txrings, extract_pool; 168da14cebeSEric Cheng 169da14cebeSEric Cheng typedef struct resource_prop_s { 170da14cebeSEric Cheng /* 171da14cebeSEric Cheng * resource property name 172da14cebeSEric Cheng */ 173da14cebeSEric Cheng char *rp_name; 174da14cebeSEric Cheng 175da14cebeSEric Cheng /* 176da14cebeSEric Cheng * callback to extract kernel structure 177da14cebeSEric Cheng */ 178da14cebeSEric Cheng rp_extractf_t *rp_extract; 179da14cebeSEric Cheng } resource_prop_t; 180da14cebeSEric Cheng 1814eaa4710SRishi Srivatsavai /* 1824eaa4710SRishi Srivatsavai * Set for bridged links only 1834eaa4710SRishi Srivatsavai */ 1844eaa4710SRishi Srivatsavai #define FBRIDGE "bridge" /* string */ 1854eaa4710SRishi Srivatsavai 18636589d6bSRobert Mustacchi /* 18736589d6bSRobert Mustacchi * For error lists 18836589d6bSRobert Mustacchi */ 18936589d6bSRobert Mustacchi extern dladm_status_t dladm_errlist_append(dladm_errlist_t *, 19036589d6bSRobert Mustacchi const char *, ...); 19136589d6bSRobert Mustacchi 1920ba2cbe9Sxc #ifdef __cplusplus 1930ba2cbe9Sxc } 1940ba2cbe9Sxc #endif 1950ba2cbe9Sxc 1960ba2cbe9Sxc #endif /* _LIBDLADM_IMPL_H */ 197