#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: route_policy
# REQUIRE: wireguard
# KEYWORD: shutdown
#

. ${RC_ROUTER_HARNESS}/etc/rc.subr

name="route_policy"
desc="Policy Based Routing Installer"

start_cmd='route_policy_start'
stop_cmd='route_policy_stop'
rcvar='route_policy_enable'

load_rc_config 'route_policy'

if [ -z "${route_policy_file}" ] 
then
    echo "Must have a route policy target file"
    exit 1
fi


do_all_routes()
{
    while [ -n "$1" ]
    do
        install_route_policy $1
        shift 1
    done
}

do_all_routes_v4()
{
    while [ -n "$1" ]
    do
        install_route_policy_v4 $1
        shift 1
    done
}

route_policy_start()
{
    clear_all_policies
    echo "# This file is generated." >> ${route_policy_file}
    echo "# Do not edit." >> ${route_policy_file}
    echo "" >> ${route_policy_file}

    # TODO: Record the policies one-per-line via a helper loop subroutine?
    echo "# (Generated with \`${route_policies}\`, at `date`.)" >> ${route_policy_file}
    echo "# (Generated with \`${route_policies_v4}\`, at `date`.)" >> ${route_policy_file}
    echo "" >> ${route_policy_file}
    echo "" >> ${route_policy_file}

    do_all_routes ${route_policies}
    do_all_routes_v4 ${route_policies_v4}

    echo "" >> ${route_policy_file}
    echo -n "# v" >> ${route_policy_file}
    echo "im: ft=pf" >> ${route_policy_file}

    #pfctl -a "route-policies" -f ${route_policy_file}
    #pfctl -f  ${pf_rules} 

    # UGLY hack/workaround because of a kernel panic bug from
    # rtable rules in files included in `pf` anchors in FreeBSD 15
    service pf reload
}

route_policy_stop()
{
    clear_all_policies
}




################ Epilogue

run_rc_command "$1"

# vim: ft=bash
