libbsd: How to add an option for switching off IPv6 (or other BSD Kernel configurations)
Christian Mauderer
christian.mauderer at embedded-brains.de
Tue Aug 2 10:05:16 UTC 2016
Am 02.08.2016 um 08:57 schrieb Christian Mauderer:
> Am 02.08.2016 um 04:09 schrieb Chris Johns:
>> On 02/08/2016 00:04, Christian Mauderer wrote:
[...]
>
>>> Are there any better ideas how to implement such an option?
>>
>> There are 2 parts that need be to changed to make this work. This
>> assumes you will need to control the source being built.
>>
>> The first is the module descriptions in libbsd.py and then the
>> generator. I suggest you look at the various module class methods used
>> to add source and consider adding a 'section' argument which defaults to
>> 'default' (always True). This would lets you move code into specific
>> sections, for example:
>>
>> dhcpcd_defines='-D__FreeBSD__ -DTHERE_IS_NO_FORK ...'
>> mod.addSourceFiles(
>> [
>> 'dhcpcd/ipv6.c',
>> 'dhcpcd/ipv6nd.c',
>> ],
>> mm.generator['source'](dhcpcd_defines),
>> section = 'networking.ipv6_yes'
>> )
>>
>> Note, this definition generates something that is evaluated when waf
>> runs so the 'section' populates a dict where the 'networking.ipv6_yes'
>> key is tested for True or False depending what the user specifies.
>>
>> You could also change the class constructor so you have:
>>
>> mod = builder.Module('dhcpcd', section = 'networking.dhcp')
>>
>> The dot notation would allow control of the sources at the module level
>> to finally get sorted out. The dhcpcd module becomes 'networking.dhcpcd'
>> which means build if networking and dhcpcd are True. You could work down
>> the dots checking at each point to make sure the module can be built.
>> Currently module level user control has been left hanging with commented
>> modules, eg '#mm.addModule(dev_usb_controller_add_on(mm)'. If the
>> section 'usb.dev_usb_controller_add_on' is False by default that module
>> is not built which is what we have now.
>>
>> The second part is in the waf script (wscript) which handles the user
>> interface, ie parses
>> --config="networking:ipv6=no,pink-frames-only,chrismac-buf-frames=64". I
>> would add this code in a new Python module libbsd_opts.py and imported
>> into libbsd_waf.py (generated) and called in the 'options' function in
>> libbsd_waf.py. This would parse and populate a dict the generated module
>> code uses.
>>
>
> Thanks for the detailed description. I'll need some time to understand
> everything but it looks like a good starting point.
>
[...]
>
Hello Chris,
I think I managed to understand most of it even if I still only have a
rough Idea where to start.
If I'm right, you suggested two alternative possible methods:
1) Add the section-option as parameter to a addSourceFiles. This means
it is only valid for some sources in a module.
2) Alternatively add it directly to the module.
Did I understand you correct. Or did you mean that the section is added
to both - the module and the source?
As far as I understand the first method, this could be also used for the
define that depends on the option. Something like this:
def dhcpcd(mm):
mod = builder.Module('dhcpcd')
dhcpcd_sources =
[
'dhcpcd/arp.c',
'dhcpcd/auth.c',
...
]
dhcpcd_defines_base = '-D__FreeBSD__ -DTHERE_IS_NO_FORK ...'
dhcpcd_defines_inet6 = dhcpcd_defines_base + ' -DINET6'
mod.addSourceFiles(
dhcpcd_sources,
mm.generator['source'](dhcpcd_defines_base),
section = 'networking.ipv6_no'
)
mod.addSourceFiles(
dhcpcd_sources,
mm.generator['source'](dhcpcd_defines_inet6),
section = 'networking.ipv6_yes'
)
return mod
I'm not sure how this would be possible with the second method.
Kind regards,
Christian
--
--------------------------------------------
embedded brains GmbH
Christian Mauderer
Dornierstr. 4
D-82178 Puchheim
Germany
email: christian.mauderer at embedded-brains.de
Phone: +49-89-18 94 741 - 18
Fax: +49-89-18 94 741 - 08
PGP: Public key available on request.
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
More information about the devel
mailing list