Annotation of embedaddon/strongswan/src/libtnccs/tnc/imv/imv_manager.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2010-2013 Andreas Steffen
! 3: * HSR Hochschule fuer Technik Rapperswil
! 4: *
! 5: * This program is free software; you can redistribute it and/or modify it
! 6: * under the terms of the GNU General Public License as published by the
! 7: * Free Software Foundation; either version 2 of the License, or (at your
! 8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 9: *
! 10: * This program is distributed in the hope that it will be useful, but
! 11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 13: * for more details.
! 14: */
! 15:
! 16: /**
! 17: * @defgroup imv_manager imv_manager
! 18: * @{ @ingroup imv
! 19: */
! 20:
! 21: #ifndef IMV_MANAGER_H_
! 22: #define IMV_MANAGER_H_
! 23:
! 24: typedef struct imv_manager_t imv_manager_t;
! 25:
! 26: #include "imv.h"
! 27: #include "imv_recommendations.h"
! 28:
! 29: #include <library.h>
! 30:
! 31: /**
! 32: * The IMV manager controls all IMV instances.
! 33: */
! 34: struct imv_manager_t {
! 35:
! 36: /**
! 37: * Add an IMV instance
! 38: *
! 39: * @param imv IMV instance
! 40: * @return TRUE if initialization successful
! 41: */
! 42: bool (*add)(imv_manager_t *this, imv_t *imv);
! 43:
! 44: /**
! 45: * Remove an IMV instance from the list and return it
! 46: *
! 47: * @param id ID of IMV instance
! 48: * @return removed IMC instance
! 49: */
! 50: imv_t* (*remove)(imv_manager_t *this, TNC_IMVID id);
! 51:
! 52: /**
! 53: * Load and initialize an IMV as a dynamic library and add it to the list
! 54: *
! 55: * @param name name of the IMV to be loaded
! 56: * @param path path of the IMV dynamic library file
! 57: * @return TRUE if loading succeeded
! 58: */
! 59: bool (*load)(imv_manager_t *this, char *name, char *path);
! 60:
! 61: /**
! 62: * Load and initialize an IMV from a set of TNC IMC functions.
! 63: *
! 64: * @param name name of the IMV
! 65: * @param initialize TNC_IMV_InitializePointer
! 66: * @param notify_connection_change TNC_IMV_NotifyConnectionChangePointer
! 67: * @param receive_message TNC_IMV_ReceiveMessagePointer
! 68: * @param receive_message_long TNC_IMV_ReceiveMessageLongPointer
! 69: * @param solicit_recommendation TNC_IMV_SolicitRecommendationPointer
! 70: * @param batch_ending TNC_IMV_BatchEndingPointer
! 71: * @param terminate TNC_IMV_TerminatePointer
! 72: * @param provide_bind_function TNC_IMV_ProvideBindFunctionPointer
! 73: * @return TRUE if loading succeeded
! 74: */
! 75: bool (*load_from_functions)(imv_manager_t *this, char *name,
! 76: TNC_IMV_InitializePointer initialize,
! 77: TNC_IMV_NotifyConnectionChangePointer notify_connection_change,
! 78: TNC_IMV_ReceiveMessagePointer receive_message,
! 79: TNC_IMV_ReceiveMessageLongPointer receive_message_long,
! 80: TNC_IMV_SolicitRecommendationPointer solicit_recommendation,
! 81: TNC_IMV_BatchEndingPointer batch_ending,
! 82: TNC_IMV_TerminatePointer terminate,
! 83: TNC_IMV_ProvideBindFunctionPointer provide_bind_function);
! 84:
! 85: /**
! 86: * Check if an IMV with a given ID is registered with the IMV manager
! 87: *
! 88: * @param id ID of IMV instance
! 89: * @return TRUE if registered
! 90: */
! 91: bool (*is_registered)(imv_manager_t *this, TNC_IMVID id);
! 92:
! 93: /**
! 94: * Reserve an additional ID for an IMV
! 95: *
! 96: * @param id ID of IMV instance
! 97: * @param new_id reserved ID assigned to IMV
! 98: * @return TRUE if primary IMV ID was used
! 99: */
! 100: bool (*reserve_id)(imv_manager_t *this, TNC_IMVID id, TNC_UInt32 *new_id);
! 101:
! 102: /**
! 103: * Get the configured recommendation policy
! 104: *
! 105: * @return configured recommendation policy
! 106: */
! 107: recommendation_policy_t (*get_recommendation_policy)(imv_manager_t *this);
! 108:
! 109: /**
! 110: * Create an empty set of IMV recommendations and evaluations
! 111: *
! 112: * @return instance of a recommendations_t list
! 113: */
! 114: recommendations_t* (*create_recommendations)(imv_manager_t *this);
! 115:
! 116: /**
! 117: * Notify all IMV instances
! 118: *
! 119: * @param state communicate the state a connection has reached
! 120: */
! 121: void (*notify_connection_change)(imv_manager_t *this,
! 122: TNC_ConnectionID id,
! 123: TNC_ConnectionState state);
! 124:
! 125: /**
! 126: * Sets the supported message types reported by a given IMV
! 127: *
! 128: * @param id ID of reporting IMV
! 129: * @param supported_types list of messages type supported by IMV
! 130: * @param type_count number of supported message types
! 131: * @return TNC result code
! 132: */
! 133: TNC_Result (*set_message_types)(imv_manager_t *this,
! 134: TNC_IMVID id,
! 135: TNC_MessageTypeList supported_types,
! 136: TNC_UInt32 type_count);
! 137:
! 138: /**
! 139: * Sets the supported long message types reported by a given IMV
! 140: *
! 141: * @param id ID of reporting IMV
! 142: * @param supported_vids list of vendor IDs supported by IMV
! 143: * @param supported_subtypes list of messages type supported by IMV
! 144: * @param type_count number of supported message types
! 145: * @return TNC result code
! 146: */
! 147: TNC_Result (*set_message_types_long)(imv_manager_t *this,
! 148: TNC_IMVID id,
! 149: TNC_VendorIDList supported_vids,
! 150: TNC_MessageSubtypeList supported_subtypes,
! 151: TNC_UInt32 type_count);
! 152:
! 153: /**
! 154: * Solicit recommendations from IMVs that have not yet provided one
! 155: *
! 156: * @param id connection ID
! 157: */
! 158: void (*solicit_recommendation)(imv_manager_t *this, TNC_ConnectionID id);
! 159:
! 160: /**
! 161: * Delivers a message to interested IMVs.
! 162: *
! 163: * @param connection_id connection ID
! 164: * @param excl exclusive message flag
! 165: * @param msg message
! 166: * @param msg_len message length
! 167: * @param msg_vid message Vendor ID
! 168: * @param msg_subtype message subtype
! 169: * @param src_imc_id source IMC ID
! 170: * @param dst_imv_id destination IMV ID
! 171: */
! 172: void (*receive_message)(imv_manager_t *this,
! 173: TNC_ConnectionID connection_id,
! 174: bool excl,
! 175: TNC_BufferReference msg,
! 176: TNC_UInt32 msg_len,
! 177: TNC_VendorID msg_vid,
! 178: TNC_MessageSubtype msg_subtype,
! 179: TNC_UInt32 src_imc_id,
! 180: TNC_UInt32 dst_imv_id);
! 181:
! 182: /**
! 183: * Notify all IMVs that all IMC messages received in a batch have been
! 184: * delivered and this is the IMVs last chance to send a message in the
! 185: * batch of IMV messages currently being collected.
! 186: *
! 187: * @param id connection ID
! 188: */
! 189: void (*batch_ending)(imv_manager_t *this, TNC_ConnectionID id);
! 190:
! 191: /**
! 192: * Destroy an IMV manager and all its controlled instances.
! 193: */
! 194: void (*destroy)(imv_manager_t *this);
! 195: };
! 196:
! 197: #endif /** IMV_MANAGER_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>