1*4eaa4710SRishi Srivatsavai /* 2*4eaa4710SRishi Srivatsavai * CDDL HEADER START 3*4eaa4710SRishi Srivatsavai * 4*4eaa4710SRishi Srivatsavai * The contents of this file are subject to the terms of the 5*4eaa4710SRishi Srivatsavai * Common Development and Distribution License (the "License"). 6*4eaa4710SRishi Srivatsavai * You may not use this file except in compliance with the License. 7*4eaa4710SRishi Srivatsavai * 8*4eaa4710SRishi Srivatsavai * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*4eaa4710SRishi Srivatsavai * or http://www.opensolaris.org/os/licensing. 10*4eaa4710SRishi Srivatsavai * See the License for the specific language governing permissions 11*4eaa4710SRishi Srivatsavai * and limitations under the License. 12*4eaa4710SRishi Srivatsavai * 13*4eaa4710SRishi Srivatsavai * When distributing Covered Code, include this CDDL HEADER in each 14*4eaa4710SRishi Srivatsavai * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*4eaa4710SRishi Srivatsavai * If applicable, add the following below this CDDL HEADER, with the 16*4eaa4710SRishi Srivatsavai * fields enclosed by brackets "[]" replaced with your own identifying 17*4eaa4710SRishi Srivatsavai * information: Portions Copyright [yyyy] [name of copyright owner] 18*4eaa4710SRishi Srivatsavai * 19*4eaa4710SRishi Srivatsavai * CDDL HEADER END 20*4eaa4710SRishi Srivatsavai */ 21*4eaa4710SRishi Srivatsavai 22*4eaa4710SRishi Srivatsavai /* 23*4eaa4710SRishi Srivatsavai * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24*4eaa4710SRishi Srivatsavai * Use is subject to license terms. 25*4eaa4710SRishi Srivatsavai */ 26*4eaa4710SRishi Srivatsavai 27*4eaa4710SRishi Srivatsavai #ifndef _NET_BRIDGE_H 28*4eaa4710SRishi Srivatsavai #define _NET_BRIDGE_H 29*4eaa4710SRishi Srivatsavai 30*4eaa4710SRishi Srivatsavai /* 31*4eaa4710SRishi Srivatsavai * Private communication interface between bridging related daemons and kernel 32*4eaa4710SRishi Srivatsavai * layer-two (Ethernet) bridging module. 33*4eaa4710SRishi Srivatsavai */ 34*4eaa4710SRishi Srivatsavai 35*4eaa4710SRishi Srivatsavai #include <sys/param.h> 36*4eaa4710SRishi Srivatsavai #include <sys/dld.h> 37*4eaa4710SRishi Srivatsavai #include <sys/dld_ioc.h> 38*4eaa4710SRishi Srivatsavai #include <sys/ethernet.h> 39*4eaa4710SRishi Srivatsavai 40*4eaa4710SRishi Srivatsavai #ifdef __cplusplus 41*4eaa4710SRishi Srivatsavai extern "C" { 42*4eaa4710SRishi Srivatsavai #endif 43*4eaa4710SRishi Srivatsavai 44*4eaa4710SRishi Srivatsavai /* Specified by IEEE 802.1d */ 45*4eaa4710SRishi Srivatsavai #define BRIDGE_GROUP_ADDRESS { 0x01, 0x80, 0xC2, 0, 0, 0 } 46*4eaa4710SRishi Srivatsavai 47*4eaa4710SRishi Srivatsavai /* The constant below is "BRG" in hex. */ 48*4eaa4710SRishi Srivatsavai #define _BRIOC(n) (0x42524700 + (n)) 49*4eaa4710SRishi Srivatsavai 50*4eaa4710SRishi Srivatsavai #define BRIOC_NEWBRIDGE _BRIOC(1) /* Create bridge; bridge_newbridge_t */ 51*4eaa4710SRishi Srivatsavai #define BRIOC_ADDLINK _BRIOC(2) /* Add link to bridge; linkid+name */ 52*4eaa4710SRishi Srivatsavai #define BRIOC_REMLINK _BRIOC(3) /* Remove link from bridge; linkid */ 53*4eaa4710SRishi Srivatsavai #define BRIOC_SETSTATE _BRIOC(4) /* bridge_setstate_t */ 54*4eaa4710SRishi Srivatsavai #define BRIOC_SETPVID _BRIOC(5) /* bridge_setpvid_t */ 55*4eaa4710SRishi Srivatsavai #define BRIOC_VLANENAB _BRIOC(6) /* bridge_vlanenab_t */ 56*4eaa4710SRishi Srivatsavai #define BRIOC_FLUSHFWD _BRIOC(7) /* bridge_flushfwd_t */ 57*4eaa4710SRishi Srivatsavai #define BRIOC_LISTFWD _BRIOC(8) /* bridge_listfwd_t */ 58*4eaa4710SRishi Srivatsavai #define BRIOC_TABLEMAX _BRIOC(8) /* uint32_t */ 59*4eaa4710SRishi Srivatsavai 60*4eaa4710SRishi Srivatsavai #define BRIDGE_CTL "bridgectl" 61*4eaa4710SRishi Srivatsavai #define BRIDGE_CTLPATH "/dev/" BRIDGE_CTL 62*4eaa4710SRishi Srivatsavai 63*4eaa4710SRishi Srivatsavai typedef struct bridge_newbridge_s { 64*4eaa4710SRishi Srivatsavai datalink_id_t bnb_linkid; /* bridge link ID */ 65*4eaa4710SRishi Srivatsavai char bnb_name[MAXNAMELEN]; /* bridge name */ 66*4eaa4710SRishi Srivatsavai } bridge_newbridge_t; 67*4eaa4710SRishi Srivatsavai 68*4eaa4710SRishi Srivatsavai typedef enum bridge_state_e { 69*4eaa4710SRishi Srivatsavai BLS_BLOCKLISTEN, /* blocking or listening state */ 70*4eaa4710SRishi Srivatsavai BLS_LEARNING, /* learning state */ 71*4eaa4710SRishi Srivatsavai BLS_FORWARDING /* forwarding state */ 72*4eaa4710SRishi Srivatsavai } bridge_state_t; 73*4eaa4710SRishi Srivatsavai 74*4eaa4710SRishi Srivatsavai typedef struct bridge_setstate_s { 75*4eaa4710SRishi Srivatsavai datalink_id_t bss_linkid; 76*4eaa4710SRishi Srivatsavai bridge_state_t bss_state; 77*4eaa4710SRishi Srivatsavai } bridge_setstate_t; 78*4eaa4710SRishi Srivatsavai 79*4eaa4710SRishi Srivatsavai typedef struct bridge_setpvid_s { 80*4eaa4710SRishi Srivatsavai datalink_id_t bsv_linkid; 81*4eaa4710SRishi Srivatsavai uint_t bsv_vlan; 82*4eaa4710SRishi Srivatsavai } bridge_setpvid_t; 83*4eaa4710SRishi Srivatsavai 84*4eaa4710SRishi Srivatsavai typedef struct bridge_vlanenab_s { 85*4eaa4710SRishi Srivatsavai datalink_id_t bve_linkid; 86*4eaa4710SRishi Srivatsavai uint_t bve_vlan; 87*4eaa4710SRishi Srivatsavai boolean_t bve_onoff; 88*4eaa4710SRishi Srivatsavai } bridge_vlanenab_t; 89*4eaa4710SRishi Srivatsavai 90*4eaa4710SRishi Srivatsavai typedef struct bridge_flushfwd_s { 91*4eaa4710SRishi Srivatsavai datalink_id_t bff_linkid; 92*4eaa4710SRishi Srivatsavai boolean_t bff_exclude; 93*4eaa4710SRishi Srivatsavai } bridge_flushfwd_t; 94*4eaa4710SRishi Srivatsavai 95*4eaa4710SRishi Srivatsavai typedef struct bridge_listfwd_s { 96*4eaa4710SRishi Srivatsavai char blf_name[MAXNAMELEN]; /* bridge name */ 97*4eaa4710SRishi Srivatsavai ether_addr_t blf_dest; 98*4eaa4710SRishi Srivatsavai uint16_t blf_trill_nick; 99*4eaa4710SRishi Srivatsavai uint_t blf_ms_age; 100*4eaa4710SRishi Srivatsavai boolean_t blf_is_local; 101*4eaa4710SRishi Srivatsavai datalink_id_t blf_linkid; 102*4eaa4710SRishi Srivatsavai } bridge_listfwd_t; 103*4eaa4710SRishi Srivatsavai 104*4eaa4710SRishi Srivatsavai /* Upward control messages */ 105*4eaa4710SRishi Srivatsavai typedef struct bridge_ctl_s { 106*4eaa4710SRishi Srivatsavai datalink_id_t bc_linkid; 107*4eaa4710SRishi Srivatsavai boolean_t bc_failed; /* Max SDU mismatch */ 108*4eaa4710SRishi Srivatsavai } bridge_ctl_t; 109*4eaa4710SRishi Srivatsavai 110*4eaa4710SRishi Srivatsavai /* GLDv3 control ioctls used by Bridging */ 111*4eaa4710SRishi Srivatsavai #define BRIDGE_IOC_LISTFWD BRIDGEIOC(1) 112*4eaa4710SRishi Srivatsavai 113*4eaa4710SRishi Srivatsavai #ifdef __cplusplus 114*4eaa4710SRishi Srivatsavai } 115*4eaa4710SRishi Srivatsavai #endif 116*4eaa4710SRishi Srivatsavai 117*4eaa4710SRishi Srivatsavai #endif /* _NET_BRIDGE_H */ 118