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>