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