1*3dec9fcdSqs /* 2*3dec9fcdSqs * CDDL HEADER START 3*3dec9fcdSqs * 4*3dec9fcdSqs * The contents of this file are subject to the terms of the 5*3dec9fcdSqs * Common Development and Distribution License (the "License"). 6*3dec9fcdSqs * You may not use this file except in compliance with the License. 7*3dec9fcdSqs * 8*3dec9fcdSqs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*3dec9fcdSqs * or http://www.opensolaris.org/os/licensing. 10*3dec9fcdSqs * See the License for the specific language governing permissions 11*3dec9fcdSqs * and limitations under the License. 12*3dec9fcdSqs * 13*3dec9fcdSqs * When distributing Covered Code, include this CDDL HEADER in each 14*3dec9fcdSqs * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*3dec9fcdSqs * If applicable, add the following below this CDDL HEADER, with the 16*3dec9fcdSqs * fields enclosed by brackets "[]" replaced with your own identifying 17*3dec9fcdSqs * information: Portions Copyright [yyyy] [name of copyright owner] 18*3dec9fcdSqs * 19*3dec9fcdSqs * CDDL HEADER END 20*3dec9fcdSqs */ 21*3dec9fcdSqs /* 22*3dec9fcdSqs * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23*3dec9fcdSqs * Use is subject to license terms. 24*3dec9fcdSqs */ 25*3dec9fcdSqs 26*3dec9fcdSqs #ifndef _SYS_HXGE_HXGE_FLOW_H 27*3dec9fcdSqs #define _SYS_HXGE_HXGE_FLOW_H 28*3dec9fcdSqs 29*3dec9fcdSqs #ifdef __cplusplus 30*3dec9fcdSqs extern "C" { 31*3dec9fcdSqs #endif 32*3dec9fcdSqs 33*3dec9fcdSqs #include <netinet/in.h> 34*3dec9fcdSqs #define S6_addr32 _S6_un._S6_u32 35*3dec9fcdSqs 36*3dec9fcdSqs typedef struct tcpip4_spec_s { 37*3dec9fcdSqs in_addr_t ip4src; 38*3dec9fcdSqs in_addr_t ip4dst; 39*3dec9fcdSqs in_port_t psrc; 40*3dec9fcdSqs in_port_t pdst; 41*3dec9fcdSqs } tcpip4_spec_t; 42*3dec9fcdSqs 43*3dec9fcdSqs typedef struct tcpip6_spec_s { 44*3dec9fcdSqs struct in6_addr ip6src; 45*3dec9fcdSqs struct in6_addr ip6dst; 46*3dec9fcdSqs in_port_t psrc; 47*3dec9fcdSqs in_port_t pdst; 48*3dec9fcdSqs } tcpip6_spec_t; 49*3dec9fcdSqs 50*3dec9fcdSqs typedef struct udpip4_spec_s { 51*3dec9fcdSqs in_addr_t ip4src; 52*3dec9fcdSqs in_addr_t ip4dst; 53*3dec9fcdSqs in_port_t psrc; 54*3dec9fcdSqs in_port_t pdst; 55*3dec9fcdSqs } udpip4_spec_t; 56*3dec9fcdSqs 57*3dec9fcdSqs typedef struct udpip6_spec_s { 58*3dec9fcdSqs struct in6_addr ip6src; 59*3dec9fcdSqs struct in6_addr ip6dst; 60*3dec9fcdSqs in_port_t psrc; 61*3dec9fcdSqs in_port_t pdst; 62*3dec9fcdSqs } udpip6_spec_t; 63*3dec9fcdSqs 64*3dec9fcdSqs typedef struct ahip4_spec_s { 65*3dec9fcdSqs in_addr_t ip4src; 66*3dec9fcdSqs in_addr_t ip4dst; 67*3dec9fcdSqs uint32_t spi; 68*3dec9fcdSqs } ahip4_spec_t; 69*3dec9fcdSqs 70*3dec9fcdSqs typedef struct ahip6_spec_s { 71*3dec9fcdSqs struct in6_addr ip6src; 72*3dec9fcdSqs struct in6_addr ip6dst; 73*3dec9fcdSqs uint32_t spi; 74*3dec9fcdSqs } ahip6_spec_t; 75*3dec9fcdSqs 76*3dec9fcdSqs typedef ahip4_spec_t espip4_spec_t; 77*3dec9fcdSqs typedef ahip6_spec_t espip6_spec_t; 78*3dec9fcdSqs 79*3dec9fcdSqs typedef struct rawip4_spec_s { 80*3dec9fcdSqs struct in6_addr ip4src; 81*3dec9fcdSqs struct in6_addr ip4dst; 82*3dec9fcdSqs uint8_t hdata[64]; 83*3dec9fcdSqs } rawip4_spec_t; 84*3dec9fcdSqs 85*3dec9fcdSqs typedef struct rawip6_spec_s { 86*3dec9fcdSqs struct in6_addr ip6src; 87*3dec9fcdSqs struct in6_addr ip6dst; 88*3dec9fcdSqs uint8_t hdata[64]; 89*3dec9fcdSqs } rawip6_spec_t; 90*3dec9fcdSqs 91*3dec9fcdSqs 92*3dec9fcdSqs typedef struct ether_spec_s { 93*3dec9fcdSqs uint16_t ether_type; 94*3dec9fcdSqs uint8_t frame_size; 95*3dec9fcdSqs uint8_t eframe[16]; 96*3dec9fcdSqs } ether_spec_t; 97*3dec9fcdSqs 98*3dec9fcdSqs 99*3dec9fcdSqs typedef struct ip_user_spec_s { 100*3dec9fcdSqs uint8_t id; 101*3dec9fcdSqs uint8_t ip_ver; 102*3dec9fcdSqs uint8_t proto; 103*3dec9fcdSqs uint8_t tos_mask; 104*3dec9fcdSqs uint8_t tos; 105*3dec9fcdSqs } ip_user_spec_t; 106*3dec9fcdSqs 107*3dec9fcdSqs typedef ether_spec_t arpip_spec_t; 108*3dec9fcdSqs typedef ether_spec_t ether_user_spec_t; 109*3dec9fcdSqs 110*3dec9fcdSqs typedef struct flow_spec_s { 111*3dec9fcdSqs uint32_t flow_type; 112*3dec9fcdSqs union { 113*3dec9fcdSqs tcpip4_spec_t tcpip4spec; 114*3dec9fcdSqs tcpip6_spec_t tcpip6spec; 115*3dec9fcdSqs udpip4_spec_t udpip4spec; 116*3dec9fcdSqs udpip6_spec_t udpip6spec; 117*3dec9fcdSqs arpip_spec_t arpipspec; 118*3dec9fcdSqs ahip4_spec_t ahip4spec; 119*3dec9fcdSqs ahip6_spec_t ahip6spec; 120*3dec9fcdSqs espip4_spec_t espip4spec; 121*3dec9fcdSqs espip6_spec_t espip6spec; 122*3dec9fcdSqs rawip4_spec_t rawip4spec; 123*3dec9fcdSqs rawip6_spec_t rawip6spec; 124*3dec9fcdSqs ether_spec_t etherspec; 125*3dec9fcdSqs ip_user_spec_t ip_usr_spec; 126*3dec9fcdSqs uint8_t hdata[64]; 127*3dec9fcdSqs } uh, um; /* entry, mask */ 128*3dec9fcdSqs } flow_spec_t; 129*3dec9fcdSqs 130*3dec9fcdSqs #define FSPEC_TCPIP4 0x1 /* TCP/IPv4 Flow */ 131*3dec9fcdSqs #define FSPEC_TCPIP6 0x2 /* TCP/IPv6 */ 132*3dec9fcdSqs #define FSPEC_UDPIP4 0x3 /* UDP/IPv4 */ 133*3dec9fcdSqs #define FSPEC_UDPIP6 0x4 /* UDP/IPv6 */ 134*3dec9fcdSqs #define FSPEC_ARPIP 0x5 /* ARP/IPv4 */ 135*3dec9fcdSqs #define FSPEC_AHIP4 0x6 /* AH/IP4 */ 136*3dec9fcdSqs #define FSPEC_AHIP6 0x7 /* AH/IP6 */ 137*3dec9fcdSqs #define FSPEC_ESPIP4 0x8 /* ESP/IP4 */ 138*3dec9fcdSqs #define FSPEC_ESPIP6 0x9 /* ESP/IP6 */ 139*3dec9fcdSqs #define FSPEC_SCTPIP4 0xA /* ESP/IP4 */ 140*3dec9fcdSqs #define FSPEC_SCTPIP6 0xB /* ESP/IP6 */ 141*3dec9fcdSqs #define FSPEC_RAW4 0xC /* RAW/IP4 */ 142*3dec9fcdSqs #define FSPEC_RAW6 0xD /* RAW/IP6 */ 143*3dec9fcdSqs #define FSPEC_ETHER 0xE /* ETHER Programmable */ 144*3dec9fcdSqs #define FSPEC_IP_USR 0xF /* IP Programmable */ 145*3dec9fcdSqs #define FSPEC_HDATA 0x10 /* Pkt Headers eth-da,sa,etype,ip,tcp(Bitmap) */ 146*3dec9fcdSqs 147*3dec9fcdSqs 148*3dec9fcdSqs #define TCAM_IPV6_ADDR(m32, ip6addr) { \ 149*3dec9fcdSqs m32[0] = ip6addr.S6_addr32[0]; \ 150*3dec9fcdSqs m32[1] = ip6addr.S6_addr32[1]; \ 151*3dec9fcdSqs m32[2] = ip6addr.S6_addr32[2]; \ 152*3dec9fcdSqs m32[3] = ip6addr.S6_addr32[3]; \ 153*3dec9fcdSqs } 154*3dec9fcdSqs 155*3dec9fcdSqs 156*3dec9fcdSqs #define TCAM_IPV4_ADDR(m32, ip4addr) (m32 = ip4addr) 157*3dec9fcdSqs #define TCAM_IP_PORTS(port32, dp, sp) (port32 = dp | (sp << 16)) 158*3dec9fcdSqs #define TCAM_IP_CLASS(key, mask, class) { \ 159*3dec9fcdSqs key = class; \ 160*3dec9fcdSqs mask = 0x1f; \ 161*3dec9fcdSqs } 162*3dec9fcdSqs 163*3dec9fcdSqs #define TCAM_IP_PROTO(key, mask, proto) { \ 164*3dec9fcdSqs key = proto; \ 165*3dec9fcdSqs mask = 0xff; \ 166*3dec9fcdSqs } 167*3dec9fcdSqs 168*3dec9fcdSqs 169*3dec9fcdSqs typedef struct flow_resource_s { 170*3dec9fcdSqs uint64_t channel_cookie; 171*3dec9fcdSqs uint64_t flow_cookie; 172*3dec9fcdSqs uint8_t tcam_location; 173*3dec9fcdSqs flow_spec_t flow_spec; 174*3dec9fcdSqs } flow_resource_t; 175*3dec9fcdSqs 176*3dec9fcdSqs #ifdef __cplusplus 177*3dec9fcdSqs } 178*3dec9fcdSqs #endif 179*3dec9fcdSqs 180*3dec9fcdSqs #endif /* _SYS_HXGE_HXGE_FLOW_H */ 181