843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER START
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * The contents of this file are subject to the terms of the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Common Development and Distribution License (the "License").
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You may not use this file except in compliance with the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
843e19887f64dde75055cf8842fc4db2171eff45johnlev * or http://www.opensolaris.org/os/licensing.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * See the License for the specific language governing permissions
843e19887f64dde75055cf8842fc4db2171eff45johnlev * and limitations under the License.
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * When distributing Covered Code, include this CDDL HEADER in each
843e19887f64dde75055cf8842fc4db2171eff45johnlev * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * If applicable, add the following below this CDDL HEADER, with the
843e19887f64dde75055cf8842fc4db2171eff45johnlev * fields enclosed by brackets "[]" replaced with your own identifying
843e19887f64dde75055cf8842fc4db2171eff45johnlev * information: Portions Copyright [yyyy] [name of copyright owner]
843e19887f64dde75055cf8842fc4db2171eff45johnlev *
843e19887f64dde75055cf8842fc4db2171eff45johnlev * CDDL HEADER END
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev/*
0dc2366f7b9f9f36e10909b1e95edbf2a261c2acVenugopal Iyer * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev * Use is subject to license terms.
a776d98e5f349dbb7f5a47eca48f50e6117adcb7Robert Mustacchi * Copyright 2014 Joyent, Inc. All rights reserved.
843e19887f64dde75055cf8842fc4db2171eff45johnlev */
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#ifndef _SYS_VNIC_IMPL_H
843e19887f64dde75055cf8842fc4db2171eff45johnlev#define _SYS_VNIC_IMPL_H
843e19887f64dde75055cf8842fc4db2171eff45johnlev
2b24ab6b3865caeede9eeb9db6b83e1d89dcd1eaSebastien Roy#include <sys/cred.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac_provider.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac_client.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac_client_priv.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/vnic.h>
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng#include <sys/mac_flow.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev#include <sys/ksynch.h>
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#ifdef __cplusplus
843e19887f64dde75055cf8842fc4db2171eff45johnlevextern "C" {
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevtypedef struct vnic_s {
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng datalink_id_t vn_id;
843e19887f64dde75055cf8842fc4db2171eff45johnlev uint32_t
2c4ec68272805fba7d569318536bd680e9c52e03Eric Cheng vn_enabled : 1,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng vn_pad_to_bit_31 : 31;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_handle_t vn_mh;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_handle_t vn_lower_mh;
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek uint_t vn_nhandles; /* # of secondary mac handles */
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek /* The primary handle is always the first element in the array */
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek mac_client_handle_t vn_mc_handles[MPT_MAXMACADDR];
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek mac_unicast_handle_t vn_mu_handles[MPT_MAXMACADDR];
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng uint32_t vn_margin;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng int vn_slot_id;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng vnic_mac_addr_type_t vn_addr_type;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng uint8_t vn_addr[MAXMACADDRLEN];
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng size_t vn_addr_len;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng uint16_t vn_vid;
1cb875ae88fb9463b368e725c2444776595895cbCathy Zhou vrid_t vn_vrid;
1cb875ae88fb9463b368e725c2444776595895cbCathy Zhou int vn_af;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng boolean_t vn_force;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng datalink_id_t vn_link_id;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng mac_notify_handle_t vn_mnh;
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng uint32_t vn_hcksum_txflags;
a776d98e5f349dbb7f5a47eca48f50e6117adcb7Robert Mustacchi uint32_t vn_mtu;
843e19887f64dde75055cf8842fc4db2171eff45johnlev} vnic_t;
843e19887f64dde75055cf8842fc4db2171eff45johnlev
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek#define vn_mch vn_mc_handles[0]
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek#define vn_muh vn_mu_handles[0]
1a41ca239310955ae95b2569b707432432a58580Jerry Jelinek
da14cebe459d3275048785f25bd869cb09b5307fEric Chengextern int vnic_dev_create(datalink_id_t, datalink_id_t, vnic_mac_addr_type_t *,
1cb875ae88fb9463b368e725c2444776595895cbCathy Zhou int *, uchar_t *, int *, uint_t, uint16_t, vrid_t, int,
1cb875ae88fb9463b368e725c2444776595895cbCathy Zhou mac_resource_props_t *, uint32_t, vnic_ioc_diag_t *, cred_t *);
d62bc4badc1c1f1549c961cfb8b420e650e1272byzextern int vnic_dev_modify(datalink_id_t, uint_t, vnic_mac_addr_type_t,
da14cebe459d3275048785f25bd869cb09b5307fEric Cheng uint_t, uchar_t *, uint_t, mac_resource_props_t *);
2b24ab6b3865caeede9eeb9db6b83e1d89dcd1eaSebastien Royextern int vnic_dev_delete(datalink_id_t, uint32_t, cred_t *);
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlevextern void vnic_dev_init(void);
843e19887f64dde75055cf8842fc4db2171eff45johnlevextern void vnic_dev_fini(void);
843e19887f64dde75055cf8842fc4db2171eff45johnlevextern uint_t vnic_dev_count(void);
843e19887f64dde75055cf8842fc4db2171eff45johnlevextern dev_info_t *vnic_get_dip(void);
843e19887f64dde75055cf8842fc4db2171eff45johnlev
2b24ab6b3865caeede9eeb9db6b83e1d89dcd1eaSebastien Royextern int vnic_info(vnic_info_t *, cred_t *);
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#ifdef __cplusplus
843e19887f64dde75055cf8842fc4db2171eff45johnlev}
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif
843e19887f64dde75055cf8842fc4db2171eff45johnlev
843e19887f64dde75055cf8842fc4db2171eff45johnlev#endif /* _SYS_VNIC_IMPL_H */