Lines Matching defs:mgr

90 purge_old_interfaces(ns_interfacemgr_t *mgr);
93 clearlistenon(ns_interfacemgr_t *mgr);
96 need_rescan(ns_interfacemgr_t *mgr, struct MSGHDR *rtm, size_t len) {
102 UNUSED(mgr);
140 LOCK(&mgr->lock);
141 for (ifp = ISC_LIST_HEAD(mgr->interfaces);
166 UNLOCK(&mgr->lock);
204 ns_interfacemgr_t *mgr = (ns_interfacemgr_t *)arg;
226 ns_interfacemgr_routedisconnect(mgr);
240 isc_nmhandle_detach(&mgr->route);
241 ns_interfacemgr_detach(&mgr);
246 REQUIRE(mgr->route != NULL);
248 if (need_rescan(mgr, rtm, rtmlen) && mgr->sctx->interface_auto) {
249 ns_interfacemgr_scan(mgr, false, false);
252 isc_nm_read(handle, route_recv, mgr);
258 ns_interfacemgr_t *mgr = (ns_interfacemgr_t *)arg;
264 ns_interfacemgr_detach(&mgr);
268 INSIST(mgr->route == NULL);
270 isc_nmhandle_attach(handle, &mgr->route);
271 isc_nm_read(handle, route_recv, mgr);
280 ns_interfacemgr_t *mgr = NULL;
286 mgr = isc_mem_get(mctx, sizeof(*mgr));
287 *mgr = (ns_interfacemgr_t){
295 isc_mem_attach(mctx, &mgr->mctx);
296 ns_server_attach(sctx, &mgr->sctx);
298 isc_mutex_init(&mgr->lock);
300 atomic_init(&mgr->shuttingdown, false);
302 ISC_LIST_INIT(mgr->interfaces);
303 ISC_LIST_INIT(mgr->listenon);
308 result = ns_listenlist_create(mctx, &mgr->listenon4);
312 ns_listenlist_attach(mgr->listenon4, &mgr->listenon6);
314 dns_aclenv_create(mctx, &mgr->aclenv);
316 mgr->aclenv->geoip = geoip;
321 isc_refcount_init(&mgr->references, 1);
322 mgr->magic = IFMGR_MAGIC;
323 *mgrp = mgr;
325 mgr->clientmgrs = isc_mem_cget(mgr->mctx, mgr->ncpus,
326 sizeof(mgr->clientmgrs[0]));
327 for (size_t i = 0; i < mgr->ncpus; i++) {
328 result = ns_clientmgr_create(mgr->sctx, mgr->loopmgr,
329 mgr->aclenv, (int)i,
330 &mgr->clientmgrs[i]);
337 isc_mutex_destroy(&mgr->lock);
338 ns_server_detach(&mgr->sctx);
339 isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
344 ns_interfacemgr_routeconnect(ns_interfacemgr_t *mgr) {
345 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
348 if (mgr->route != NULL) {
352 ns_interfacemgr_ref(mgr);
354 isc_result_t result = isc_nm_routeconnect(mgr->nm, route_connected,
355 mgr);
360 ns_interfacemgr_unref(mgr);
365 ns_interfacemgr_routedisconnect(ns_interfacemgr_t *mgr) {
366 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
369 if (mgr->route == NULL) {
373 isc_nmhandle_close(mgr->route);
374 isc_nmhandle_detach(&mgr->route);
375 ns_interfacemgr_detach(&mgr);
379 ns_interfacemgr__destroy(ns_interfacemgr_t *mgr) {
380 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
382 isc_refcount_destroy(&mgr->references);
384 dns_aclenv_detach(&mgr->aclenv);
385 ns_listenlist_detach(&mgr->listenon4);
386 ns_listenlist_detach(&mgr->listenon6);
387 clearlistenon(mgr);
388 isc_mutex_destroy(&mgr->lock);
389 for (size_t i = 0; i < mgr->ncpus; i++) {
390 ns_clientmgr_detach(&mgr->clientmgrs[i]);
392 isc_mem_cput(mgr->mctx, mgr->clientmgrs, mgr->ncpus,
393 sizeof(mgr->clientmgrs[0]));
395 if (mgr->sctx != NULL) {
396 ns_server_detach(&mgr->sctx);
398 mgr->magic = 0;
399 isc_mem_putanddetach(&mgr->mctx, mgr, sizeof(*mgr));
403 ns_interfacemgr_setbacklog(ns_interfacemgr_t *mgr, int backlog) {
404 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
405 LOCK(&mgr->lock);
406 mgr->backlog = backlog;
407 UNLOCK(&mgr->lock);
411 ns_interfacemgr_getaclenv(ns_interfacemgr_t *mgr) {
414 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
416 LOCK(&mgr->lock);
417 aclenv = mgr->aclenv;
418 UNLOCK(&mgr->lock);
426 ns_interfacemgr_shutdown(ns_interfacemgr_t *mgr) {
427 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
434 mgr->generation++;
435 atomic_store(&mgr->shuttingdown, true);
437 purge_old_interfaces(mgr);
439 if (mgr->route != NULL) {
440 isc_nm_cancelread(mgr->route);
443 for (size_t i = 0; i < mgr->ncpus; i++) {
444 ns_clientmgr_shutdown(mgr->clientmgrs[i]);
449 ns_interface_create(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr,
454 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
456 ifp = isc_mem_get(mgr->mctx, sizeof(*ifp));
457 *ifp = (ns_interface_t){ .generation = mgr->generation,
473 ns_interfacemgr_attach(mgr, &ifp->mgr);
476 LOCK(&mgr->lock);
477 ISC_LIST_APPEND(mgr->interfaces, ifp, link);
478 UNLOCK(&mgr->lock);
489 result = isc_nm_listenudp(ifp->mgr->nm, ISC_NM_LISTEN_ALL,
494 result = isc_nm_listenproxyudp(ifp->mgr->nm, ISC_NM_LISTEN_ALL,
506 ifp->mgr->nm, ISC_NM_LISTEN_ALL, &ifp->addr, ns_client_request,
507 ifp, ns__client_tcpconn, ifp, ifp->mgr->backlog,
508 &ifp->mgr->sctx->tcpquota, NULL, proxy, &ifp->tcplistensocket);
540 ifp->mgr->nm, ISC_NM_LISTEN_ALL, &ifp->addr, ns_client_request,
541 ifp, ns__client_tcpconn, ifp, ifp->mgr->backlog,
542 &ifp->mgr->sctx->tcpquota, sslctx, proxy,
595 epset = isc_nm_http_endpoints_new(ifp->mgr->mctx);
600 quota = isc_mem_get(ifp->mgr->mctx, sizeof(*quota));
603 ifp->mgr->nm, ISC_NM_LISTEN_ALL, &ifp->addr,
604 ifp->mgr->backlog, quota, sslctx, epset,
613 isc_mem_put(ifp->mgr->mctx, quota, sizeof(*quota));
616 ns_server_append_http_quota(ifp->mgr->sctx, quota);
660 interface_setup(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr, const char *name,
672 ns_interface_create(mgr, addr, name, &ifp);
675 LOCK(&mgr->lock);
676 ifp->generation = mgr->generation;
677 UNLOCK(&mgr->lock);
712 if ((mgr->sctx->options & NS_SERVER_NOTCP) == 0) {
768 ns_interfacemgr_t *mgr = NULL;
777 mgr = ifp->mgr;
783 ns_interfacemgr_detach(&ifp->mgr);
787 isc_mem_put(mgr->mctx, ifp, sizeof(*ifp));
795 find_matching_interface(ns_interfacemgr_t *mgr, isc_sockaddr_t *addr) {
797 LOCK(&mgr->lock);
798 for (ifp = ISC_LIST_HEAD(mgr->interfaces); ifp != NULL;
805 UNLOCK(&mgr->lock);
821 purge_old_interfaces(ns_interfacemgr_t *mgr) {
827 LOCK(&mgr->lock);
828 for (ifp = ISC_LIST_HEAD(mgr->interfaces); ifp != NULL; ifp = next) {
831 if (ifp->generation != mgr->generation) {
832 ISC_LIST_UNLINK(ifp->mgr->interfaces, ifp, link);
836 UNLOCK(&mgr->lock);
907 setup_listenon(ns_interfacemgr_t *mgr, isc_interface_t *interface,
912 addr = isc_mem_get(mgr->mctx, sizeof(*addr));
916 LOCK(&mgr->lock);
917 for (old = ISC_LIST_HEAD(mgr->listenon); old != NULL;
922 isc_mem_put(mgr->mctx, addr, sizeof(*addr));
927 ISC_LIST_APPEND(mgr->listenon, addr, link);
929 UNLOCK(&mgr->lock);
933 clearlistenon(ns_interfacemgr_t *mgr) {
939 LOCK(&mgr->lock);
940 ISC_LIST_MOVE(listenon, mgr->listenon);
941 UNLOCK(&mgr->lock);
946 isc_mem_put(mgr->mctx, old, sizeof(*old));
986 epset = isc_nm_http_endpoints_new(ifp->mgr->mctx);
1000 update_listener_configuration(ns_interfacemgr_t *mgr, ns_interface_t *ifp,
1002 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1006 LOCK(&mgr->lock);
1027 UNLOCK(&mgr->lock);
1059 interface_update_or_shutdown(ns_interfacemgr_t *mgr, ns_interface_t *ifp,
1069 LOCK(&mgr->lock);
1070 ifp->generation = mgr->generation;
1071 UNLOCK(&mgr->lock);
1074 update_listener_configuration(mgr, ifp, le);
1083 do_scan(ns_interfacemgr_t *mgr, bool verbose, bool config) {
1104 } else if ((mgr->sctx->options & NS_SERVER_DISABLE6) == 0) {
1112 } else if ((mgr->sctx->options & NS_SERVER_DISABLE4) == 0) {
1135 for (le = ISC_LIST_HEAD(mgr->listenon6->elts); le != NULL;
1147 ifp = find_matching_interface(mgr, &listen_addr);
1150 mgr, ifp, le, config);
1160 result = interface_setup(mgr, &listen_addr, "<any>",
1177 result = isc_interfaceiter_create(mgr->mctx, &iter);
1182 dns_acl_create(mgr->mctx, 0, &localhost);
1183 dns_acl_create(mgr->mctx, 0, &localnets);
1185 clearlistenon(mgr);
1234 if (((mgr->sctx->options & NS_SERVER_FIXEDLOCAL) != 0) &&
1246 ll = (family == AF_INET) ? mgr->listenon4 : mgr->listenon6;
1266 mgr->aclenv, &match, NULL);
1269 ns_interface_create(mgr, &listen_sockaddr,
1275 setup_listenon(mgr, &interface, le->port);
1289 ifp = find_matching_interface(mgr, &listen_sockaddr);
1292 mgr, ifp, le, config);
1322 result = interface_setup(mgr, &listen_sockaddr,
1359 dns_aclenv_set(mgr->aclenv, localhost, localnets);
1369 ns_interfacemgr_scan(ns_interfacemgr_t *mgr, bool verbose, bool config) {
1373 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1376 mgr->generation++; /* Increment the generation count. */
1378 result = do_scan(mgr, verbose, config);
1390 purge_old_interfaces(mgr);
1396 if (ISC_LIST_EMPTY(mgr->interfaces)) {
1405 ns_interfacemgr_setlistenon4(ns_interfacemgr_t *mgr, ns_listenlist_t *value) {
1406 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1408 LOCK(&mgr->lock);
1409 ns_listenlist_detach(&mgr->listenon4);
1410 ns_listenlist_attach(value, &mgr->listenon4);
1411 UNLOCK(&mgr->lock);
1415 ns_interfacemgr_setlistenon6(ns_interfacemgr_t *mgr, ns_listenlist_t *value) {
1416 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1418 LOCK(&mgr->lock);
1419 ns_listenlist_detach(&mgr->listenon6);
1420 ns_listenlist_attach(value, &mgr->listenon6);
1421 UNLOCK(&mgr->lock);
1425 ns_interfacemgr_dumprecursing(FILE *f, ns_interfacemgr_t *mgr) {
1426 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1428 LOCK(&mgr->lock);
1429 for (size_t i = 0; i < mgr->ncpus; i++) {
1430 ns_client_dumprecursing(f, mgr->clientmgrs[i]);
1432 UNLOCK(&mgr->lock);
1436 ns_interfacemgr_listeningon(ns_interfacemgr_t *mgr,
1441 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1446 if (atomic_load(&mgr->shuttingdown)) {
1449 LOCK(&mgr->lock);
1450 for (old = ISC_LIST_HEAD(mgr->listenon); old != NULL;
1458 UNLOCK(&mgr->lock);
1464 ns_interfacemgr_getserver(ns_interfacemgr_t *mgr) {
1465 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1467 return mgr->sctx;
1471 ns_interfacemgr_getclientmgr(ns_interfacemgr_t *mgr) {
1474 REQUIRE(NS_INTERFACEMGR_VALID(mgr));
1476 REQUIRE((uint32_t)tid < mgr->ncpus);
1478 return mgr->clientmgrs[tid];