/** Load module. */ static int mod_load(lua_State *L) { /* Check parameters */ int n = lua_gettop(L); if (n != 1 || !lua_isstring(L, 1)) { format_error(L, "expected 'load(string name)'"); lua_error(L); } /* Parse precedence declaration */ auto_free char *declaration = strdup(lua_tostring(L, 1)); if (!declaration) { return kr_error(ENOMEM); } const char *name = strtok(declaration, " "); const char *precedence = strtok(NULL, " "); const char *ref = strtok(NULL, " "); /* Load engine module */ struct engine *engine = engine_luaget(L); int ret = engine_register(engine, name, precedence, ref); if (ret != 0) { if (ret == kr_error(EIDRM)) { format_error(L, "referenced module not found"); } else { format_error(L, kr_strerror(ret)); } lua_error(L); } lua_pushboolean(L, 1); return 1; }
static int init_resolver(struct engine *engine) { /* Open resolution context */ engine->resolver.trust_anchors = map_make(); engine->resolver.negative_anchors = map_make(); engine->resolver.pool = engine->pool; engine->resolver.modules = &engine->modules; /* Create OPT RR */ engine->resolver.opt_rr = mm_alloc(engine->pool, sizeof(knot_rrset_t)); if (!engine->resolver.opt_rr) { return kr_error(ENOMEM); } knot_edns_init(engine->resolver.opt_rr, KR_EDNS_PAYLOAD, 0, KR_EDNS_VERSION, engine->pool); /* Set default root hints */ kr_zonecut_init(&engine->resolver.root_hints, (const uint8_t *)"", engine->pool); kr_zonecut_set_sbelt(&engine->resolver, &engine->resolver.root_hints); /* Open NS rtt + reputation cache */ engine->resolver.cache_rtt = mm_alloc(engine->pool, lru_size(kr_nsrep_lru_t, LRU_RTT_SIZE)); if (engine->resolver.cache_rtt) { lru_init(engine->resolver.cache_rtt, LRU_RTT_SIZE); } engine->resolver.cache_rep = mm_alloc(engine->pool, lru_size(kr_nsrep_lru_t, LRU_REP_SIZE)); if (engine->resolver.cache_rep) { lru_init(engine->resolver.cache_rep, LRU_REP_SIZE); } /* Load basic modules */ engine_register(engine, "iterate", NULL, NULL); engine_register(engine, "validate", NULL, NULL); engine_register(engine, "rrcache", NULL, NULL); engine_register(engine, "pktcache", NULL, NULL); /* Initialize storage backends */ struct storage_api lmdb = { "lmdb://", knot_db_lmdb_api, knot_db_lmdb_mkopts }; return array_push(engine->storage_registry, lmdb); }
static int ioctl_engine_open(struct drm_device *dev, void *data, struct drm_file *file) { struct dce_file_priv *priv = omap_drm_file_priv(file, dce_mapper_id); struct drm_omap_dce_engine_open *arg = data; struct dce_rpc_engine_open_rsp *rsp; int ret; /* if we are not re-starting a syscall, send req */ if (!arg->token) { struct dce_rpc_engine_open_req req = { .hdr = MKHDR(ENGINE_OPEN), }; strncpy(req.name, arg->name, sizeof(req.name)); ret = rpsend(priv, &arg->token, hdr(&req), sizeof(req)); if (ret) return ret; } /* then wait for reply, which is interruptible */ ret = rpwait(priv, arg->token, hdr(&rsp), sizeof(*rsp)); if (ret) return ret; arg->eng_handle = engine_register(priv, rsp->engine); arg->error_code = rsp->error_code; if (!engine_valid(priv, arg->eng_handle)) { engine_close(priv, rsp->engine); ret = -ENOMEM; } kfree(rsp); return ret; }