summaryrefslogtreecommitdiff
path: root/cesar/cp2/cco/action/action.h
diff options
context:
space:
mode:
Diffstat (limited to 'cesar/cp2/cco/action/action.h')
-rw-r--r--cesar/cp2/cco/action/action.h179
1 files changed, 179 insertions, 0 deletions
diff --git a/cesar/cp2/cco/action/action.h b/cesar/cp2/cco/action/action.h
new file mode 100644
index 0000000000..3d2247394a
--- /dev/null
+++ b/cesar/cp2/cco/action/action.h
@@ -0,0 +1,179 @@
+#ifndef cp_cco_action_action_h
+#define cp_cco_action_action_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2008 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/cco/action/action.h
+ * \brief actions of CCo responsability
+ * \ingroup cp_cco
+ *
+ * CCo action module implements actions of CCo responsability
+ * manage SNID "collisions" (if SNID conflict, a new SNID value shall be chosen)
+ * manage TEI leases (create, suppress, expire)
+ * manage sta association
+ * manage authentication with relevant keys (NEK, NMK) and security-level
+ * in 1st step/version, each sta generates the default NMK from own NPW
+ * (the NMK is used to belong to a given AVLN where all STAs and the CCo
+ * have the same NMK) and the CCo in a given AVLN generates a NEK key
+ * and sends it to stations which perform authentication steps.
+ *
+ * Initialisation of SNID & management of SNID conflicts (section 4.4.1.4 in HP_AV spec)
+ * Le SNID est prévu comme étant une représentation "raccourcie" du NID d'un AVLN
+ * devant également permettre de faire la distinction entre 2 AVLNs ayant des NMKs
+ * respectives différentes mais qui auraient un NID identique (un NID étant
+ * obtenu par hachage SHA256 de NMK, le hachage de 2 NMKs différentes peut
+ * produire un même NID, même si ce cas de figure est statistiquement improbable).
+ * Dans le cas d'un NID identique pour 2 AVLNs ayant chacun une NMK respective
+ * différente de celle de l'autre AVLN, il faut alors un SNID différent pour chacun
+ * des 2 AVLNs.
+ * Une CCo "1" qui détecterait un SNID identique au sien (arrivée d'un Central Beacon
+ * d'une autre CCo "2", donc d'un autre AVLN, avec SNID identique) doit choisir
+ * un autre SNID.
+ * Le SNID qui était en double doit être marqué comme utilisé et la CCo "1" peut
+ * finalement choisir une autre valeur de SNID parmi les SNIDs non utilisés
+ * sur les 16 SNIDs possibles (le SNID est un entier sur 4 bits).
+ * Le choix initial du SNID lorsqu'une station (un équipement) HP_AV s'initialise
+ * puis passe à l'état "Unassociated CCo" ou "CCo" sera un tirage aléatoire entre
+ * 0 inclus et 15 inclus, ce qui permet de diminuer le risque de doublon de SNID
+ * entre les UCCo et CCo sur le même réseau Power-Line au démarrage (mise en route
+ * du secteur avec des équipements fixes connectés, ou branchement d'un ou plusieurs
+ * nouveaux équipements configurés avec un NPW différent de celui des autres équipements
+ * déjà présents, par exemple)
+ * La valeur initiale du SNID ou une nouvelle valeur du SNID déterminée/choisie
+ * après détection d'un conflit de SNID doit être recopiée dans la structure
+ * mac_config pour être rendue disponible dans les couches du Data-Plane qui
+ * utilisent le SNID. Un mécanisme approprié d'activation temporisée d'une nouvelle
+ * valeur du SNID soit être prévu
+ */
+
+BEGIN_DECLS
+
+/**
+ * initialisation of CCo action module.
+ *
+ * \param ctx control plane context
+ */
+void
+cp_cco_action_init(cp_t *ctx);
+
+/**
+ * initialisation of "SNID in use" flags.
+ *
+ * \param ctx control plane context
+ */
+void
+cp_cco_action_reset_snid_flags(cp_t *ctx);
+
+/**
+ * check against SNID conflict.
+ *
+ * \param ctx control plane context
+ *
+ * \return true if SNID conflict, else false
+ *
+ * if the SNID value in argument is in conflict, it is flagged
+ * as already used in the SNID flags
+ */
+bool
+cp_cco_action_check_snid_conflict(cp_t *ctx, snid_t snid);
+
+/**
+ * choose a new SNID value.
+ *
+ * \param ctx control plane context
+ * \param p_snid pointer to return new snid value chosen
+ *
+ * \return false if new SNID could not be chosen, else true
+ *
+ * \todo what to do if new SNID could not be chosen?
+ *
+ * WARNING La valeur initiale du SNID ou une nouvelle valeur du SNID déterminée/choisie
+ * après détection d'un conflit de SNID doit être recopiée dans la structure
+ * mac_config pour être rendue disponible dans les couches du Data-Plane qui
+ * utilisent le SNID. Un mécanisme approprié d'activation temporisée d'une nouvelle
+ * valeur du SNID soit être prévu
+ */
+bool
+cp_cco_action_choose_new_snid(cp_t *ctx, snid_t *p_snid);
+
+
+/**
+ * get a (first) random SNID value.
+ *
+ * \param ctx control plane context
+ *
+ * \return random SNID value between 0 and 15
+ *
+ * WARNING La valeur initiale du SNID doit être recopiée dans la structure
+ * mac_config pour être rendue disponible dans les couches du Data-Plane qui
+ * utilisent le SNID.
+ */
+snid_t
+cp_cco_action_get_random_snid(cp_t *ctx);
+
+/**
+ * create a TEI lease.
+ *
+ * \param ctx control plane context
+ * \param p_tei pointer to return new TEI lease
+ *
+ * \return false if TEI lease creation failed, else true
+ */
+bool
+cp_cco_action_create_tei_lease(cp_t *ctx, tei_t *p_tei);
+
+/**
+ * check for TEI lease expiration.
+ *
+ * \param ctx control plane context
+ * \param p_tei pointer to TEI lease to be checked
+ *
+ * \return true if TEI lease expired, else false
+ */
+bool
+cp_cco_action_check_tei_lease(cp_t *ctx, tei_t *p_tei);
+
+/**
+ * remove a TEI lease.
+ *
+ * \param ctx control plane context
+ * \param p_tei pointer to TEI lease to be removed
+ *
+ * \return false if removing TEI lease failed, else true
+ */
+bool
+cp_cco_action_remove_tei_lease(cp_t *ctx, tei_t *p_tei);
+
+/**
+ * generate a new NEK value.
+ *
+ * \param ctx control plane context
+ * \param sl security level
+ *
+ * \return generated nek value
+ */
+nek_t
+cp_cco_action_gen_nek(cp_t *ctx, u8 sl);
+
+/**
+ * manage association of a station.
+ *
+ * \param ctx control plane context
+ */
+void cp_cco_action_manage_sta_assoc(cp_t *ctx);
+
+/**
+ * manage authentication of a station.
+ *
+ * \param ctx control plane context
+ */
+void cp_cco_action_manage_sta_auth(cp_t *ctx);
+
+END_DECLS
+
+#endif /* cp_cco_action_action_h */