Files
bind9/lib/isc/win32/libisc.def.in
Ondřej Surý 7b9c8b9781 Refactor netmgr and add more unit tests
This is a part of the works that intends to make the netmgr stable,
testable, maintainable and tested.  It contains a numerous changes to
the netmgr code and unfortunately, it was not possible to split this
into smaller chunks as the work here needs to be committed as a complete
works.

NOTE: There's a quite a lot of duplicated code between udp.c, tcp.c and
tcpdns.c and it should be a subject to refactoring in the future.

The changes that are included in this commit are listed here
(extensively, but not exclusively):

* The netmgr_test unit test was split into individual tests (udp_test,
  tcp_test, tcpdns_test and newly added tcp_quota_test)

* The udp_test and tcp_test has been extended to allow programatic
  failures from the libuv API.  Unfortunately, we can't use cmocka
  mock() and will_return(), so we emulate the behaviour with #define and
  including the netmgr/{udp,tcp}.c source file directly.

* The netievents that we put on the nm queue have variable number of
  members, out of these the isc_nmsocket_t and isc_nmhandle_t always
  needs to be attached before enqueueing the netievent_<foo> and
  detached after we have called the isc_nm_async_<foo> to ensure that
  the socket (handle) doesn't disappear between scheduling the event and
  actually executing the event.

* Cancelling the in-flight TCP connection using libuv requires to call
  uv_close() on the original uv_tcp_t handle which just breaks too many
  assumptions we have in the netmgr code.  Instead of using uv_timer for
  TCP connection timeouts, we use platform specific socket option.

* Fix the synchronization between {nm,async}_{listentcp,tcpconnect}

  When isc_nm_listentcp() or isc_nm_tcpconnect() is called it was
  waiting for socket to either end up with error (that path was fine) or
  to be listening or connected using condition variable and mutex.

  Several things could happen:

    0. everything is ok

    1. the waiting thread would miss the SIGNAL() - because the enqueued
       event would be processed faster than we could start WAIT()ing.
       In case the operation would end up with error, it would be ok, as
       the error variable would be unchanged.

    2. the waiting thread miss the sock->{connected,listening} = `true`
       would be set to `false` in the tcp_{listen,connect}close_cb() as
       the connection would be so short lived that the socket would be
       closed before we could even start WAIT()ing

* The tcpdns has been converted to using libuv directly.  Previously,
  the tcpdns protocol used tcp protocol from netmgr, this proved to be
  very complicated to understand, fix and make changes to.  The new
  tcpdns protocol is modeled in a similar way how tcp netmgr protocol.
  Closes: #2194, #2283, #2318, #2266, #2034, #1920

