mac_impl.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_MAC_IMPL_H
#define _SYS_MAC_IMPL_H
#pragma ident "%Z%%M% %I% %E% SMI"
#include <sys/mac.h>
#include <sys/ght.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct mac_multicst_addr_s mac_multicst_addr_t;
struct mac_multicst_addr_s {
mac_multicst_addr_t *mma_nextp;
uint_t mma_ref;
uint8_t mma_addr[MAXADDRLEN];
};
typedef struct mac_notify_fn_s mac_notify_fn_t;
struct mac_notify_fn_s {
mac_notify_fn_t *mnf_nextp;
mac_notify_t mnf_fn;
void *mnf_arg;
};
typedef struct mac_rx_fn_s mac_rx_fn_t;
struct mac_rx_fn_s {
mac_rx_fn_t *mrf_nextp;
mac_rx_t mrf_fn;
void *mrf_arg;
};
typedef struct mac_txloop_fn_s mac_txloop_fn_t;
struct mac_txloop_fn_s {
mac_txloop_fn_t *mtf_nextp;
mac_txloop_t mtf_fn;
void *mtf_arg;
};
typedef boolean_t (*mac_unicst_verify_t)(mac_impl_t *,
const uint8_t *);
typedef boolean_t (*mac_multicst_verify_t)(mac_impl_t *,
const uint8_t *);
struct mac_impl_s {
mac_t *mi_mp;
char mi_dev[MAXNAMELEN];
uint_t mi_port;
char mi_name[MAXNAMELEN];
ghte_t mi_hte;
uint32_t mi_ref;
boolean_t mi_destroying;
krwlock_t mi_state_lock;
uint_t mi_active;
krwlock_t mi_data_lock;
link_state_t mi_link;
uint_t mi_promisc;
uint_t mi_devpromisc;
uint8_t mi_addr[MAXADDRLEN];
mac_multicst_addr_t *mi_mmap;
uint_t mi_addr_length;
krwlock_t mi_notify_lock;
mac_notify_fn_t *mi_mnfp;
krwlock_t mi_rx_lock;
mac_rx_fn_t *mi_mrfp;
krwlock_t mi_txloop_lock;
mac_txloop_fn_t *mi_mtfp;
krwlock_t mi_resource_lock;
mac_resource_add_t mi_resource_add;
void *mi_resource_add_arg;
kstat_t *mi_ksp;
mac_unicst_verify_t mi_unicst_verify;
mac_multicst_verify_t mi_multicst_verify;
kmutex_t mi_activelink_lock;
boolean_t mi_activelink;
};
extern void mac_init(void);
extern int mac_fini(void);
extern void mac_stat_create(mac_impl_t *);
extern void mac_stat_destroy(mac_impl_t *);
#ifdef __cplusplus
}
#endif
#endif /* _SYS_MAC_IMPL_H */