Annotation of embedaddon/strongswan/src/libcharon/encoding/payloads/encodings.h, revision 1.1

1.1     ! misho       1: /*
        !             2:  * Copyright (C) 2005-2006 Martin Willi
        !             3:  * Copyright (C) 2005 Jan Hutter
        !             4:  * HSR Hochschule fuer Technik Rapperswil
        !             5:  *
        !             6:  * This program is free software; you can redistribute it and/or modify it
        !             7:  * under the terms of the GNU General Public License as published by the
        !             8:  * Free Software Foundation; either version 2 of the License, or (at your
        !             9:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
        !            10:  *
        !            11:  * This program is distributed in the hope that it will be useful, but
        !            12:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            13:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
        !            14:  * for more details.
        !            15:  */
        !            16: 
        !            17: /**
        !            18:  * @defgroup encodings encodings
        !            19:  * @{ @ingroup payloads
        !            20:  */
        !            21: 
        !            22: #ifndef ENCODINGS_H_
        !            23: #define ENCODINGS_H_
        !            24: 
        !            25: typedef enum encoding_type_t encoding_type_t;
        !            26: typedef struct encoding_rule_t encoding_rule_t;
        !            27: 
        !            28: #include <library.h>
        !            29: 
        !            30: /**
        !            31:  * All different kinds of encoding types.
        !            32:  *
        !            33:  * Each field of an IKEv2-Message (in header or payload)
        !            34:  * which has to be parsed or generated differently has its own
        !            35:  * type defined here.
        !            36:  *
        !            37:  * Header is parsed like a payload and gets its one payload_id
        !            38:  * from PRIVATE USE space. Also the substructures
        !            39:  * of specific payload types get their own payload_id
        !            40:  * from PRIVATE_USE space. See IKEv2-Draft for more information.
        !            41:  */
        !            42: enum encoding_type_t {
        !            43: 
        !            44:        /**
        !            45:         * Representing a 4 Bit unsigned int value.
        !            46:         *
        !            47:         *
        !            48:         * When generating it must be changed from host to network order.
        !            49:         * The value is read from the associated data struct.
        !            50:         * The current write position is moved 4 bit forward afterwards.
        !            51:         *
        !            52:         * When parsing it must be changed from network to host order.
        !            53:         * The value is written to the associated data struct.
        !            54:         * The current read pointer is moved 4 bit forward afterwards.
        !            55:         */
        !            56:        U_INT_4,
        !            57: 
        !            58:        /**
        !            59:         * Representing a 8 Bit unsigned int value.
        !            60:         *
        !            61:         *
        !            62:         * When generating it must be changed from host to network order.
        !            63:         * The value is read from the associated data struct.
        !            64:         * The current write position is moved 8 bit forward afterwards.
        !            65:         *
        !            66:         * When parsing it must be changed from network to host order.
        !            67:         * The value is written to the associated data struct.
        !            68:         * The current read pointer is moved 8 bit forward afterwards.
        !            69:         */
        !            70:        U_INT_8,
        !            71: 
        !            72:        /**
        !            73:         * Representing a 16 Bit unsigned int value.
        !            74:         *
        !            75:         *
        !            76:         * When generating it must be changed from host to network order.
        !            77:         * The value is read from the associated data struct.
        !            78:         * The current write position is moved 16 bit forward afterwards.
        !            79:         *
        !            80:         * When parsing it must be changed from network to host order.
        !            81:         * The value is written to the associated data struct.
        !            82:         * The current read pointer is moved 16 bit forward afterwards.
        !            83:         */
        !            84:        U_INT_16,
        !            85: 
        !            86:        /**
        !            87:         * Representing a 32 Bit unsigned int value.
        !            88:         *
        !            89:         * When generating it must be changed from host to network order.
        !            90:         * The value is read from the associated data struct.
        !            91:         * The current write position is moved 32 bit forward afterwards.
        !            92:         *
        !            93:         * When parsing it must be changed from network to host order.
        !            94:         * The value is written to the associated data struct.
        !            95:         * The current read pointer is moved 32 bit forward afterwards.
        !            96:         */
        !            97:        U_INT_32,
        !            98: 
        !            99:        /**
        !           100:         * represents a RESERVED_BIT used in FLAG-Bytes.
        !           101:         *
        !           102:         * When generating, the next bit is set to zero and the current write
        !           103:         * position is moved one bit forward.
        !           104:         * No value is read from the associated data struct.
        !           105:         * The current write position is moved 1 bit forward afterwards.
        !           106:         *
        !           107:         * When parsing, the current read pointer is moved one bit forward.
        !           108:         * No value is written to the associated data struct.
        !           109:         * The current read pointer is moved 1 bit forward afterwards.
        !           110:         */
        !           111:        RESERVED_BIT,
        !           112: 
        !           113:        /**
        !           114:         * represents a RESERVED_BYTE.
        !           115:         *
        !           116:         * When generating, the next byte is set to zero and the current write
        !           117:         * position is moved one byte forward.
        !           118:         * No value is read from the associated data struct.
        !           119:         * The current write position is moved 1 byte forward afterwards.
        !           120:         *
        !           121:         * When parsing, the current read pointer is moved one byte forward.
        !           122:         * No value is written to the associated data struct.
        !           123:         * The current read pointer is moved 1 byte forward afterwards.
        !           124:         */
        !           125:        RESERVED_BYTE,
        !           126: 
        !           127:        /**
        !           128:         * Representing a 1 Bit flag.
        !           129:         *
        !           130:         * When generation, the next bit is set to 1 if the associated value
        !           131:         * in the data struct is TRUE, 0 otherwise. The current write position
        !           132:         * is moved 1 bit forward afterwards.
        !           133:         *
        !           134:         * When parsing, the next bit is read and stored in the associated data
        !           135:         * struct. 0 means FALSE, 1 means TRUE, The current read pointer
        !           136:         * is moved 1 bit forward afterwards
        !           137:         */
        !           138:        FLAG,
        !           139: 
        !           140:        /**
        !           141:         * Representing a length field of a payload.
        !           142:         *
        !           143:         * When generating it must be changed from host to network order.
        !           144:         * The value is read from the associated data struct.
        !           145:         * The current write position is moved 16 bit forward afterwards.
        !           146:         *
        !           147:         * When parsing it must be changed from network to host order.
        !           148:         * The value is written to the associated data struct.
        !           149:         * The current read pointer is moved 16 bit forward afterwards.
        !           150:         */
        !           151:        PAYLOAD_LENGTH,
        !           152: 
        !           153:        /**
        !           154:         * Representing a length field of a header.
        !           155:         *
        !           156:         * When generating it must be changed from host to network order.
        !           157:         * The value is read from the associated data struct.
        !           158:         * The current write position is moved 32 bit forward afterwards.
        !           159:         *
        !           160:         * When parsing it must be changed from network to host order.
        !           161:         * The value is written to the associated data struct.
        !           162:         * The current read pointer is moved 32 bit forward afterwards.
        !           163:         */
        !           164:        HEADER_LENGTH,
        !           165: 
        !           166:        /**
        !           167:         * Representing a spi size field.
        !           168:         *
        !           169:         * When generating it must be changed from host to network order.
        !           170:         * The value is read from the associated data struct.
        !           171:         * The current write position is moved 8 bit forward afterwards.
        !           172:         *
        !           173:         * When parsing it must be changed from network to host order.
        !           174:         * The value is written to the associated data struct.
        !           175:         * The current read pointer is moved 8 bit forward afterwards.
        !           176:         */
        !           177:        SPI_SIZE,
        !           178: 
        !           179:        /**
        !           180:         * Representing a spi field.
        !           181:         *
        !           182:         * When generating the content of the chunk pointing to
        !           183:         * is written.
        !           184:         *
        !           185:         * When parsing SPI_SIZE bytes are read and written into the chunk pointing to.
        !           186:         */
        !           187:        SPI,
        !           188: 
        !           189:        /**
        !           190:         * Representing a 1 Bit flag specifying the format of a transform attribute.
        !           191:         *
        !           192:         * When generation, the next bit is set to 1 if the associated value
        !           193:         * in the data struct is TRUE, 0 otherwise. The current write position
        !           194:         * is moved 1 bit forward afterwards.
        !           195:         *
        !           196:         * When parsing, the next bit is read and stored in the associated data
        !           197:         * struct. 0 means FALSE, 1 means TRUE, The current read pointer
        !           198:         * is moved 1 bit forward afterwards.
        !           199:         */
        !           200:        ATTRIBUTE_FORMAT,
        !           201: 
        !           202:        /**
        !           203:         * Representing a 15 Bit unsigned int value used as attribute type
        !           204:         * in an attribute transform.
        !           205:         *
        !           206:         *
        !           207:         * When generating it must be changed from host to network order.
        !           208:         * The value is read from the associated data struct.
        !           209:         * The current write position is moved 15 bit forward afterwards.
        !           210:         *
        !           211:         * When parsing it must be changed from network to host order.
        !           212:         * The value is written to the associated data struct.
        !           213:         * The current read pointer is moved 15 bit forward afterwards.
        !           214:         */
        !           215:        ATTRIBUTE_TYPE,
        !           216: 
        !           217:        /**
        !           218:         * Depending on the field of type ATTRIBUTE_FORMAT
        !           219:         * this field contains the length or the value of an transform attribute.
        !           220:         * Its stored in a 16 unsigned integer field.
        !           221:         *
        !           222:         * When generating it must be changed from host to network order.
        !           223:         * The value is read from the associated data struct.
        !           224:         * The current write position is moved 16 bit forward afterwards.
        !           225:         *
        !           226:         * When parsing it must be changed from network to host order.
        !           227:         * The value is written to the associated data struct.
        !           228:         * The current read pointer is moved 16 bit forward afterwards.
        !           229:         */
        !           230:        ATTRIBUTE_LENGTH_OR_VALUE,
        !           231: 
        !           232:        /**
        !           233:         * This field contains the length or the value of an configuration attribute.
        !           234:         * Its stored in a 16 unsigned integer field.
        !           235:         *
        !           236:         * When generating it must be changed from host to network order.
        !           237:         * The value is read from the associated data struct.
        !           238:         * The current write position is moved 16 bit forward afterwards.
        !           239:         *
        !           240:         * When parsing it must be changed from network to host order.
        !           241:         * The value is written to the associated data struct.
        !           242:         * The current read pointer is moved 16 bit forward afterwards.
        !           243:         */
        !           244:        ATTRIBUTE_LENGTH,
        !           245: 
        !           246:        /**
        !           247:         * Depending on the field of type ATTRIBUTE_FORMAT
        !           248:         * this field is available or missing and so parsed/generated
        !           249:         * or not parsed/not generated.
        !           250:         *
        !           251:         * When generating the content of the chunk pointing to
        !           252:         * is written.
        !           253:         *
        !           254:         * When parsing SPI_SIZE bytes are read and written into the chunk pointing to.
        !           255:         */
        !           256:        ATTRIBUTE_VALUE,
        !           257: 
        !           258:        /**
        !           259:         * Representing a Traffic selector type field.
        !           260:         *
        !           261:         * When generating it must be changed from host to network order.
        !           262:         * The value is read from the associated data struct.
        !           263:         * The current write position is moved 16 bit forward afterwards.
        !           264:         *
        !           265:         * When parsing it must be changed from network to host order.
        !           266:         * The value is written to the associated data struct.
        !           267:         * The current read pointer is moved 16 bit forward afterwards.
        !           268:         */
        !           269:        TS_TYPE,
        !           270: 
        !           271:        /**
        !           272:         * Representing an address field in a traffic selector.
        !           273:         *
        !           274:         * Depending on the last field of type TS_TYPE
        !           275:         * this field is either 4 or 16 byte long.
        !           276:         *
        !           277:         * When generating the content of the chunk pointing to
        !           278:         * is written.
        !           279:         *
        !           280:         * When parsing 4 or 16 bytes are read and written into the chunk pointing to.
        !           281:         */
        !           282:        ADDRESS,
        !           283: 
        !           284:        /**
        !           285:         * Representing a variable length byte field.
        !           286:         */
        !           287:        CHUNK_DATA,
        !           288: 
        !           289:        /**
        !           290:         * Representing an IKE_SPI field in an IKEv2 Header.
        !           291:         *
        !           292:         * When generating the value of the uint64_t pointing to
        !           293:         * is written (host and network order is not changed).
        !           294:         *
        !           295:         * When parsing 8 bytes are read and written into the uint64_t pointing to.
        !           296:         */
        !           297:        IKE_SPI,
        !           298: 
        !           299:        /**
        !           300:         * Representing an encrypted IKEv1 message.
        !           301:         */
        !           302:        ENCRYPTED_DATA,
        !           303: 
        !           304:        /**
        !           305:         * Representing a field containing a set of wrapped payloads.
        !           306:         *
        !           307:         * This type is not used directly, but as an offset to the wrapped payloads.
        !           308:         * The type of the wrapped payload is added to this encoding type.
        !           309:         *
        !           310:         * @note As payload types are added to this encoding type, it has
        !           311:         * to be the last in encoding_type_t.
        !           312:         */
        !           313:        PAYLOAD_LIST = 1000 /* no comma, read above! */
        !           314: };
        !           315: 
        !           316: /**
        !           317:  * enum name for encoding_type_t
        !           318:  */
        !           319: extern enum_name_t *encoding_type_names;
        !           320: 
        !           321: /**
        !           322:  * Rule how to en-/decode a payload field.
        !           323:  *
        !           324:  * An encoding rule is a mapping of a specific encoding type to
        !           325:  * a location in the data struct where the current field is stored to
        !           326:  * or read from.
        !           327:  * This rules are used by parser and generator.
        !           328:  */
        !           329: struct encoding_rule_t {
        !           330: 
        !           331:        /**
        !           332:         * Encoding type.
        !           333:         */
        !           334:        encoding_type_t type;
        !           335: 
        !           336:        /**
        !           337:         * Offset in the data struct.
        !           338:         *
        !           339:         * When parsing, data are written to this offset of the
        !           340:         * data struct.
        !           341:         *
        !           342:         * When generating, data are read from this offset in the
        !           343:         * data struct.
        !           344:         */
        !           345:        uint32_t offset;
        !           346: };
        !           347: 
        !           348: #endif /** ENCODINGS_H_ @}*/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>