* The tcp and tcpdns is now not using isc_uv_import/isc_uv_export to
  pass accepted TCP sockets between netthreads, but instead (similar to
  UDP) uses per netthread uv_loop listener.  This greatly reduces the
  complexity as the socket is always run in the associated nm and uv
  loops, and we are also not touching the libuv internals.

  There's an unfortunate side effect though, the new code requires
  support for load-balanced sockets from the operating system for both
  UDP and TCP (see #2137).  If the operating system doesn't support the
  load balanced sockets (either SO_REUSEPORT on Linux or SO_REUSEPORT_LB
  on FreeBSD 12+), the number of netthreads is limited to 1.

* The netmgr has now two debugging #ifdefs:

  1. Already existing NETMGR_TRACE prints any dangling nmsockets and
     nmhandles before triggering assertion failure.  This options would
     reduce performance when enabled, but in theory, it could be enabled
     on low-performance systems.

  2. New NETMGR_TRACE_VERBOSE option has been added that enables
     extensive netmgr logging that allows the software engineer to
     precisely track any attach/detach operations on the nmsockets and
     nmhandles.  This is not suitable for any kind of production
     machine, only for debugging.

* The tlsdns netmgr protocol has been split from the tcpdns and it still
  uses the old method of stacking the netmgr boxes on top of each other.
  We will have to refactor the tlsdns netmgr protocol to use the same
  approach - build the stack using only libuv and openssl.

* Limit but not assert the tcp buffer size in tcp_alloc_cb
  Closes: #2061

(cherry picked from commit 634bdfb16d)
2020-12-09 10:46:16 +01:00

801 lines
15 KiB
Modula-2

LIBRARY libisc
; Exported Functions
EXPORTS
NTReportError
closelog
@IF PKCS11
getpassphrase
@END PKCS11
isc_app_block
isc_app_ctxfinish
isc_app_ctxonrun
isc_app_ctxrun
isc_app_ctxshutdown
isc_app_ctxstart
isc_app_ctxsuspend
isc_app_finish
isc_app_onrun
isc_app_reload
isc_app_run
isc_app_shutdown
isc_app_start
isc_app_unblock
isc_appctx_create
isc_appctx_destroy
isc_astack_destroy
isc_astack_new
isc_astack_pop
isc_astack_trypush
isc__buffer_activeregion
isc__buffer_add
isc__buffer_availableregion
isc__buffer_back
isc__buffer_clear
isc__buffer_consumedregion
isc__buffer_first
isc__buffer_forward
isc__buffer_init
isc__buffer_initnull
isc__buffer_invalidate
isc__buffer_putmem
isc__buffer_putstr
isc__buffer_putuint16
isc__buffer_putuint24
isc__buffer_putuint32
isc__buffer_putuint48
isc__buffer_putuint8
isc__buffer_region
isc__buffer_remainingregion
isc__buffer_setactive
isc__buffer_subtract
isc__buffer_usedregion
isc__mem_allocate
isc__mem_free
isc__mem_get
isc__mem_printactive
isc__mem_put
isc__mem_putanddetach
isc__mem_reallocate
isc__mem_strdup
isc__mempool_get
isc__mempool_put
isc__md_md5
isc__md_sha1
isc__md_sha224
isc__md_sha256
isc__md_sha384
isc__md_sha512
isc_socket_accept
isc_socket_attach
isc_socket_bind
isc_socket_cancel
isc_socket_cleanunix
isc_socket_close
isc_socket_connect
isc_socket_create
isc_socket_detach
isc_socket_dscp
isc_socket_dup
isc_socket_filter
isc_socket_getfd
isc_socket_getname
isc_socket_getpeername
isc_socket_getsockname
isc_socket_gettag
isc_socket_gettype
isc_socket_hasreuseport
isc_socket_ipv6only
isc_socket_listen
isc_socket_open
isc_socket_permunix
isc_socket_recv
isc_socket_recv2
isc_socket_send
isc_socket_sendto
isc_socket_sendto2
isc_socket_setname
isc_socketmgr_create
isc_socketmgr_create2
isc_socketmgr_destroy
isc_socketmgr_getmaxsockets
isc_socketmgr_setreserved
isc_socketmgr_setstats
isc_task_getname
isc_task_gettag
isc_task_unsendrange
isc_taskmgr_mode
isc__taskmgr_pause
isc__taskmgr_resume
isc_aes128_crypt
isc_aes192_crypt
isc_aes256_crypt
isc_app_block
isc_app_ctxfinish
isc_app_ctxonrun
isc_app_ctxrun
isc_app_ctxshutdown
isc_app_ctxstart
isc_app_ctxsuspend
isc_app_finish
isc_app_isrunning
isc_app_onrun
isc_app_reload
isc_app_run
isc_app_shutdown
isc_app_start
isc_app_unblock
isc_appctx_create
isc_appctx_destroy
isc_assertion_failed
isc_assertion_setcallback
isc_assertion_typetotext
isc_backtrace_getsymbol
isc_backtrace_getsymbolfromindex
isc_backtrace_gettrace
isc_base32_decoderegion
isc_base32_decodestring
isc_base32_tobuffer
isc_base32_totext
isc_base32hex_decoderegion
isc_base32hex_decodestring
isc_base32hex_tobuffer
isc_base32hex_totext
isc_base32hexnp_decoderegion
isc_base32hexnp_decodestring
isc_base32hexnp_tobuffer
isc_base32hexnp_totext
isc_base64_decodestring
isc_base64_tobuffer
isc_base64_totext
isc_buffer_allocate
isc_buffer_compact
isc_buffer_copyregion
isc_buffer_dup
isc_buffer_free
isc_buffer_getuint16
isc_buffer_getuint32
isc_buffer_getuint48
isc_buffer_getuint8
isc_buffer_printf
isc_buffer_putdecint
isc_buffer_reinit
isc_buffer_reserve
isc_buffer_setautorealloc
isc_bufferlist_availablecount
isc_bufferlist_usedcount
isc_commandline_parse
isc_commandline_strtoargv
isc_condition_broadcast
isc_condition_destroy
isc_condition_init
isc_condition_signal
isc_condition_wait
isc_condition_waituntil
isc_counter_attach
isc_counter_create
isc_counter_detach
isc_counter_increment
isc_counter_setlimit
isc_counter_used
isc_crc64_final
isc_crc64_init
isc_crc64_update
isc_dir_chdir
isc_dir_chroot
isc_dir_close
isc_dir_createunique
isc_dir_init
isc_dir_open
isc_dir_read
isc_dir_reset
isc_entropy_get
isc_errno_toresult
isc_error_fatal
isc_error_runtimecheck
isc_error_setfatal
isc_error_setunexpected
isc_error_unexpected
isc_event_allocate
isc_event_constallocate
isc_event_free
isc_file_absolutepath
isc_file_basename
isc_file_bopenunique
isc_file_bopenuniquemode
isc_file_bopenuniqueprivate
isc_file_exists
isc_file_getmodtime
isc_file_getsize
isc_file_getsizefd
isc_file_isabsolute
isc_file_ischdiridempotent
isc_file_iscurrentdir
isc_file_isdirectory
isc_file_isdirwritable
isc_file_isplainfile
isc_file_isplainfilefd
isc_file_mktemplate
isc_file_mmap
isc_file_mode
isc_file_munmap
isc_file_openunique
isc_file_openuniquemode
isc_file_openuniqueprivate
isc_file_progname
isc_file_remove
isc_file_rename
isc_file_renameunique
isc_file_safecreate
isc_file_safemovefile
isc_file_sanitize
isc_file_settime
isc_file_splitpath
isc_file_template
isc_file_truncate
isc_fsaccess_add
isc_fsaccess_changeowner
isc_fsaccess_remove
isc_fsaccess_set
isc_hash32
isc_hash64
isc_hash_get_initializer
isc_hash_set_initializer
isc_heap_create
isc_heap_decreased
isc_heap_delete
isc_heap_destroy
isc_heap_foreach
isc_heap_element
isc_heap_increased
isc_heap_insert
isc_hex_decodestring
isc_hex_tobuffer
isc_hex_totext
isc_hp_clear
isc_hp_clear_one
isc_hp_destroy
isc_hp_init
isc_hp_protect
isc_hp_protect_ptr
isc_hp_protect_release
isc_hp_new
isc_hp_retire
isc_hmac
isc_hmac_new
isc_hmac_free
isc_hmac_init
isc_hmac_reset
isc_hmac_update
isc_hmac_final
isc_hmac_get_md_type
isc_hmac_get_size
isc_hmac_get_block_size
isc_hp_new
isc_hp_destroy
isc_hp_clear
isc_hp_protect
isc_hp_protect_ptr
isc_hp_protect_release
isc_hp_retire
isc_ht_add
isc_ht_count
isc_ht_delete
isc_ht_destroy
isc_ht_find
isc_ht_init
isc_ht_iter_create
isc_ht_iter_current
isc_ht_iter_currentkey
isc_ht_iter_delcurrent_next
isc_ht_iter_destroy
isc_ht_iter_first
isc_ht_iter_next
isc_httpd_addheader
isc_httpd_addheaderuint
isc_httpd_endheaders
isc_httpd_response
isc_httpd_setfinishhook
isc_httpdmgr_addurl
isc_httpdmgr_addurl2
isc_httpdmgr_create
isc_httpdmgr_shutdown
isc_interfaceiter_create
isc_interfaceiter_current
isc_interfaceiter_destroy
isc_interfaceiter_first
isc_interfaceiter_next
isc_interval_iszero
isc_interval_set
isc_iterated_hash
isc_lex_close
isc_lex_create
isc_lex_destroy
isc_lex_getcomments
isc_lex_getlasttokentext
isc_lex_getmastertoken
isc_lex_getoctaltoken
isc_lex_getsourceline
isc_lex_getsourcename
isc_lex_getspecials
isc_lex_gettoken
isc_lex_isfile
isc_lex_openbuffer
isc_lex_openfile
isc_lex_openstream
isc_lex_setcomments
isc_lex_setsourceline
isc_lex_setsourcename
isc_lex_setspecials
isc_lex_ungettoken
isc_lfsr_generate
isc_lfsr_generate32
isc_lfsr_init
isc_lfsr_skip
isc_lib_register
isc_log_categorybyname
isc_log_closefilelogs
isc_log_create
isc_log_createchannel
isc_log_destroy
isc_log_getdebuglevel
isc_log_getduplicateinterval
isc_log_gettag
isc_log_modulebyname
isc_log_opensyslog
isc_log_registercategories
isc_log_registermodules
isc_log_setcontext
isc_log_setdebuglevel
isc_log_setduplicateinterval
isc_log_settag
isc_log_usechannel
isc_log_vwrite
isc_log_vwrite1
isc_log_wouldlog
isc_log_write
isc_log_write1
isc_logconfig_create
isc_logconfig_destroy
isc_logconfig_use
isc_logfile_roll
isc_md_new
isc_md_init
isc_md_reset
isc_md_update
isc_md_final
isc_md_free
isc_md_get_md_type
isc_md_get_size
isc_md_get_block_size
isc_md_type_get_size
isc_md_type_get_block_size
isc_md
isc_mem_attach
isc_mem_checkdestroyed
isc_mem_create
isc_mem_destroy
isc_mem_detach
isc_mem_getname
isc_mem_gettag
isc_mem_inuse
isc_mem_isovermem
isc_mem_maxinuse
isc_mem_references
@IF NOTYET
isc_mem_renderjson
@END NOTYET
@IF LIBXML2
isc_mem_renderxml
@END LIBXML2
isc_mem_setdestroycheck
isc_mem_setname
isc_mem_setwater
isc_mem_stats
isc_mem_total
isc_mem_waterack
isc_meminfo_totalphys
isc_mempool_associatelock
isc_mempool_create
isc_mempool_destroy
isc_mempool_getallocated
isc_mempool_getfillcount
isc_mempool_getfreecount
isc_mempool_getfreemax
isc_mempool_getmaxalloc
isc_mempool_setfillcount
isc_mempool_setfreemax
isc_mempool_setmaxalloc
isc_mempool_setname
isc_mutexblock_destroy
isc_mutexblock_init
isc_net_disableipv4
isc_net_disableipv6
isc_net_enableipv4
isc_net_enableipv6
isc_net_getudpportrange
isc_net_probe_ipv6only
isc_net_probe_ipv6pktinfo
isc_net_probedscp
isc_net_probeipv4
isc_net_probeipv6
isc_net_probeunix
isc_netaddr_any
isc_netaddr_any6
isc_netaddr_eqprefix
isc_netaddr_equal
isc_netaddr_format
isc_netaddr_fromin
isc_netaddr_fromin6
isc_netaddr_frompath
isc_netaddr_fromsockaddr
isc_netaddr_fromv4mapped
isc_netaddr_getzone
isc_netaddr_isexperimental
isc_netaddr_islinklocal
isc_netaddr_isloopback
isc_netaddr_ismulticast
isc_netaddr_isnetzero
isc_netaddr_issitelocal
isc_netaddr_masktoprefixlen
isc_netaddr_prefixok
isc_netaddr_setzone
isc_netaddr_totext
isc_netaddr_unspec
isc_netscope_pton
isc__nmhandle_attach
isc__nmhandle_detach
isc_nmhandle_getdata
isc_nmhandle_getextra
isc_nmhandle_is_stream
isc_nmhandle_netmgr
isc_nmhandle_localaddr
isc_nmhandle_peeraddr
isc_nmhandle_setdata
isc_nmhandle_settimeout
isc_nm_cancelread
isc_nm_closedown
isc_nm_destroy
isc_nm_detach
isc_nm_listentcpdns
isc_nm_listentlsdns
isc_nm_listentcp
isc_nm_listentls
isc_nm_listenudp
isc_nm_maxudp
isc_nm_pauseread
isc_nm_read
isc_nm_resumeread
isc_nm_send
isc_nm_setstats
isc_nm_start
isc_nm_stoplistening
isc_nm_tcpconnect
isc_nm_tcpdnsconnect
isc_nm_gettimeouts
isc_nm_settimeouts
isc_nm_tcpdns_keepalive
isc_nm_tcpdns_sequential
isc_nm_tid
isc_nm_tls_create_server_ctx
isc_nm_tlsconnect
isc_nm_tlsdnsconnect
isc_nm_udpconnect
isc_nmsocket_close
isc__nm_acquire_interlocked
isc__nm_drop_interlocked
isc__nm_acquire_interlocked_force
isc_nonce_buf
isc_ntpaths_get
isc_ntpaths_init
isc_once_do
isc_os_ncpus
isc_parse_uint16
isc_parse_uint32
isc_parse_uint8
isc_pool_count
isc_pool_create
isc_pool_destroy
isc_pool_expand
isc_pool_get
isc_portset_add
isc_portset_addrange
isc_portset_create
isc_portset_destroy
isc_portset_isset
isc_portset_nports
isc_portset_remove
isc_portset_removerange
isc_queue_enqueue
isc_queue_dequeue
isc_queue_destroy
isc_queue_new
isc_quota_attach
isc_quota_attach_cb
isc_quota_cb_init
isc_quota_destroy
isc_quota_detach
isc_quota_getmax
isc_quota_getsoft
isc_quota_getused
isc_quota_init
isc_quota_max
isc_quota_soft
isc_radix_create
isc_radix_destroy
isc_radix_insert
isc_radix_process
isc_radix_remove
isc_radix_search
isc_random8
isc_random16
isc_random32
isc_random_buf
isc_random_uniform
isc_ratelimiter_attach
isc_ratelimiter_create
isc_ratelimiter_dequeue
isc_ratelimiter_detach
isc_ratelimiter_enqueue
isc_ratelimiter_release
isc_ratelimiter_setinterval
isc_ratelimiter_setpertic
isc_ratelimiter_setpushpop
isc_ratelimiter_shutdown
isc_ratelimiter_stall
isc_regex_validate
isc_region_compare
isc_resource_getcurlimit
isc_resource_getlimit
isc_resource_setlimit
isc_result_register
isc_result_registerids
isc_result_toid
isc_result_totext
isc_rwlock_destroy
isc_rwlock_downgrade
isc_rwlock_init
isc_rwlock_lock
isc_rwlock_trylock
isc_rwlock_tryupgrade
isc_rwlock_unlock
isc_safe_memequal
isc_safe_memwipe
isc_serial_eq
isc_serial_ge
isc_serial_gt
isc_serial_le
isc_serial_lt
isc_serial_ne
isc_halfsiphash24
isc_siphash24
isc_sockaddr_any
isc_sockaddr_any6
isc_sockaddr_anyofpf
isc_sockaddr_compare
isc_sockaddr_eqaddr
isc_sockaddr_eqaddrprefix
isc_sockaddr_equal
isc_sockaddr_format
isc_sockaddr_fromin
isc_sockaddr_fromin6
isc_sockaddr_fromnetaddr
isc_sockaddr_frompath
isc_sockaddr_fromsockaddr
isc_sockaddr_getport
isc_sockaddr_hash
isc_sockaddr_isexperimental
isc_sockaddr_islinklocal
isc_sockaddr_ismulticast
isc_sockaddr_isnetzero
isc_sockaddr_issitelocal
isc_sockaddr_pf
isc_sockaddr_setport
isc_sockaddr_totext
isc_sockaddr_v6fromin
isc_socket_socketevent
isc_socketmgr_createinctx
isc_socketmgr_maxudp
@IF NOTYET
isc_socketmgr_renderjson
@END NOTYET
@IF LIBXML2
isc_socketmgr_renderxml
@END LIBXML2
isc_stats_attach
isc_stats_create
isc_stats_decrement
isc_stats_detach
isc_stats_dump
isc_stats_get_counter
isc_stats_increment
isc_stats_ncounters
isc_stats_set
isc_stats_update_if_greater
isc_stdio_close
isc_stdio_flush
isc_stdio_open
isc_stdio_read
isc_stdio_seek
isc_stdio_sync
isc_stdio_tell
isc_stdio_write
isc_stdtime_get
isc_stdtime_tostring
isc_string_strerror_r
isc_symtab_count
isc_symtab_create
isc_symtab_define
isc_symtab_destroy
isc_symtab_lookup
isc_symtab_undefine
isc_syslog_facilityfromstring
isc_task_attach
isc_task_beginexclusive
isc_task_create
isc_task_create_bound
isc_task_destroy
isc_task_detach
isc_task_endexclusive
isc_task_exiting
isc_task_getcurrenttime
isc_task_getcurrenttimex
isc_task_onshutdown
isc_task_pause
isc_task_privilege
isc_task_purge
isc_task_purgeevent
isc_task_purgerange
isc_task_send
isc_task_sendanddetach
isc_task_sendto
isc_task_sendtoanddetach
isc_task_setname
isc_task_setprivilege
isc_task_shutdown
isc_task_unpause
isc_task_unsend
isc_taskmgr_create
isc_taskmgr_createinctx
isc_taskmgr_destroy
isc_taskmgr_excltask
isc_taskmgr_mode
@IF NOTYET
isc_taskmgr_renderjson
@END NOTYET
@IF LIBXML2
isc_taskmgr_renderxml
@END LIBXML2
isc_taskmgr_setexcltask
isc_taskmgr_setprivilegedmode
isc_taskpool_create
isc_taskpool_destroy
isc_taskpool_expand
isc_taskpool_gettask
isc_taskpool_setprivilege
isc_taskpool_size
isc_thread_create
isc_thread_join
isc_thread_setaffinity
isc_thread_setconcurrency
isc_thread_setname
isc_time_add
isc_time_compare
isc_time_formatISO8601
isc_time_formatISO8601L
isc_time_formatISO8601Lms
isc_time_formatISO8601Lus
isc_time_formatISO8601ms
isc_time_formatISO8601us
isc_time_formathttptimestamp
isc_time_formatshorttimestamp
isc_time_formattimestamp
isc_time_isepoch
isc_time_microdiff
isc_time_nanoseconds
isc_time_now
isc_time_nowplusinterval
isc_time_parsehttptimestamp
isc_time_secondsastimet
isc_time_seconds
isc_time_set
isc_time_settoepoch
isc_time_subtract
isc_timer_attach
isc_timer_create
isc_timer_detach
isc_timer_gettype
isc_timer_reset
isc_timer_touch
isc_timermgr_create
isc_timermgr_createinctx
isc_timermgr_destroy
isc_timermgr_poke
isc_tm_timegm
isc_tm_strptime
isc_utf8_bom
isc_utf8_valid
isc_win32os_versioncheck
openlog
@IF PKCS11
pk11_attribute_bytype
pk11_attribute_first
pk11_attribute_next
pk11_dump_tokens
pk11_error_fatalcheck
pk11_finalize
pk11_get_best_token
pk11_get_lib_name
pk11_get_load_error_message
pk11_get_session
pk11_initialize
pk11_mem_get
pk11_mem_put
pk11_numbits
pk11_parse_uri
pk11_result_register
pk11_result_totext
pk11_return_session
pk11_set_lib_name
pkcs_C_CloseSession
pkcs_C_CreateObject
pkcs_C_DeriveKey
pkcs_C_DestroyObject
pkcs_C_DigestFinal
pkcs_C_DigestInit
pkcs_C_DigestUpdate
pkcs_C_Encrypt
pkcs_C_EncryptInit
pkcs_C_Finalize
pkcs_C_FindObjects
pkcs_C_FindObjectsFinal
pkcs_C_FindObjectsInit
pkcs_C_GenerateKey
pkcs_C_GenerateKeyPair
pkcs_C_GenerateRandom
pkcs_C_GetAttributeValue
pkcs_C_GetMechanismInfo
pkcs_C_GetSlotList
pkcs_C_GetTokenInfo
pkcs_C_Initialize
pkcs_C_Login
pkcs_C_Logout
pkcs_C_OpenSession
pkcs_C_SeedRandom
pkcs_C_SetAttributeValue
pkcs_C_Sign
pkcs_C_SignFinal
pkcs_C_SignInit
pkcs_C_SignUpdate
pkcs_C_Verify
pkcs_C_VerifyFinal
pkcs_C_VerifyInit
pkcs_C_VerifyUpdate
@END PKCS11
strlcat
strlcpy
syslog
@IF NOLONGER
; Exported Data
EXPORTS
isc__backtrace_nsymbols DATA
isc__backtrace_symtable DATA
isc_bind9 DATA
isc_commandline_argument DATA
isc_commandline_errprint DATA
isc_commandline_index DATA
isc_commandline_option DATA
isc_commandline_progname DATA
isc_commandline_reset DATA
isc_dscp_check_value DATA
isc_hashctx DATA
isc_mem_debugging DATA
@IF PKCS11
pk11_verbose_init DATA
@END PKCS11
@END NOLONGER