#!/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