*/ #include <openbsc/db.h> #include <openbsc/debug.h> #include <openbsc/auth.h> #include <openbsc/gsm_data.h> #include <osmocom/gsm/comp128.h> #include <osmocom/core/utils.h> #include <openssl/rand.h> #include <stdlib.h> const struct value_string auth_action_names[] = { OSMO_VALUE_STRING(AUTH_ERROR), OSMO_VALUE_STRING(AUTH_NOT_AVAIL), OSMO_VALUE_STRING(AUTH_DO_AUTH_THEN_CIPH), OSMO_VALUE_STRING(AUTH_DO_CIPH), OSMO_VALUE_STRING(AUTH_DO_AUTH), { 0, NULL } }; static int _use_xor(struct gsm_auth_info *ainfo, struct gsm_auth_tuple *atuple) { int i, l = ainfo->a3a8_ki_len; if ((l > A38_XOR_MAX_KEY_LEN) || (l < A38_XOR_MIN_KEY_LEN)) { LOGP(DMM, LOGL_ERROR, "Invalid XOR key (len=%d) %s\n", ainfo->a3a8_ki_len,
while (!llist_empty(&fi->proc.children)) { first_child = llist_entry(fi->proc.children.next, typeof(*first_child), proc.child); /* paranoia: do not loop forever */ if (first_child == last_seen_first_child) { LOGPFSMLSRC(fi, LOGL_ERROR, file, line, "Internal error while terminating child" " FSMs: a child FSM is stuck\n"); break; } last_seen_first_child = first_child; /* terminate child */ _osmo_fsm_inst_term(first_child, cause, data, file, line); } } const struct value_string osmo_fsm_term_cause_names[] = { OSMO_VALUE_STRING(OSMO_FSM_TERM_PARENT), OSMO_VALUE_STRING(OSMO_FSM_TERM_REQUEST), OSMO_VALUE_STRING(OSMO_FSM_TERM_REGULAR), OSMO_VALUE_STRING(OSMO_FSM_TERM_ERROR), OSMO_VALUE_STRING(OSMO_FSM_TERM_TIMEOUT), { 0, NULL } }; /*! @} */