Add FreeBSD PF Firewall to libbsd

Chris Johns chrisj at rtems.org
Wed Aug 3 00:54:55 UTC 2016


On 02/08/2016 21:27, Christian Mauderer wrote:
> - A basic support for the FreeBSD cdev subsystem. This subsystem uses
> devfs which I implementation based on the RTEMS IMFS.

Is this automatically included and what can we configure and control?

> - The PF modules can now be linked by using the SYSINIT_NEED_FIREWALL_PF
> and SYSINIT_NEED_FIREWALL_PFLOG configuration macros.

Can you please add RTEMS_BSD_CONFIG_FIREWALL_PF and 
RTEMS_BSD_CONFIG_FIREWALL_PFLOG to rtems-bsd-config.h.

This is the user interface and what I intend to document and so what we 
need to maintain and keep working into the future.

> - I ported the control tool for the firewall (pfctl) to libbsd.
>
> - I added a chapter on how to use PF to libbsd.txt. An example can be
> found in the pf01 test.

Is there support for rc.conf(5) 
(https://www.freebsd.org/cgi/man.cgi?rc.conf%285%29) in the change?

It would be nice to support ipfilter_enable, ipfilter_rules, 
ipv6_ipfilter_rules, and ipfilter_flags. I think ipfilter_program can be 
silently ignored.

I would like LibBSD's user interface to be rc.conf(5) as standard and my 
hope is the support work I have done for rc.conf makes it easy to add 
support. I am happy for other ways to configure to be present and the 
tests tend to need this however users who depend on those interface 
maybe disappointed if those interfaces change or break.

> - The method that I used for the pfctl port slightly improves the
> approach that is currently used for most other user space tools. A basic
> guide how to port a tool using the new method can be found in the
> libbsd.txt in the chapter "Porting of user space utilities".

This is a nice change.

>
> Basically I made two changes to the current approach:
>
> 1. I used a new method to handle the global variables. Basically they
> are put into a linker section that is saved before the program call and
> restored afterwards.
>
> 2. Beneath that I added some wrappers to calls like open / close or
> malloc / free. These wrappers create a list of opened files and
> allocated resources. After the program main function has finished, the
> resources are closed / freed.
>
> Please note: The method described in 1. makes it necessary to pull
> function static variables out of their functions. This works but is not
> really an optimal solution. The FreeBSD people are not really happy with
> this kind of patches. Currently I'm trying to evaluate an alternative
> solution (manipulating the object files to put the variables into a
> section) in this thread:
>
> https://lists.rtems.org/pipermail/devel/2016-August/015749.html
>

I have wondered about using libdl as a way to wrap and limit scope and 
while it is a nice idea ARM needs veneers to be fully supported. I have 
also wondered if a GCC plugin could be used when building these specific 
files to handle the linker attributes automatically. There is a nice 
Python plugin framework for GCC which may help make this easier.

Chris



More information about the devel mailing list