Subject: Re: threads support (scheduler activation) and libraries
To: Jason R Thorpe <thorpej@wasabisystems.com>
From: None <itojun@iijlab.net>
List: tech-userlevel
Date: 06/25/2002 15:48:03
> > 	i understand there are a lot of progress in threads support in kernel
> > 	side, however, i'm a bit worried about library side.  for instance,
> > 	all resolver libraries are not thread safe.  they are from BIND4,
> > 	and is heavily modified so it is not trivial for us to upgrade to BIND8.
> > 	(for example, nsdispatch directly conflicst with BIND8 irs.conf)
> > 	what are the grand plan?
>What are the API changes from bind4 -> bind8?  We may simply have to
>reimplement it ourselves (and provide backward-compatibility to the
>bind4 ABI).

	a lot of work is needed, i would say.  i have tried to migrate to BIND8
	resolver a couple of times with no success.
	- global state like struct __res_state gone away, now passed around as
	  arg
	- content of struct __res_state have changed drastically, and the
	  changes conflict with NetBSD changes
	- the way we enabled IPv6 in resolver (struct __res_state_ext)
	  is different from BIND8 - again, conflict.
	- internal structure changes for irs.conf (directly conflicts with
	  nsdispatch)
	- a lot of new API functions added (shlib minor bump at least),
	  see the attached diff.  some of them are supposed to be private
	  within libbind - we may need to rename them to __foo in namespace.h

	for instance, it is very difficult to provide backward-compatible
	behavior for apps that plays with struct __res_state.

itojun


