Re: About Bind Plugin development

Ondřej Surý <[email protected]>
Newsgroups gmane.network.dns.bind9.user,gmane.network.dns.bind.user
Message-ID <[email protected]>
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 <[email protected]> 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ý <[email protected]> [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 <[email protected]> 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 <[email protected]> [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>

-- 
Visit https://lists.isc.org/mailman/listinfo/bind-users to unsubscribe from this list.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.