About Bind Plugin development

Ondřej Surý ondrej at isc.org
Sat Nov 22 11:46:40 UTC 2025


Sure, if you want to use BIND 9 headers than you need to use all the headers, including config.h and then it is probably easier to add your plugin to the BIND 9 source tree.

Is your plugin under compatible open source license? If yes, we can take a look, and help.

Or perhaps you might start by describing what is your plugin meant for. There might be existing solution for this.

Ondrej
--
Ondřej Surý — ISC (He/Him)

My working hours and your working hours may be different. Please do not feel obligated to reply outside your normal working hours.

> On 22. 11. 2025, at 12:40, Chunhui Ouyang <jack9603301 at 163.com> wrote:
> 
> Strangely, if I don't use config.h, I get a whole bunch of compilation errors, such as:
> 
> ```
> gcc -shared -fPIC -I /root/bind-project/lib/isc/include/ -I /root/bind-project/bind/lib/isccfg/include/ -I /root/bind-project/bind/lib/ns/include/ main.c -o filter-plugin.so
> In file included from /usr/include/isc/quota.h:34,
>                 from /root/bind-project/bind/lib/ns/include/ns/client.h:65,
>                 from main.c:15:
> /usr/include/isc/job.h:40:38: error: field ‘wfcq_node’ has incomplete type
>   40 |                 struct cds_wfcq_node wfcq_node;
>      |                                      ^~~~~~~~~
> In file included from /usr/include/isc/mutex.h:24,
>                 from /usr/include/isc/mem.h:23,
>                 from /usr/include/isc/buffer.h:112,
>                 from main.c:5:
> /usr/include/isc/quota.h:59:1: error: invalid application of ‘sizeof’ to incomplete type ‘struct __cds_wfcq_head’
>   59 | STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(struct __cds_wfcq_head),
>      | ^~~~~~~~~~~~~
> /usr/include/isc/quota.h:59:15: error: expression in static assertion is not an integer
>   59 | STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(struct __cds_wfcq_head),
>      |               ^~~~~~~~~~~~~~~~~~~~~
> /usr/include/isc/quota.h:68:38: error: field ‘head’ has incomplete type
>   68 |                 struct cds_wfcq_head head;
>      |                                      ^~~~
> /usr/include/isc/quota.h:70:47: error: invalid application of ‘sizeof’ to incomplete type ‘struct __cds_wfcq_head’
>   70 |                                        sizeof(struct __cds_wfcq_head)];
>      |                                               ^~~~~~
> /usr/include/isc/quota.h:71:38: error: field ‘tail’ has incomplete type
>   71 |                 struct cds_wfcq_tail tail;
>      |                                      ^~~~
> In file included from /root/bind-project/bind/lib/ns/include/ns/client.h:68:
> /usr/include/dns/db.h:234:33: error: field ‘rcu_head’ has incomplete type
>  234 |         struct rcu_head         rcu_head;
>      |                                 ^~~~~~~~
> make: *** [Makefile:11: filter-plugin.so] Error 1
> ```
> 
> * Ondřej Surý <ondrej at isc.org> [2025-11-22 :32:13]:
> 
>> We don’t guidelines for out of tree plugins, but you should not need config.h from the build. The plugin just need to export the needed symbols.
>> 
>> You can contribute these guidelines (or more plugin hooks if needed), this is open source after all…
>> 
>> Ondrej
>> --
>> Ondřej Surý — ISC (He/Him)
>> 
>> My working hours and your working hours may be different. Please do not feel obligated to reply outside your normal working hours.
>> 
>>>> On 22. 11. 2025, at 11:51, Chunhui Ouyang <jack9603301 at 163.com> wrote:
>>> 
>>> Hello, could you provide a guide on how to organize the project structure for third-party plugin development? I've noticed that current compilation requires the already built bind9's config.h file, but this file doesn't exist in a brand new project. Does this mean it doesn't allow external compilation of the source code?
>>> 
>>> Looking forward to your reply.
>>> 
>>> * Colin Vidal <colin at isc.org> [2025-11-21 :14:06]:
>>> 
>>>>> On Fri, 2025-11-21 at 23:29 +0800, Chunhui Ouyang wrote:
>>>>> Could you tell me what the entry point of the plugin is?
>>>>> 
>>>> 
>>>> As explained in the reference for plugin development I sent you
>>>> earlier:
>>>> 
>>>> "At various locations within the named source code, there are "hook
>>>> points" at which a plugin may register itself. When a hook point is
>>>> reached while named is running, it is checked to see whether any
>>>> plugins have registered themselves there; if so, the associated "hook
>>>> action" - a function within the plugin library - is called."
>>>> 
>>>> So there is no really a single "entry" point, but rather multiples ones
>>>> depending where the plugin is hooked. (Plus the four `plugin_*` API to
>>>> implement for registering, etc.)
>>>> 
>>>> Side note: please answer emails with the mailing list in CC, so
>>>> everyone can see, benefit and contribute to this thread.
>>>> 
>>>> Thanks
>>>> 
>>>> Colin Vidal
>>>> 
>>> --
>>> Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from this list.
>>> <signature.asc>
>> 
> <signature.asc>



More information about the bind-users mailing list