--- /tmp/bind4-libresolv-symbols	Tue Jun 25 15:42:29 2002
+++ /tmp/bind8-libbind-symbols	Tue Jun 25 15:42:14 2002
@@ -1,24 +1,784 @@
+AHChooseDigestConstructor2
+AHChooseDigestDestructor
+AHChooseDigestFinal
+AHChooseDigestInit
+AHChooseDigestUpdate
+AHChooseEncryptConstructor2
+AHChooseEncryptDecryptFinal
+AHChooseEncryptDecryptInit
+AHChooseEncryptDecryptUpdate
+AHChooseEncryptDestructor
+AHChooseEncryptEncryptFinal
+AHChooseEncryptEncryptInit
+AHChooseEncryptEncryptUpdate
+AHChooseEncryptGetBlockLen
+AHChooseGenerateConstructor2
+AHChooseGenerateDestructor
+AHChooseGenerateInit
+AHChooseGenerateKeypair
+AHChooseGenerateParameters
+AHChooseRandomConstructor2
+AHChooseRandomDestructor
+AHChooseRandomGenerateBytes
+AHChooseRandomInit
+AHChooseRandomUpdate
+AHDigestConstructor
+AHEncryptDecryptConstructor
+AHGenerateConstructor
+AHRandomConstructor
+AH_RSAEncrypPrivateConstructor
+AH_RSAEncrypPublicConstructor
+AH_RSAEncryptionConstructor1
+AH_RSAEncryptionDecryptFinal
+AH_RSAEncryptionDecryptInit
+AH_RSAEncryptionDestructor
+AH_RSAEncryptionEncryptFinal
+AH_RSAEncryptionEncryptInit
+AH_RSAEncryptionGetBlockLen
+AH_RSAEncryptionUpdate
+AITChooseDigestNullNewHandler
+AITChooseEncryptNewHandler
+AITChooseGenerateNewHandler
+AITChooseRandomNullNewHandler
+AITNullAddInfo
+AIT_8AddInfo
+AIT_PKCS_RSAPrivateNewHandler
+AIT_PKCS_RSAPublicNewHandler
+AIT_RSAKeyGenAddInfo
+AI_MD5
+AI_MD5Random
+AI_PKCS_RSAPrivate
+AI_PKCS_RSAPublic
+AI_RSAKeyGen
+AI_RSAPrivate
+AI_RSAPublic
+A_DigestRandomGenerateBytes
+A_DigestRandomInit
+A_DigestRandomUpdate
+A_IntegerBits
+A_MD5Final
+A_MD5Init
+A_MD5RandomGenerateBytes
+A_MD5RandomInit
+A_MD5RandomUpdate
+A_MD5Update
+A_RSAFinal
+A_RSAInit
+A_RSAKeyGen
+A_RSAKeyGenInit
+A_RSAUpdate
+A_RSA_CRT2Final
+A_RSA_CRT2Init
+A_RSA_CRT2Update
+Add
+AlgaChoiceChoose
+AlgorithmWrapCheck
+AllocAndCopyIntegerItems
+B_AlgorithmCheckType
+B_AlgorithmCheckTypeAndInitFlag
+B_AlgorithmConstructor
+B_AlgorithmDecryptFinal
+B_AlgorithmDecryptInit
+B_AlgorithmDecryptUpdate
+B_AlgorithmDestructor
+B_AlgorithmDigestFinal
+B_AlgorithmDigestInit
+B_AlgorithmDigestUpdate
+B_AlgorithmEncryptFinal
+B_AlgorithmEncryptInit
+B_AlgorithmEncryptUpdate
+B_AlgorithmGenerateInit
+B_AlgorithmGenerateKeypair
+B_AlgorithmGenerateParameters
+B_AlgorithmGenerateRandomBytes
+B_AlgorithmGetInfo
+B_AlgorithmInfoTypeMakeError
+B_AlgorithmRandomInit
+B_AlgorithmRandomUpdate
+B_AlgorithmSetInfo
+B_CreateAlgorithmObject
+B_CreateKeyObject
+B_DecryptFinal
+B_DecryptInit
+B_DecryptUpdate
+B_DestroyAlgorithmObject
+B_DestroyKeyObject
+B_DigestFinal
+B_DigestInit
+B_DigestUpdate
+B_EncryptFinal
+B_EncryptInit
+B_EncryptUpdate
+B_GenerateInit
+B_GenerateKeypair
+B_GenerateParameters
+B_GenerateRandomBytes
+B_GetAlgorithmInfo
+B_GetKeyInfo
+B_InfoCacheAddInfo
+B_InfoCacheConstructor
+B_InfoCacheFindInfo
+B_IntegerBits
+B_KeyAddItemInfo
+B_KeyGetInfo
+B_KeyInfoTypeMakeError
+B_KeySetInfo
+B_MemoryPoolAdoptData
+B_MemoryPoolAdoptHelper
+B_MemoryPoolAlloc
+B_MemoryPoolAllocAndCopy
+B_MemoryPoolConstructor
+B_MemoryPoolDestructor
+B_MemoryPoolFindAllocedObject
+B_MemoryPoolFree
+B_MemoryPoolRealloc
+B_MemoryPoolReset
+B_RandomInit
+B_RandomUpdate
+B_SetAlgorithmInfo
+B_SetKeyInfo
+Big2Exp
+BigAbs
+BigAcc
+BigAdd
+BigClrbit
+BigCmp
+BigConst
+BigCopy
+BigDec
+BigInc
+BigInv
+BigLen
+BigLenw
+BigModExp
+BigModMpyx
+BigModSqx
+BigModx
+BigMpy
+BigNeg
+BigNumInit
+BigPdiv
+BigPegcd
+BigPmpy
+BigPmpyh
+BigPmpyl
+BigPsq
+BigQrx
+BigSetbit
+BigSign
+BigSmod
+BigSub
+BigSwap
+BigToCanonical
+BigU
+BigUnexp
+BigZero
+ByteLong
+ByteOrd
+ByteSwap
+ByteSwap32
+CacheFullPrivateKey
+CanonicalToBig
+CheckSurrender
+ConvertAlgaeError
+DivRem
+DoubleExpo
+Expo
+GenDSSKey
+GenDSSNumber
+GenDSSParameters
+GenDSSSignature
+GenPrime
+GenRand
+GetDSSPQG
+GetFullPrivateKeyInfo
+GetPasswordKeySHA
+InitRand
+Inverse
+KITItemAddInfo
+KIT_8ByteAddInfo
+KIT_8ByteMakeInfo
+KIT_PKCS_RSAPrivateAddInfo
+KIT_PKCS_RSAPrivateMakeInfo
+KIT_RSAPublicAddInfo
+KIT_RSAPublicMakeInfo
+KIT_RSA_CRTAddInfo
+KIT_RSA_CRTMakeInfo
+KI_8Byte
+KI_Item
+KI_PKCS_RSAPrivate
+KI_RSAPublic
+KI_RSA_CRT
+KeyWrapCheck
+LShiftL_big
+LongByte
+MD5_Final
+MD5_Init
+MD5_Update
+Mul
+Mul_big_1
+MyGenRand
+MySHA
+MySHAFinal
+OrdByte
+PartReduct
+PrimeFind
+PseudoPrime
+RShiftL_big
+RShiftMostBit
+RandomAlgorithmCheck
+ResizeContextConstructor
+ResizeContextDestructor
+ResizeContextMakeNewContext
+SHA
+SHAFinal
+SHAInit
+SHAInitK
+SHAUpdate
+SecretCBCDecryptFinal
+SecretCBCDecryptUpdate
+SecretCBCEncryptFinal
+SecretCBCEncryptUpdate
+SetDataOrder
+Square
+SteinGCD
+Sub_big
+Sum
+Sum_Q
+Sum_big
+T_free
+T_malloc
+T_memcmp
+T_memcpy
+T_memmove
+T_memset
+T_realloc
+VerDSSSignature
+VerPrime
+WordSwap
+__b64_ntop
+__b64_pton
+__bitncmp
+__ctl_bufget
+__ctl_bufput
+__ctl_client
+__ctl_command
+__ctl_endclient
+__ctl_endserver
+__ctl_getcsctx
+__ctl_logger
+__ctl_response
+__ctl_sa_copy
+__ctl_sa_ntop
+__ctl_sendhelp
+__ctl_server
+__ctl_setcsctx
+__dn_comp
+__dn_count_labels
+__dn_expand
+__dn_skipname
+__evAddTime
+__evCancelConn
+__evCancelRW
+__evClearIdleTimer
+__evClearTimer
+__evCmpTime
+__evConnect
+__evConsIovec
+__evConsTime
+__evCreate
+__evCreateTimers
+__evDefer
+__evDeselectFD
+__evDestroy
+__evDestroyTimers
+__evDispatch
+__evDo
+__evDrop
+__evGetNext
+__evHighestFD
+__evHold
+__evLastEventTime
+__evListen
+__evMainLoop
+__evNowTime
+__evPrintf
+__evRead
+__evResetIdleTimer
+__evResetTimer
+__evSelectFD
+__evSetDebug
+__evSetIdleTimer
+__evSetTimer
+__evSubTime
+__evTimeRW
+__evTimeSpec
+__evTimeVal
+__evTouchIdleTimer
+__evTryAccept
+__evUnhold
+__evUntimeRW
+__evUnwait
+__evWaitFor
+__evWrite
+__fp_nquery
+__fp_query
+__fp_resstat
+__h_errno
+__h_errno_set
+__heap_decreased
+__heap_delete
+__heap_element
+__heap_for_each
+__heap_free
+__heap_increased
+__heap_insert
+__heap_new
+__hesiod_res_get
+__hesiod_res_set
 __hostalias
