vnet_res.h revision da14cebe459d3275048785f25bd869cb09b5307f
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * CDDL HEADER START
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * The contents of this file are subject to the terms of the
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * Common Development and Distribution License (the "License").
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * You may not use this file except in compliance with the License.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * or http://www.opensolaris.org/os/licensing.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * See the License for the specific language governing permissions
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * and limitations under the License.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * When distributing Covered Code, include this CDDL HEADER in each
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * If applicable, add the following below this CDDL HEADER, with the
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * fields enclosed by brackets "[]" replaced with your own identifying
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * information: Portions Copyright [yyyy] [name of copyright owner]
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * CDDL HEADER END
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
f317a3a3712d9b82387b437ac621db3733d8c804krishna * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * Use is subject to license terms.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#ifndef _VNET_RES_H
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#define _VNET_RES_H
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#ifdef __cplusplus
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmextern "C" {
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#endif
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#include <sys/mac_provider.h>
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * Vio network resource types.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * VIO_NET_RES_LDC_SERVICE:
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * An LDC based resource corresonding to vswitch
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * service. This means, all broadcast pakets need
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * to be sent via this resource. Unicast packets
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * that have no known end point will also be sent
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * via this resource, but only if no Hybrid resource
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * is available.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * VIO_NET_RES_LDC_GUEST:
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * An LDC based resource corresponding to another
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * guest domain. This means, unicast packets to that
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * guest's mac addres will be sent via this resource.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * VIO_NET_RES_HYBRID:
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * A Hybrid resource. Even though this resource may
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * be capable of transmitting the broadcast/multicast
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * traffic, it will be used only for transmitting
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * uni-cast traffic.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * This is because the broadcast/multicast traffic needs
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * to be sent to the vswitch so that those packets
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * are sent to other guest domains and vswitch interface.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef enum {
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm VIO_NET_RES_LDC_SERVICE,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm VIO_NET_RES_LDC_GUEST,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm VIO_NET_RES_HYBRID
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm} vio_net_res_type_t;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/* A handle returned by vio_net_resource_reg() interface */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef void *vio_net_handle_t;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * Callback functions returned via the reg() interfce.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vio_net_rx_cb: Used for passing the packets that are received
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * by a device. This is equivalent of mac_rx().
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vio_net_tx_update: Used for re-starting the transmission. This
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * is an equivalent of mac_tx_update().
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vio_net_report_err: Used for reporting any errors with the resource.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef void (*vio_net_rx_cb_t)(vio_net_handle_t, mblk_t *);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef void (*vio_net_tx_update_t)(vio_net_handle_t);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef enum {
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm VIO_NET_RES_DOWN, /* Resource down */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm VIO_VNET_RES_ERR /* Resource encountered an error */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm} vio_net_err_val_t;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef void (*vio_net_report_err_t)(vio_net_handle_t, vio_net_err_val_t err);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef struct vio_net_callbacks_s {
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_rx_cb_t vio_net_rx_cb;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_tx_update_t vio_net_tx_update;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_report_err_t vio_net_report_err;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm} vio_net_callbacks_t;
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vio_net_resource_reg -- An interface to register a resource with vnet.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * macp: A mac_register_t structure representing the
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * device and its MAC driver callbacks.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * type: Type of the device.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * local-macaddr: A MAC address to which this resource belongs to.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * rem_macaddr: A MAC address of the peer. This is only applicable
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * to LDC based resource. This argument is ignored
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * for HYBRID resource.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vhp: A handle returned by this interface. After a
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * successful return of this interface,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * all other interaction will use this handle.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vcb: A set of callbacks returned by this interface
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * for the use of the devices to pass packets etc.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * Return value: 0 for success, non-zero errno value appropriate for the error.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmint vio_net_resource_reg(mac_register_t *macp,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_res_type_t type, ether_addr_t local_maddr, ether_addr_t rem_maddr,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_handle_t *vhp, vio_net_callbacks_t *vcb);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/* A useful typedef for consumers of this interface */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef int (*vio_net_resource_reg_t)(mac_register_t *macp,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_res_type_t type, ether_addr_t local_maddr, ether_addr_t rem_maddr,
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm vio_net_handle_t *vhp, vio_net_callbacks_t *vcb);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/*
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vio_net_resource_unreg -- Unregisters a resource.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm *
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm * vhp: handle that was returned by the resource_reg() interface.
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmvoid vio_net_resource_unreg(vio_net_handle_t vhp);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm/* A useful typedef for consumers of this interface */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gmtypedef void (*vio_net_resource_unreg_t)(vio_net_handle_t vhp);
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#ifdef __cplusplus
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm}
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#endif
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm#endif /* _VNET_RES_H */
88f8b78a88cbdc6d8c1af5c3e54bc49d25095c98gm