Return to encodings.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libcharon / encoding / payloads |
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_ @}*/