+__inet_addr
+__inet_aton
+__inet_cidr_ntop
+__inet_cidr_pton
+__inet_lnaof
+__inet_makeaddr
+__inet_net_ntop
+__inet_net_pton
+__inet_neta
+__inet_netof
+__inet_network
+__inet_nsap_addr
+__inet_nsap_ntoa
+__inet_ntoa
+__inet_ntop
+__inet_pton
+__irp_marshall_gr
+__irp_marshall_ho
+__irp_marshall_ne
+__irp_marshall_ng
+__irp_marshall_nw
+__irp_marshall_pr
+__irp_marshall_pw
+__irp_marshall_sv
+__irp_unmarshall_gr
+__irp_unmarshall_ho
+__irp_unmarshall_ne
+__irp_unmarshall_ng
+__irp_unmarshall_nw
+__irp_unmarshall_pr
+__irp_unmarshall_pw
+__irp_unmarshall_sv
+__irs_dns_acc
+__irs_gen_acc
+__irs_irp_acc
+__irs_irp_connect
+__irs_irp_connection_setup
+__irs_irp_disconnect
+__irs_irp_read_body
+__irs_irp_read_response
+__irs_irp_send_command
+__irs_lcl_acc
+__irs_lclsv_fnxt
+__irs_nis_acc
+__irs_nul_ng
+__loc_aton
+__loc_ntoa
+__log_add_channel
+__log_category_is_active
+__log_check
+__log_check_channel
+__log_close_debug_channels
+__log_close_stream
+__log_dec_references
+__log_free_channel
+__log_free_context
+__log_get_channel_type
+__log_get_filename
+__log_get_stream
+__log_inc_references
+__log_new_context
+__log_new_file_channel
+__log_new_null_channel
+__log_new_syslog_channel
+__log_open_stream
+__log_option
+__log_remove_channel
+__log_set_file_owner
+__log_vwrite
+__log_write
+__make_group_list
+__map_v4v6_address
+__memactive
+__memget
+__memget_debug
+__memget_record
+__meminit
+__memput
+__memput_debug
+__memput_record
+__memstats
+__net_data_init
+__ns_datetosecs
+__ns_find_tsig
+__ns_format_ttl
+__ns_get16
+__ns_get32
+__ns_initparse
+__ns_makecanon
+__ns_msg_getflag
+__ns_name_compress
+__ns_name_ntol
+__ns_name_ntop
+__ns_name_pack
+__ns_name_pton
+__ns_name_rollback
+__ns_name_skip
+__ns_name_uncompress
+__ns_name_unpack
+__ns_parse_ttl
+__ns_parserr
+__ns_put16
+__ns_put32
+__ns_samedomain
+__ns_samename
+__ns_sign
+__ns_sign_tcp
+__ns_sign_tcp_init
+__ns_skiprr
+__ns_sprintrr
+__ns_sprintrrf
+__ns_subdomain
+__ns_verify
+__ns_verify_tcp
+__ns_verify_tcp_init
+__p_cdname
+__p_cdnname
+__p_class
+__p_fqname
+__p_fqnname
+__p_option
+__p_query
+__p_rcode
+__p_secstodate
+__p_section
+__p_time
+__p_type
+__putlong
+__putshort
 __res_close
