/*
 * Copyright 2013 Tresys Technology, LLC. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *    1. Redistributions of source code must retain the above copyright notice,
 *       this list of conditions and the following disclaimer.
 * 
 *    2. Redistributions in binary form must reproduce the above copyright notice,
 *       this list of conditions and the following disclaimer in the documentation
 *       and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 * EVENT SHALL TRESYS TECHNOLOGY, LLC OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * The views and conclusions contained in the software and documentation are those
 * of the authors and should not be interpreted as representing official policies,
 * either expressed or implied, of Tresys Technology, LLC.
 */

#ifndef CIL_FLAVOR_H_
#define CIL_FLAVOR_H_

/*
	Tree/list node types
*/
#define CIL_MIN_OP_OPERANDS 1000
#define CIL_MIN_DECLARATIVE 2000

enum cil_flavor {
	CIL_NONE = 0,
	CIL_ROOT,
	CIL_NODE,
	CIL_STRING,
	CIL_DATUM,
	CIL_LIST,
	CIL_LIST_ITEM,
	CIL_PARAM,
	CIL_ARGS,
	CIL_BLOCKINHERIT,
	CIL_BLOCKABSTRACT,
	CIL_IN,
	CIL_CALL,
	CIL_BOOLEANIF,
	CIL_TUNABLEIF,
	CIL_CONDBLOCK,
	CIL_CONDTRUE,
	CIL_CONDFALSE,
	CIL_CLASSORDER,
	CIL_CLASSCOMMON,
	CIL_CLASSMAPPING,
	CIL_CLASSPERMS,
	CIL_CLASSPERMS_SET,
	CIL_CLASSPERMISSIONSET,
	CIL_USERPREFIX,
	CIL_USERROLE,
	CIL_USERATTRIBUTESET,
	CIL_USERLEVEL,
	CIL_USERRANGE,
	CIL_USERBOUNDS,
	CIL_SELINUXUSER,
	CIL_SELINUXUSERDEFAULT,
	CIL_ROLEATTRIBUTESET,
	CIL_ROLETYPE,
	CIL_ROLEBOUNDS,
	CIL_TYPEATTRIBUTESET,
	CIL_EXPANDTYPEATTRIBUTE,
	CIL_TYPEALIASACTUAL,
	CIL_TYPEBOUNDS,
	CIL_TYPEPERMISSIVE,
	CIL_SENSALIASACTUAL,
	CIL_SENSITIVITYORDER,
	CIL_SENSCAT,
	CIL_CATALIASACTUAL,
	CIL_CATORDER,
	CIL_SIDORDER,
	CIL_ROLEALLOW,
	CIL_AVRULE,
	CIL_AVRULEX,
	CIL_ROLETRANSITION,
	CIL_TYPE_RULE,
	CIL_NAMETYPETRANSITION,
	CIL_RANGETRANSITION,
	CIL_CONSTRAIN,
	CIL_MLSCONSTRAIN,
	CIL_VALIDATETRANS,
	CIL_MLSVALIDATETRANS,
	CIL_SIDCONTEXT,
	CIL_FSUSE,
	CIL_FILECON,
	CIL_PORTCON,
	CIL_NODECON,
	CIL_GENFSCON,
	CIL_NETIFCON,
	CIL_PIRQCON,
	CIL_IOMEMCON,
	CIL_IOPORTCON,
	CIL_PCIDEVICECON,
	CIL_DEVICETREECON,
	CIL_DEFAULTUSER,
	CIL_DEFAULTROLE,
	CIL_DEFAULTTYPE,
	CIL_DEFAULTRANGE,
	CIL_HANDLEUNKNOWN,
	CIL_MLS,
	CIL_SRC_INFO,
	CIL_IBPKEYCON,
	CIL_IBENDPORTCON,

/*
 *          boolean  constraint  set  catset
 *  dom                  X
 *  domby                X
 *  incomp               X
 *  eq         X         X
 *  ne         X         X
 *  and        X         X        X    X
 *  not        X         X        X    X
 *  or         X         X        X    X
 *  xor        X                  X    X
 *  all                           X    X
 *  range                              X
*/
	CIL_OP = CIL_MIN_OP_OPERANDS,
	CIL_ALL,
	CIL_AND,
	CIL_OR,
	CIL_XOR,
	CIL_NOT,
	CIL_EQ,
	CIL_NEQ,
	CIL_RANGE,
	CIL_CONS_DOM,
	CIL_CONS_DOMBY,
	CIL_CONS_INCOMP,
	CIL_CONS_OPERAND,
	CIL_CONS_U1,
	CIL_CONS_U2,
	CIL_CONS_U3,
	CIL_CONS_T1,
	CIL_CONS_T2,
	CIL_CONS_T3,
	CIL_CONS_R1,
	CIL_CONS_R2,
	CIL_CONS_R3,
	CIL_CONS_L1,
	CIL_CONS_L2,
	CIL_CONS_H1,
	CIL_CONS_H2,

	CIL_BLOCK = CIL_MIN_DECLARATIVE,
	CIL_MACRO,
	CIL_OPTIONAL,
	CIL_BOOL,
	CIL_TUNABLE,
	CIL_PERM,
	CIL_MAP_PERM,
	CIL_COMMON,
	CIL_CLASS,
	CIL_MAP_CLASS,
	CIL_CLASSPERMISSION,
	CIL_USER,
	CIL_USERATTRIBUTE,
	CIL_ROLE,
	CIL_ROLEATTRIBUTE,
	CIL_TYPE,
	CIL_TYPEATTRIBUTE,
	CIL_TYPEALIAS,
	CIL_SENS,
	CIL_SENSALIAS,
	CIL_CAT,
	CIL_CATSET,
	CIL_CATALIAS,
	CIL_LEVEL,
	CIL_LEVELRANGE,
	CIL_SID,
	CIL_NAME,
	CIL_CONTEXT,
	CIL_IPADDR,
	CIL_POLICYCAP,
	CIL_PERMISSIONX
};


#endif /* CIL_FLAVOR_H_ */