+__res_dnok
+__res_findzonecut
+__res_freeupdrec
+__res_getservers
+__res_hnok
+__res_hostalias
+__res_init
 __res_isourserver
+__res_mailok
+__res_mkquery
+__res_mkupdate
+__res_mkupdrec
 __res_nameinquery
-__res_opt
+__res_nametoclass
+__res_nametotype
+__res_nclose
+__res_ndestroy
+__res_ninit
+__res_nmkquery
+__res_nmkupdate
+__res_nopt
+__res_nquery
+__res_nquerydomain
+__res_nsearch
+__res_nsend
+__res_nsendsigned
+__res_nupdate
+__res_ownok
+__res_pquery
 __res_queriesmatch
+__res_query
+__res_querydomain
+__res_randomid
+__res_search
 __res_send
-_dns_gethtbyaddr
-_dns_gethtbyname
-_endhtent
-_gethtbyaddr
-_gethtbyname
-_gethtbyname2
-_gethtent
-_sethtent
+__res_sendsigned
+__res_setservers
+__res_update
+__res_vinit
+__sym_ntop
+__sym_ntos
+__sym_ston
+_getlong
+_getshort
+addr2addrinfo
+assertion_type_to_text
+bnAddQ_16
+bnAdd_16
+bnBegin
+bnBits_16
+bnCmpQ_16
+bnCmp_16
+bnCopy_16
+bnDivMod_16
+bnDoubleExpMod_16
+bnEnd_16
+bnExpMod_16
+bnExtractBigBytes_16
+bnExtractLittleBytes_16
+bnGcd_16
+bnInit
+bnInit_16
+bnInsertBigBytes_16
+bnInsertLittleBytes_16
+bnInv_16
+bnLSWord_16
+bnLShift_16
+bnMakeOdd_16
+bnModQ_16
+bnMod_16
+bnMulQ_16
+bnMul_16
+bnNorm_16
+bnPrealloc_16
+bnRShift_16
+bnSetQ_16
+bnSquare_16
+bnSubQ_16
+bnSub_16
+bnSwap
+bnTwoExpMod_16
+dst_bsafe_init
+dst_buffer_to_key
+dst_check_algorithm
+dst_compare_keys
+dst_cylink_init
+dst_dnskey_to_key
+dst_eay_dss_init
+dst_free_key
+dst_generate_key
+dst_hmac_md5_init
+dst_init
+dst_key_to_buffer
+dst_key_to_dnskey
+dst_random
+dst_read_key
+dst_rsaref_init
+dst_s_build_filename
+dst_s_calculate_bits
+dst_s_conv_bignum_b64_to_u8
+dst_s_conv_bignum_u8_to_b64
+dst_s_dns_key_id
+dst_s_dump
+dst_s_filename_length
+dst_s_fopen
+dst_s_get_int16
+dst_s_get_int32
+dst_s_id_calc
+dst_s_put_int16
+dst_s_put_int32
+dst_s_quick_random
+dst_s_quick_random_set
+dst_s_random
+dst_s_semi_random
+dst_s_verify_str
+dst_sig_size
+dst_sign_data
+dst_verify_data
+dst_write_key
+endgrent
+endgrent_p
+endhostent
+endhostent_p
+endnetent
+endnetent_p
+endnetgrent
+endnetgrent_p
+endprotoent
+endprotoent_p
+endpwent
+endpwent_p
+endservent
+endservent_p
+freeaddrinfo
+freehostent
+gai_strerror
+getaddrinfo
+getgrent
+getgrent_p
+getgrgid
+getgrgid_p
+getgrnam
+getgrnam_p
+getgrouplist
+getgrouplist_p
 gethostbyaddr
+gethostbyaddr_p
 gethostbyname
 gethostbyname2
-res_mkquery
-res_query
-res_querydomain
-res_search
+gethostbyname2_p
+gethostbyname_p
+gethostent
+gethostent_p
+getipnodebyaddr
+getipnodebyname
+getnameinfo
+getnetbyaddr
+getnetbyaddr_p
+getnetbyname
+getnetbyname_p
+getnetent
+getnetent_p
+getnetgrent
+getnetgrent_p
+getprotobyname
+getprotobyname_p
+getprotobynumber
+getprotobynumber_p
+getprotoent
+getprotoent_p
+getpwent
+getpwent_p
+getpwnam
+getpwnam_p
+getpwuid
+getpwuid_p
+getservbyname
+getservbyname_p
+getservbyport
+getservbyport_p
+getservent
+getservent_p
+herror
+hesiod_end
+hesiod_free_list
+hesiod_init
+hesiod_resolve
+hesiod_to_bind
+hostent2addrinfo
+hstrerror
+innetgr
+innetgr_p
+irs_destroy
+irs_dns_gr
+irs_dns_ho
+irs_dns_nw
+irs_dns_pr
+irs_dns_pw
+irs_dns_sv
+irs_gen_gr
+irs_gen_ho
+irs_gen_ng
+irs_gen_nw
+irs_gen_pr
+irs_gen_pw
+irs_gen_sv
+irs_irp_get_full_response
+irs_irp_gr
+irs_irp_ho
+irs_irp_is_connected
+irs_irp_ng
+irs_irp_nw
+irs_irp_pr
+irs_irp_pw
+irs_irp_read_line
+irs_irp_sv
+irs_lcl_gr
+irs_lcl_ho
+irs_lcl_ng
+irs_lcl_nw
+irs_lcl_pr
+irs_lcl_pw
+irs_lcl_sv
+irs_nis_gr
+irs_nis_ho
+irs_nis_ng
+irs_nis_nw
+irs_nis_pr
+irs_nis_pw
+irs_nis_sv
+isc__gettimeofday
+isc_gethexstring
+isc_movefile
+isc_puthexstring
+isc_tohex
+lbnAdd1_16
+lbnAddN_16
+lbnBits_16
+lbnCmp_16
+lbnCopy_16
+lbnDiv1_16
+lbnDiv21_16
+lbnDiv_16
+lbnDoubleExpMod_16
+lbnDouble_16
+lbnExpMod_16
+lbnExtractBigBytes_16
+lbnExtractLittleBytes_16
+lbnFromMont_16
+lbnGcd_16
+lbnInsertBigBytes_16
+lbnInsertLittleBytes_16
+lbnInv_16
+lbnLshift_16
+lbnMemAlloc
+lbnMemFree
+lbnMemWipe
+lbnModQ_16
+lbnMontInv1_16
+lbnMontReduce_16
+lbnMulAdd1_16
+lbnMulN1_16
+lbnMulSub1_16
+lbnMul_16
+lbnNeg_16
+lbnNorm_16
+lbnRealloc
+lbnRshift_16
+lbnSquare_16
+lbnSub1_16
+lbnSubN_16
+lbnToMont_16
+lbnTwoExpMod_16
+lbnZero_16
+net_data_create
+net_data_destroy
+net_data_minimize
+res_buildprotolist
+res_destroyprotolist
+res_destroyservicelist
+res_get_bitstringsuffix
+res_get_nibblesuffix
+res_ourserver_p
+res_protocolname
+res_protocolnumber
 res_send_setqhook
 res_send_setrhook
+res_servicename
+res_servicenumber
+set_assertion_failure_callback
+setgrent
+setgrent_p
+setgroupent
+setgroupent_p
+sethostent
+sethostent_p
+setnetent
+setnetent_p
+setnetgrent
+setnetgrent_p
+setpassent
+setpassent_p
+setprotoent
+setprotoent_p
+setpwent
+setpwent_p
+setservent
+setservent_p
+shaTransform
+tree_add
+tree_delete
+tree_init
+tree_mung
+tree_srch
+tree_trav