Much of the core bits are initially ported.
This should be mostly independent of my configs, now.
This commit is contained in:
@@ -220,7 +220,7 @@ If you develop a new program, and you want it to be of the greatest possible use
|
||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
rc.router
|
||||
Copyright (C) 2026 adam
|
||||
Copyright (C) 2026 ADAM David Alan Martin
|
||||
|
||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
|
||||
|
||||
@@ -1,3 +1,121 @@
|
||||
# rc.router
|
||||
|
||||
FreeBSD's Init/RC system could use some extensions for easy configuration of homelab routers.
|
||||
The FreeBSD Init/RC system could use some extensions for easy configuration of homelab
|
||||
and SOHO routers.
|
||||
|
||||
These files provide such a set of extensions. These extensions, while providing a lot
|
||||
of advanced functionality, are not meant for anything other than edge routers.
|
||||
"Core router" functionality (which bridges between transit networks) is not provided
|
||||
for by this configuration mechanism.
|
||||
|
||||
`rc.router` requires FreeBSD-15 or greater. (It might work for some configurations
|
||||
on FreeBSD-14, but I no longer run any routers with it on FreeBSD-14.)
|
||||
|
||||
## How to setup (Easy dual-stack example With Git)
|
||||
|
||||
Executing this sequence of sample commands will setup a basic Dual-stack router
|
||||
for Verizon FIOS. There are a few pre-canned ISP configuration files which help
|
||||
guide what settings are needed for which ISPs. (Mostly this impacts IPv6 settings
|
||||
not IPv4 settings.)
|
||||
|
||||
```
|
||||
$ cd /etc
|
||||
$ mkdir router-conf
|
||||
$ cd router-conf
|
||||
$ git init .
|
||||
$ echo << EOF > rc.conf
|
||||
# Configure a basic external v4 ISP
|
||||
external_card="em0"
|
||||
|
||||
add_canned_isp ${external_card} fios_1 verizon_fios
|
||||
|
||||
|
||||
# Configure a basic internal v4 network
|
||||
internal_card="re0"
|
||||
add_net ${internal_card} 0 main
|
||||
|
||||
EOF
|
||||
$ git add rc.conf
|
||||
$ git submodule add rc.router https://gitea.nerdland.org/adam/rc.router
|
||||
$ git commit -m "FIRST POST!!!"
|
||||
$ echo 'rc_router_dir="/etc/router-conf/rc.router"' >> /etc/rc.conf
|
||||
$ echo 'rc_router_conf_dif="/etc/router-conf"' >> /etc/rc.conf
|
||||
$ echo ". ${rc_router_dir}/rc.entry" >> /etc/rc.conf
|
||||
```
|
||||
|
||||
## How to setup (Easy v4-only example With Git)
|
||||
|
||||
Executing this sequence of sample commands will setup a basic v4 NAT/dhcp router.
|
||||
|
||||
```
|
||||
$ cd /etc
|
||||
$ mkdir router-conf
|
||||
$ cd router-conf
|
||||
$ git init .
|
||||
$ echo << EOF > rc.conf
|
||||
# Configure a basic external v4 ISP
|
||||
external_card="em0"
|
||||
add_v4_isp ${external_card} dhcp
|
||||
|
||||
|
||||
|
||||
# Configure a basic internal v4 network
|
||||
internal_card="re0"
|
||||
v4_net="172.26"
|
||||
|
||||
add_v4_net ${internal_card} 0 main
|
||||
EOF
|
||||
$ git add rc.conf
|
||||
$ git submodule add rc.router https://gitea.nerdland.org/adam/rc.router
|
||||
$ git commit -m "FIRST POST!!!"
|
||||
$ echo 'rc_router_dir="/etc/router-conf/rc.router"' >> /etc/rc.conf
|
||||
$ echo 'rc_router_conf_dif="/etc/router-conf"' >> /etc/rc.conf
|
||||
$ echo ". ${rc_router_dir}/rc.entry" >> /etc/rc.conf
|
||||
```
|
||||
|
||||
In this example, `em0` will be the uplink card, and will dhcpv4 configure itself. `re0` is
|
||||
the primary internal interface card, which will be configured to host DHCP for internal
|
||||
`172.26.0.0/24` addresses, in the basic default pool of `172.26.0.100` thru `172.26.0.200`.
|
||||
The router's internal address in this subnet is `172.26.0.1/24`. And `8.8.8.8` will be used
|
||||
as the default resolver for everyone within this subnet.
|
||||
|
||||
## Interoperation with regular FreeBSD `init` and `rc.conf` configuration
|
||||
|
||||
These scripts are not meant to replace the FreeBSD init script mechanisms. Instead these
|
||||
scripts seek to augment the system. The scripts provide ways to set clusters of related
|
||||
config variables (and to generate other related configuration files) such that hybrid
|
||||
configurations can be made. The various commands, such as `add_v4_net` result in the
|
||||
setting and updating of various `rc.conf` variables as-if the user simply wrote the correct
|
||||
configuration settings at that point in the `rc.conf` file.
|
||||
|
||||
As such, these mechanisms are meant to co-exist with manual variable setting and manually
|
||||
maintained configuration files for things such as DHCP. This permits an adoption path
|
||||
other than "big bang cutover". The `rc.router` commands are careful to update-by-append
|
||||
to certain variables, rather than to assume direct ownership of all variables. Thus,
|
||||
`add_net xy0 402` and `ifconfig_xy0_43_alias0="192.168.10.4/24"` could be safely
|
||||
intermingled. (Right now, the scripts assume ownership over specific related
|
||||
variables for interfaces and vlans that they create.)
|
||||
|
||||
## IPv6 posture and readiness
|
||||
|
||||
`rc.router` is designed as an IPv6-first package. While IPv4-only networks are still
|
||||
possible with this package, the defaults are tuned for and assume IPv6. Pre-canned
|
||||
router configurations should gracefully (albeit with some timeouts) fail back to v4-only
|
||||
modes, when IPv6 is not available from those ISPs, due to CPE concerns.
|
||||
|
||||
IPv6 configuration with `rc.router` permits DHCPv6 `IA_PD` with Router Advertisements or
|
||||
static configuration for the ISP side. For the internal side, SLAAC is the only
|
||||
configuration provided. DHCPv6 internally for `IA_NA` is not implemented. `rc.router`
|
||||
is not expliticly incompatible with DHCPv6 internal provisioning, but no effort has
|
||||
been made to implement or test it. Given that a large number of consumer devices
|
||||
(Android, in particular) refuse to provision via DHCPv6, SLAAC must be used internally
|
||||
for any deployment to accommodate the widest swathe of client devices.
|
||||
|
||||
`rc.router` installs `tayga` and users are encouraged to use its `map` feature in
|
||||
the configuration file to provide IPv4 addresses for IPv6-only hosts, or vice-versa.
|
||||
This is intended to permit incremental migration for IPv4-only homelabs to dual-stack
|
||||
and IPv6-only deployments.
|
||||
|
||||
The DHCPv4 configuration generator is capable of emitting Option 108 for IPv6-mostly
|
||||
deployments.
|
||||
.
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This is rc.conf defaults for rc.router - a file full of useful
|
||||
# variables that you can set to change the default startup behavior
|
||||
# of your system. You should not edit this file! Put any
|
||||
# overrides into one of the ${rc_conf_files} instead and you will
|
||||
# be able to update these defaults later without spamming your
|
||||
# local configuration information.
|
||||
#
|
||||
# The ${rc_conf_files} files should only contain values which override
|
||||
# values set in this file. This eases the upgrade path when defaults
|
||||
# are changed and new features are added.
|
||||
#
|
||||
# All arguments must be in double or single quotes.
|
||||
#
|
||||
# For a more detailed explanation of all the rc.conf variables, please
|
||||
# refer to the rc.conf(5) manual page.
|
||||
#
|
||||
# For the `rc.router` project, router configurations should be tuned in
|
||||
# `${rc_router_conf_dir}/rc.conf`.
|
||||
|
||||
rc_router_debug="NO"
|
||||
|
||||
generate_internal_dhcpv4_enable='YES'
|
||||
generate_isp_dhcp_enable='YES'
|
||||
generate_rtadvd_conf_enable="YES"
|
||||
|
||||
rc_router_gen_dir=${rc_router_dir}/gen
|
||||
|
||||
localnet_enable='NO'
|
||||
rtadvd_pltimedecr='NO'
|
||||
rtadvd_vltimedecr='NO'
|
||||
|
||||
v4_net="192.168"
|
||||
dhcpv4_pool_lo="100"
|
||||
dhcpv4_pool_hi="200"
|
||||
|
||||
rc_router_network_name="Default Network Name"
|
||||
rc_router_ula_prefix_size="48"
|
||||
|
||||
rtsold_flags="-F"
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This emulates a minimal `/etc/rc.conf` that one would create in FreeBSD to
|
||||
# hand off control to `rc.router`.
|
||||
|
||||
rc_router_dir="${RC_ROUTER_HARNESS}/.."
|
||||
rc_router_conf_dir="${RC_ROUTER_HARNESS}/../test-conf/"
|
||||
|
||||
. ${rc_router_dir}/rc.entry
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,29 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This file exists to let me test the function of these scripts outside
|
||||
# of the FreeBSD RC environment.
|
||||
#
|
||||
# Just enough bare minimum facilities are present, to permit my rc.d scripts
|
||||
# to run. I mostly use this to test the scripts which generate configuration
|
||||
# files.
|
||||
|
||||
load_rc_config()
|
||||
{
|
||||
true
|
||||
}
|
||||
|
||||
|
||||
run_rc_command()
|
||||
{
|
||||
if [ -z "${1}" ]
|
||||
then
|
||||
echo "Error. Must supply an rc.d script command."
|
||||
exit 254
|
||||
fi
|
||||
eval \${${1}_cmd}
|
||||
}
|
||||
|
||||
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.conf
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
v6_prefix_len="56"
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
v6_prefix_len="60"
|
||||
|
||||
# vim: ft=bash
|
||||
Executable
+73
@@ -0,0 +1,73 @@
|
||||
_genfile="${route_policy_file}"
|
||||
if [ -z "${_genfile}" ]
|
||||
then
|
||||
_genfile="/dev/fd/1"
|
||||
fi
|
||||
|
||||
__install_route_policy()
|
||||
{
|
||||
iface=$1;shift 1
|
||||
network=$1;shift 1
|
||||
table=$1;shift 1
|
||||
|
||||
echo "match out on ${iface} from !fd00::/8 to ${network} rtable ${table}" >> $1
|
||||
echo "match in on ${iface} from ${network} to !fd00::/8 rtable ${table}" >> $1
|
||||
}
|
||||
|
||||
__install_route_policy_v4()
|
||||
{
|
||||
iface=$1;shift 1
|
||||
network=$1;shift 1
|
||||
table=$1;shift 1
|
||||
|
||||
echo "match out on ${iface} to ${network} rtable ${table}" >> $1
|
||||
echo "match in on ${iface} from ${network} rtable ${table}" >> $1
|
||||
}
|
||||
|
||||
_install_route_policy()
|
||||
{
|
||||
iface=$1;shift 1
|
||||
split=`echo $1 | sed -e 's/->/ /g'`;shift 1
|
||||
|
||||
__install_route_policy $iface ${split} $*
|
||||
}
|
||||
|
||||
_install_route_policy_v4()
|
||||
{
|
||||
iface=$1;shift 1
|
||||
split=`echo $1 | sed -e 's/->/ /g'`;shift 1
|
||||
|
||||
__install_route_policy_v4 $iface ${split} $*
|
||||
}
|
||||
|
||||
install_route_policy()
|
||||
{
|
||||
_install_route_policy internal $* ${_genfile}
|
||||
}
|
||||
|
||||
install_route_policy_v4()
|
||||
{
|
||||
_install_route_policy_v4 internal $* ${_genfile}
|
||||
}
|
||||
|
||||
|
||||
add_route_policy()
|
||||
{
|
||||
route_policies="${route_policies} $1->$2"
|
||||
}
|
||||
|
||||
add_route_policy_v4()
|
||||
{
|
||||
route_policies_v4="${route_policies_v4} $1->$2"
|
||||
}
|
||||
|
||||
clear_all_policies()
|
||||
{
|
||||
echo -n > $_genfile
|
||||
}
|
||||
|
||||
#add_route_policy 2602:f6a8:1::/48@9
|
||||
#add_route_policy 2001:db8:f6a8:1::/64@42
|
||||
|
||||
|
||||
# vim: ft=bash
|
||||
Executable
+35
@@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: generate_internal_dhcpv4
|
||||
# REQUIRE: netif
|
||||
# BEFORE: isc-dhcp
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.subr
|
||||
|
||||
name='generate_internal_dhcpv4'
|
||||
|
||||
start_cmd='generate_dhcp_start'
|
||||
stop_cmd='generate_dhcp_stop'
|
||||
rcvar='generate_internal_dhcpv4_enable'
|
||||
|
||||
load_rc_config 'generate_internal_dhcpv4'
|
||||
|
||||
generate_dhcp_start()
|
||||
{
|
||||
_emit_dhcpv4
|
||||
}
|
||||
|
||||
generate_dhcp_stop()
|
||||
{
|
||||
true
|
||||
}
|
||||
|
||||
################ Epilogue
|
||||
|
||||
run_rc_command "$1"
|
||||
|
||||
# vim: ft=bash
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: generate_isp_dhcp
|
||||
# REQUIRE: netif
|
||||
# BEFORE: dhcp6c
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.subr
|
||||
|
||||
name='generate_isp_dhcp'
|
||||
|
||||
start_cmd='generate_isp_dhcp_start'
|
||||
stop_cmd='generate_isp_dhcp_stop'
|
||||
rcvar='generate_isp_dhcp_enable'
|
||||
|
||||
load_rc_config 'generate_isp_dhcp'
|
||||
|
||||
generate_isp_dhcp_start()
|
||||
{
|
||||
_emit_dhcpv6
|
||||
cat ${rc_router_gen_dir}/dhcp6c.*.conf > ${rc_router_gen_dir}/dhcp6c.conf
|
||||
}
|
||||
|
||||
generate_isp_dhcp_stop()
|
||||
{
|
||||
true
|
||||
}
|
||||
|
||||
################ Epilogue
|
||||
|
||||
run_rc_command "$1"
|
||||
|
||||
# vim: ft=bash
|
||||
Executable
+131
@@ -0,0 +1,131 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: generate_rtadvd_conf
|
||||
# REQUIRE: dhcp6c
|
||||
# BEFORE: rtadvd
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.subr
|
||||
|
||||
name='generate_rtadvd_conf'
|
||||
|
||||
start_cmd='generate_rtadvd_conf_start'
|
||||
stop_cmd='generate_rtadvd_conf_stop'
|
||||
rcvar='generate_rtadvd_conf_enable'
|
||||
|
||||
load_rc_config 'generate_rtadvd_conf'
|
||||
|
||||
[ -z "$generate_rtadvd_conf_enable" ] && generate_rtadvd_conf_enable='NO'
|
||||
|
||||
_prepare_var()
|
||||
{
|
||||
var=$1
|
||||
opt=$2
|
||||
|
||||
eval _value=\${${var}}
|
||||
eval _${opt}=""
|
||||
if [ -n "${_value}" ]
|
||||
then
|
||||
_text="${opt}=\\\"${_value}\\\""
|
||||
eval _${opt}=\"${_text}\"
|
||||
fi
|
||||
}
|
||||
|
||||
_prepare_num()
|
||||
{
|
||||
var=$1
|
||||
opt=$2
|
||||
|
||||
eval _value=\${${var}}
|
||||
eval _${opt}\=""
|
||||
if [ -n "${_value}" ]
|
||||
then
|
||||
_text="${opt}\#${_value}"
|
||||
eval _${opt}=\"${_text}\"
|
||||
fi
|
||||
}
|
||||
|
||||
_prepare_opt()
|
||||
{
|
||||
var=$1
|
||||
opt=$2
|
||||
|
||||
eval _${opt}\=""
|
||||
if [ `option_selected ${var}` = "YES" ]
|
||||
then
|
||||
_text="${opt}"
|
||||
eval _${opt}=\"${_text}\"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
_build_rtadv()
|
||||
{
|
||||
gen_rtadv_dir=${rc_router_gen_dir}
|
||||
rtadvd_conf=${gen_rtadv_dir}/rtadvd.conf
|
||||
mkdir -p ${gen_rtadv_dir}
|
||||
|
||||
_search_list=""
|
||||
if [ -n "${rtadvd_dns_search_list}" ]
|
||||
then
|
||||
_search_list=$( echo ${rtadvd_dns_search_list} | sed -e 's/ */,/g' -e 's/^,//' -e 's/,$//' )
|
||||
fi
|
||||
|
||||
_prepare_var _search_list dnssl
|
||||
|
||||
_prepare_var rtadvd_pref64_prefix pref64
|
||||
|
||||
_prepare_num rtadvd_mininterval mininterval
|
||||
_prepare_num rtadvd_maxinterval maxinterval
|
||||
|
||||
_prepare_num rtadvd_pltime pltime
|
||||
_prepare_opt rtadvd_pltimedecr pltimedecr
|
||||
|
||||
_prepare_num rtadvd_vltime vltime
|
||||
_prepare_opt rtadvd_vltimedecr vltimedecr
|
||||
|
||||
_prepare_num rtadvd_rltime rltime
|
||||
|
||||
cat ${rc_router_dir}/templates/rtadvd.conf \
|
||||
| sed \
|
||||
-e "s/@PREF64@/${_pref64}/" \
|
||||
-e "s/@MININTERVAL@/${_mininterval}/" \
|
||||
-e "s/@MAXINTERVAL@/${_maxinterval}/" \
|
||||
-e "s/@PLTIME@/${_pltime}/" \
|
||||
-e "s/@PLTIME_DECR@/${_pltimedecr}/" \
|
||||
-e "s/@VLTIME@/${_vltime}/" \
|
||||
-e "s/@VLTIME_DECR@/${_vltimedecr}/" \
|
||||
-e "s/@RLTIME@/${_rltime}/" \
|
||||
-e "s/@DNS_SEARCHLIST@/${_dnssl}/" \
|
||||
-e "s/@DNS_SERVER@/${rtadvd_dns_server}/" \
|
||||
> ${rtadvd_conf}
|
||||
|
||||
|
||||
echo "" >> ${rtadvd_conf}
|
||||
echo "" >> ${rtadvd_conf}
|
||||
|
||||
for interface in ${rtadvd_interfaces}
|
||||
do
|
||||
echo "${interface}:tc=settings" >> ${rtadvd_conf}
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
generate_rtadvd_conf_start()
|
||||
{
|
||||
_build_rtadv
|
||||
}
|
||||
|
||||
generate_rtadvd_conf_stop()
|
||||
{
|
||||
true
|
||||
}
|
||||
|
||||
################ Epilogue
|
||||
|
||||
run_rc_command "$1"
|
||||
|
||||
# vim: ft=bash
|
||||
Executable
+103
@@ -0,0 +1,103 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: localnet
|
||||
# REQUIRE: dhcp6c
|
||||
# BEFORE: named
|
||||
# KEYWORD: shutdown
|
||||
#
|
||||
|
||||
# The purpose of this script is to generate various ISP prefix dependent files.
|
||||
#
|
||||
# Specifically, the DNS (BIND) acls file for handling various views, a local ISP
|
||||
# range address for the router itself (on a dedicated loopback device), and
|
||||
# attach any static addresses for this machine to another loopback device.
|
||||
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.subr
|
||||
|
||||
|
||||
name='localnet'
|
||||
|
||||
extra_commands="rebuild_zoneinfo"
|
||||
start_cmd='localnet_start'
|
||||
stop_cmd='localnet_stop'
|
||||
rebuild_zoneinfo_cmd="localnet_build_zoneinfo"
|
||||
rcvar='localnet_enable'
|
||||
|
||||
load_rc_config 'localnet'
|
||||
|
||||
|
||||
localnet_build_zoneinfo()
|
||||
{
|
||||
compute_addrs
|
||||
localnet_build_zoneinfo_impl
|
||||
}
|
||||
|
||||
|
||||
localnet_build_zoneinfo_impl()
|
||||
{
|
||||
#build_zoneinfo ${isp_prefix} 31 ${router_conf_dir}/namedb/local-machines.defs
|
||||
build_zoneinfo ${isp_prefix} 31 ${rc_router_conf_dir}/namedb/local-machines.defs > ${rc_router_gen_dir}/zone.hosts.nerdland.org
|
||||
}
|
||||
|
||||
localnet_build_acls()
|
||||
{
|
||||
gen_acls_dir=${rc_router_gen_dir}/namedb
|
||||
mkdir -p ${gen_acls_dir}
|
||||
cat ${rc_router_dir}/templates/named.acls.conf \
|
||||
| sed \
|
||||
-e "s/@ISP_PREFIX@/${isp_prefix}/g" \
|
||||
-e "s/@ULA_PREFIX@/${secret_ip6_net}/g" \
|
||||
> ${gen_acls_dir}/acls.conf
|
||||
}
|
||||
|
||||
compute_addrs() {
|
||||
|
||||
loop=0
|
||||
while [ -z "${v6addr}" -a ${loop} -lt 5 ]
|
||||
do
|
||||
[ ${loop} -ne 0 ] && sleep 5
|
||||
# todo: Adjust our ipv6 hint... get from a var?
|
||||
v6addr=$(ifconfig ${localnet_first_nic} | grep "inet6 [23]...:" | head -1 | awk '{print $2}')
|
||||
echo "V6 addr is: ${v6addr}"
|
||||
loop=$(( ${loop} + 1 ))
|
||||
done
|
||||
|
||||
echo "V6 addr is: ${v6addr}"
|
||||
three_quads=$(echo ${v6addr} | awk -F ':' '{print $1":"$2":"$3}')
|
||||
echo "First three quads are: ${three_quads}"
|
||||
last_quad=$(echo ${v6addr} | awk -F ':' '{print $4}')
|
||||
echo "Last quad is: ${last_quad}"
|
||||
last_prefix=$(echo ${last_quad} | rev | awk '{print $1"0000"}' | cut -c 3,4 | rev | sed -e 's/^0//')
|
||||
echo "Last prefix is: ${last_prefix}"
|
||||
|
||||
isp_prefix="${three_quads}:${last_prefix}"
|
||||
base_addr=" inet6 ${isp_prefix}ff::1"
|
||||
}
|
||||
|
||||
|
||||
localnet_start() {
|
||||
cp ${rc_router_conf_dir}/resolv.conf.master ${rc_router_conf_dir}/resolv.conf
|
||||
compute_addrs
|
||||
ifconfig lo1 create ${base_addr} prefer_source
|
||||
|
||||
# DO NOT USE prefer_source for this address...
|
||||
# It will cause confusion for the wireguard tunnels underneath...
|
||||
# It also could cause DNS recursion to fail -- routing as the nested
|
||||
# connections...
|
||||
|
||||
localnet_build_acls
|
||||
localnet_build_zoneinfo_impl
|
||||
}
|
||||
|
||||
localnet_stop() {
|
||||
compute_addrs
|
||||
ifconfig lo0 ${base_addr} delete
|
||||
|
||||
ifconfig lo1 destroy
|
||||
}
|
||||
|
||||
run_rc_command "$1"
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -z "${rc_router_dir}" ]
|
||||
then
|
||||
echo "Unable to proceed -- rc_router_dir is not set." >& /dev/fd/2
|
||||
echo "You must set this variable before sourcing `rc.router/rc.entry`" >& /dev/fd/2
|
||||
exit 254
|
||||
fi
|
||||
|
||||
if [ -z "${rc_router_conf_dir}" ]
|
||||
then
|
||||
echo "Unable to proceed -- rc_router_conf_dir is not set." >& /dev/fd/2
|
||||
echo "You must set this variable before sourcing `rc.router/rc.entry`" >& /dev/fd/2
|
||||
exit 254
|
||||
fi
|
||||
|
||||
. ${rc_router_dir}/rc.subr
|
||||
|
||||
. ${rc_router_dir}/defaults/rc.conf
|
||||
|
||||
. ${rc_router_conf_dir}/rc.conf
|
||||
|
||||
_rc_router_epilogue
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,629 @@
|
||||
_debug()
|
||||
{
|
||||
echo 1>&2 $*
|
||||
}
|
||||
|
||||
_echo()
|
||||
{
|
||||
if [ "${rc_router_debug}" = "YES" ]
|
||||
then
|
||||
_debug $*
|
||||
fi
|
||||
}
|
||||
|
||||
_warn()
|
||||
{
|
||||
if [ -x /usr/bin/logger ]; then
|
||||
logger "$0: WARNING: $*"
|
||||
fi
|
||||
echo 1>&2 "$0: WARNING: $*"
|
||||
}
|
||||
|
||||
__repeat()
|
||||
{
|
||||
__func=$1;shift 1
|
||||
|
||||
while [ "$1" != "" ]
|
||||
do
|
||||
${__func} $1
|
||||
shift 1
|
||||
done
|
||||
}
|
||||
|
||||
__clone_interface()
|
||||
{
|
||||
_echo Adding $1 to cloned interfaces
|
||||
cloned_interfaces="${cloned_interfaces} $1"
|
||||
_echo "Cloned interfaces are now \"${cloned_interfaces}\""
|
||||
}
|
||||
|
||||
clone_interfaces()
|
||||
{
|
||||
__repeat __clone_interface $*
|
||||
}
|
||||
|
||||
clone_interface()
|
||||
{
|
||||
clone_interfaces $*
|
||||
}
|
||||
|
||||
__add_wireguard_interface()
|
||||
{
|
||||
_echo "Adding $1 to ${wireguard_interfaces}"
|
||||
wireguard_enable="YES"
|
||||
wireguard_interfaces="${wireguard_interfaces} $1"
|
||||
}
|
||||
|
||||
add_wireguard_interfaces()
|
||||
{
|
||||
__repeat __add_wireguard_interface $*
|
||||
}
|
||||
|
||||
add_wireguard_interface()
|
||||
{
|
||||
add_wireguard_interfaces $*
|
||||
}
|
||||
|
||||
add_wireguard_route()
|
||||
{
|
||||
add_route_policy $1 $2
|
||||
add_wireguard_interface wg$2
|
||||
}
|
||||
|
||||
add_wireguard_route_v4()
|
||||
{
|
||||
add_route_policy_v4 $1 $2
|
||||
# Assuming v6 did this, for now...
|
||||
#add_wireguard_interface wg$2
|
||||
}
|
||||
|
||||
compute_56_net()
|
||||
{
|
||||
_echo Running 56 > /dev/fd/2
|
||||
_echo 'Computing for `'$1'`' > /dev/fd/2
|
||||
echo $1 | _hash | cut -c 1-12 | sed -e 's/\([0-9a-f][0-9a-f]\)/\1:/g' | awk -F: '{print "fd"$1":"$2$3":"$4$5":"$6}'
|
||||
}
|
||||
|
||||
compute_48_net()
|
||||
{
|
||||
_echo Running 48 > /dev/fd/2
|
||||
_echo 'Computing for `'$1'`' > /dev/fd/2
|
||||
echo $1 | _hash | cut -c 1-10 | sed -e 's/\([0-9a-f][0-9a-f]\)/\1:/g' | awk -F: '{print "fd"$1":"$2$3":"$4$5":"}'
|
||||
}
|
||||
|
||||
compute_net()
|
||||
{
|
||||
_echo 'Computing for `'$2'`' > /dev/fd/2
|
||||
case $1 in
|
||||
56)
|
||||
compute_56_net "$2"
|
||||
;;
|
||||
|
||||
48)
|
||||
compute_48_net "$2"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
compute_v4_net()
|
||||
{
|
||||
_card=$(echo ${_iface} | sed -e's/\.[0-9]*//')
|
||||
eval _net=\${v4_net_${_card}}
|
||||
if [ -z "${_net}" ]
|
||||
then
|
||||
_net=${v4_net}
|
||||
fi
|
||||
_prefix=${_net}
|
||||
_subnet=$2
|
||||
echo "${_prefix}.${_subnet}.1/24"
|
||||
}
|
||||
|
||||
compute_v6_net()
|
||||
{
|
||||
_subnet=$2
|
||||
_prefix=$1
|
||||
echo "${_prefix}${_subnet}::1"
|
||||
}
|
||||
|
||||
_compute_nets()
|
||||
{
|
||||
_card=$1
|
||||
shift 1
|
||||
_vlan=$1
|
||||
shift 1
|
||||
|
||||
_base=$((${_vlan}%10))
|
||||
_net=$((${_vlan}/100))
|
||||
_subnet=${_net}${_base}
|
||||
_extra_address=""
|
||||
|
||||
if [ -z "${1}" ]
|
||||
then
|
||||
echo "Error in configuration: No network class given"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
_class=$1
|
||||
shift 1
|
||||
|
||||
_priv="YES"
|
||||
while true
|
||||
do
|
||||
case ${1} in
|
||||
"no_ula")
|
||||
_priv="NO"
|
||||
;;
|
||||
|
||||
"no_isp")
|
||||
_isp=""
|
||||
;;
|
||||
|
||||
isp=*)
|
||||
_isp=`echo ${1} | sed -e 's/isp=//'`
|
||||
;;
|
||||
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
|
||||
shift 1
|
||||
done
|
||||
|
||||
while [ -n "${1}" ]
|
||||
do
|
||||
_extra_address="${_extra_address} $1"
|
||||
shift 1
|
||||
done
|
||||
}
|
||||
|
||||
_add_vlan()
|
||||
{
|
||||
_card=$1
|
||||
_vlan=$2
|
||||
_vlans_var=vlans_${_card}
|
||||
eval _vlans="\${${_vlans_var}}"
|
||||
|
||||
_echo "XXX ${_vlans} XXX"
|
||||
_echo "QQQ ${_vlans} QQQ" | grep ${_vlan}
|
||||
_qres=$?
|
||||
_echo $_qres
|
||||
echo "${_vlans}" | grep ${_vlan} > /dev/null
|
||||
_res=$?
|
||||
_echo $_res
|
||||
|
||||
if [ 0 -ne $_res ]
|
||||
then
|
||||
_echo vlans_${_card}="\${vlans_${_card}} ${_vlan}"
|
||||
eval vlans_${_card}=\"\${vlans_${_card}} ${_vlan}\"
|
||||
else
|
||||
_echo "Not adding vlan ${_vlan} to card ${_card}"
|
||||
fi
|
||||
}
|
||||
|
||||
_add_rtadv()
|
||||
{
|
||||
_card=$1
|
||||
_vlan=$2
|
||||
|
||||
_subcard="${_card}.${_vlan}"
|
||||
|
||||
_echo "XXX ${rtadvd_interfaces} XXX"
|
||||
_echo "QQQ ${rtadvd_interfaces} QQQ" | grep ${_subcard}
|
||||
_qres=$?
|
||||
_echo $_qres
|
||||
echo "${rtadvd_interfaces}" | grep ${_subcard} > /dev/null
|
||||
_res=$?
|
||||
_echo $_res
|
||||
|
||||
if [ 0 -ne $_res ]
|
||||
then
|
||||
_echo rtadvd_interfaces="${rtadvd_interfaces} ${_subcard}"
|
||||
rtadvd_interfaces="${rtadvd_interfaces} ${_subcard}"
|
||||
else
|
||||
_echo "Not adding subcard ${_subcard} to ipv6 rtadvd list: ${rtadvd_interfaces}"
|
||||
fi
|
||||
}
|
||||
|
||||
_add_dhcpv6()
|
||||
{
|
||||
_iface=${1}
|
||||
_isp=${2}
|
||||
if [ -z "${_isp}" ]
|
||||
then
|
||||
echo "No ISP found..."
|
||||
exit 255
|
||||
fi
|
||||
|
||||
eval dhcpv6_${_isp}_list=\"\${dhcpv6_${_isp}_list} ${_iface}\"
|
||||
}
|
||||
|
||||
add_dhcpv6()
|
||||
{
|
||||
_iface=${1}
|
||||
_sla=${2}
|
||||
_isp=${3}
|
||||
if [ -z "${_isp}" ]
|
||||
then
|
||||
_isp=${default_isp}
|
||||
fi
|
||||
|
||||
eval dhcpv6_${_isp}_supplement_list=\"\${dhcpv6_${_isp}_supplement_list} ${_iface}/${_sla}\"
|
||||
}
|
||||
|
||||
_emit_dhcpv6_for_iface()
|
||||
{
|
||||
_iface=${1}
|
||||
_sla=${2}
|
||||
echo " prefix-interface ${_iface}" >> ${_dhcp_file}
|
||||
echo " {" >> ${_dhcp_file}
|
||||
echo " sla-id ${_sla};" >> ${_dhcp_file}
|
||||
echo " sla-len $((64 - ${_prefix_len}));" >> ${_dhcp_file}
|
||||
echo " };" >> ${_dhcp_file}
|
||||
echo "" >> ${_dhcp_file}
|
||||
}
|
||||
|
||||
_emit_dhcpv6_for_isp()
|
||||
{
|
||||
_isp=${1}
|
||||
eval _interface=\"\${dhcp_interface_${_isp}}\"
|
||||
_n=${2}
|
||||
eval _prefix_len=\"\${dhcp_prefix_${_isp}}\"
|
||||
mkdir -p ${rc_router_gen_dir}
|
||||
_dhcp_file=${rc_router_gen_dir}/dhcp6c.${_isp}.conf
|
||||
eval _isp_list=\${dhcpv6_${_isp}_list}
|
||||
_echo "Checking ${_isp} against default: ${default_isp}"
|
||||
if [ "${_isp}" = "${default_isp}" ]
|
||||
then
|
||||
_isp_list="${dhcpv6_default_list} ${_isp_list}"
|
||||
fi
|
||||
eval _isp_supplement_list=\${dhcpv6_${_isp}_supplement_list}
|
||||
|
||||
_echo "Building DHCP info for ${_isp} (interfaces: ${_isp_list})"
|
||||
|
||||
echo "######################" > ${_dhcp_file}
|
||||
echo "# Configuration for ${_isp} on ${_interface}" >> ${_dhcp_file}
|
||||
echo "######################" >> ${_dhcp_file}
|
||||
echo "id-assoc pd $_n" >> ${_dhcp_file}
|
||||
echo "{" >> ${_dhcp_file}
|
||||
echo " prefix ::/${_prefix_len} infinity;" >> ${_dhcp_file}
|
||||
|
||||
|
||||
for _iface_desc in ${_isp_supplement_list}
|
||||
do
|
||||
_iface=`echo ${_iface_desc} | sed -e 's;/.*$;;'`
|
||||
_sla=`echo ${_iface_desc} | sed -e 's;^.*/;;'`
|
||||
_emit_dhcpv6_for_iface ${_iface} ${_sla}
|
||||
done
|
||||
for _iface in ${_isp_list}
|
||||
do
|
||||
_vlan=`echo ${_iface} | sed -e 's/^.*\.//'`
|
||||
_num=`echo ${_vlan} | sed -e 's/\([0-9]\)0\([0-9]\)/\1\2/'`
|
||||
_vlan_sla=`printf "%d" 0x${_num}`
|
||||
_emit_dhcpv6_for_iface ${_iface} ${_vlan_sla}
|
||||
done
|
||||
echo "};" >> ${_dhcp_file}
|
||||
|
||||
echo "" >> ${_dhcp_file}
|
||||
echo "interface ${_interface} {" >> ${_dhcp_file}
|
||||
echo " send ia-pd ${_n};" >> ${_dhcp_file}
|
||||
echo "};" >> ${_dhcp_file}
|
||||
echo "" >> ${_dhcp_file}
|
||||
echo "" >> ${_dhcp_file}
|
||||
}
|
||||
|
||||
_emit_dhcpv6()
|
||||
{
|
||||
_n=0
|
||||
|
||||
_echo "Emitting DHCPv6, and default ISP is: ${default_isp}"
|
||||
for _isp in ${dhcp_isps}
|
||||
do
|
||||
_emit_dhcpv6_for_isp $_isp ${_n}
|
||||
_n=$((${_n}+1))
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
add_v4_isp()
|
||||
{
|
||||
_iface="${1}" ; shift 1
|
||||
eval ifconfig_${_iface}="$*"
|
||||
|
||||
}
|
||||
|
||||
add_v6_isp()
|
||||
{
|
||||
_echo "ISP added: $*"
|
||||
_iface="${1}" ; shift 1
|
||||
_name="${1}" ; shift 1
|
||||
_isp_type="${1}" ; shift 1
|
||||
eval _prefix_len="\${prefix_len_${_isp_type}}"
|
||||
if [ "${1}" = "default" ]
|
||||
then
|
||||
_echo "Saw default, and overriding to ${_isp}"
|
||||
default_isp="${_name}" ; shift 1
|
||||
fi
|
||||
|
||||
if [ -z "${default_isp}" ]
|
||||
then
|
||||
default_isp=${_name}
|
||||
fi
|
||||
|
||||
if [ "${default_isp}" = "${_name}" ]
|
||||
then
|
||||
rtsold_enable="YES"
|
||||
ipv6_default_interface="${_iface}"
|
||||
ipv6_cpe_wanif="${_iface}"
|
||||
ipv6_isp_interfaces="${ipv6_isp_interfaces} ${_iface}"
|
||||
dhcp_6c_enable="YES"
|
||||
dhcp6c_config="${rc_router_gen_dir}/dhcp6c.conf"
|
||||
fi
|
||||
|
||||
|
||||
dhcp6c_interfaces="${dhcp6c_interfaces} ${_iface}"
|
||||
|
||||
eval dhcp_interface_${_name}="${_iface}"
|
||||
eval dhcp_prefix_${_name}="${_prefix_len}"
|
||||
dhcp_isps="${dhcp_isps} ${_name}"
|
||||
}
|
||||
|
||||
add_canned_isp()
|
||||
{
|
||||
load_isp_hints # Make sure ISP hints are loaded, first
|
||||
|
||||
_iface="${1}" ; shift 1
|
||||
_name="${1}" ; shift 1
|
||||
_isp="${1}" ; shift 1
|
||||
|
||||
_v4_isp_config="\${rc_router_v4_isp_config_${_isp}}" # DHCP, usually
|
||||
|
||||
add_v4_isp ${_iface} ${_v4_isp_config}
|
||||
add_v6_isp ${_iface} ${_name} ${_isp} $*
|
||||
}
|
||||
|
||||
_emit_dhcpv4_for_iface()
|
||||
{
|
||||
_iface=${1}
|
||||
_vlan=${2}
|
||||
|
||||
# Get a newline in there, to make output more readable
|
||||
echo
|
||||
|
||||
_base=$((${_vlan}%10))
|
||||
_net=$((${_vlan}/100))
|
||||
_subnet=${_net}${_base}
|
||||
eval _net=\${v4_net_${_iface}}
|
||||
if [ -z "${_net}" ]
|
||||
then
|
||||
_net=${v4_net}
|
||||
fi
|
||||
|
||||
eval _lo="\${dhcpv4_pool_lo_${_iface}}"
|
||||
eval _hi="\${dhcpv4_pool_hi_${_iface}}"
|
||||
|
||||
[ -z "${_lo}" ] && _lo=${dhcpv4_pool_lo}
|
||||
[ -z "${_hi}" ] && _hi=${dhcpv4_pool_hi}
|
||||
|
||||
_prefix="${_net}.${_subnet}"
|
||||
|
||||
echo "subnet ${_prefix}.0 netmask 255.255.255.0"
|
||||
echo "{"
|
||||
echo " option routers ${_prefix}.1;"
|
||||
echo " range ${_prefix}.${_lo} ${_prefix}.${_hi};"
|
||||
echo "}"
|
||||
}
|
||||
|
||||
_emit_dhcpv4_defaults()
|
||||
{
|
||||
echo "option v6-mostly code 108 = integer 32;"
|
||||
|
||||
[ -z "${enable_v6_mostly}" ] && enable_v6_mostly="NO"
|
||||
|
||||
if [ `option_selected enable_v6_mostly` = "YES" ]
|
||||
then
|
||||
echo "option v6-mostly 7200;"
|
||||
fi
|
||||
|
||||
if [ -n "${dhcpv4_dns}" ]
|
||||
then
|
||||
echo "option domain-name-servers ${dhcpv4_dns};"
|
||||
fi
|
||||
|
||||
if [ -n "${dhcpv4_default_lease_time}" ]
|
||||
then
|
||||
echo "option default-lease-time ${dhcpv4_default_lease_time};"
|
||||
fi
|
||||
|
||||
if [ -n "${dhcpv4_max_lease_time}" ]
|
||||
then
|
||||
echo "option max-lease-time ${dhcpv4_max_lease_time};"
|
||||
fi
|
||||
}
|
||||
|
||||
_emit_dhcpv4()
|
||||
{
|
||||
_dhcp_file=${rc_router_gen_dir}/dhcpd.subnets.conf
|
||||
echo "" > ${_dhcp_file}
|
||||
_emit_dhcpv4_defaults >> ${_dhcp_file}
|
||||
|
||||
|
||||
for _iface in ${dhcpd_ifaces}
|
||||
do
|
||||
_iface_root=$( echo ${_iface} | sed -e 's/\.[0-9][0-9]*//' )
|
||||
_vlan=$( echo ${_iface} | sed -e 's/[a-z][a-z]*[0-9][0-9]*\.//' )
|
||||
_emit_dhcpv4_for_iface ${_iface_root} ${_vlan} >> ${_dhcp_file}
|
||||
done
|
||||
}
|
||||
|
||||
add_v4_net()
|
||||
{
|
||||
_compute_nets $*
|
||||
_add_vlan $_card $_vlan
|
||||
|
||||
_class_group=""
|
||||
if [ ! -z "${_class}" ]
|
||||
then
|
||||
_class_group="group ${_class}"
|
||||
fi
|
||||
eval ifconfig_${_card}_${_vlan}=\"$(compute_v4_net $_card $_subnet) group internal ${_class_group}\"
|
||||
eval dhcpd_ifaces=\"${dhcpd_ifaces} ${_card}.${_vlan}\"
|
||||
}
|
||||
|
||||
_add_v6_prefixes()
|
||||
{
|
||||
_next_alias=$1
|
||||
shift 1
|
||||
|
||||
while [ -n "${1}" ]
|
||||
do
|
||||
eval ifconfig_${_card}_${_vlan}_alias${_next_alias}=\"inet6 $1/64\"
|
||||
shift 1
|
||||
_next_alias=`expr $_next_alias + 1`
|
||||
done
|
||||
}
|
||||
|
||||
add_v6_net()
|
||||
{
|
||||
_isp=""
|
||||
_compute_nets $*
|
||||
_add_vlan $_card $_vlan
|
||||
_add_rtadv $_card $_vlan
|
||||
|
||||
_compute_ula_prefix
|
||||
|
||||
_class_group=""
|
||||
if [ ! -z "${_class}" ]
|
||||
then
|
||||
_class_group="group ${_class}"
|
||||
fi
|
||||
|
||||
eval ifconfig_${_card}_${_vlan}_ipv6=\"inet6 fe80::1/64 group internal ${_class_group}\"
|
||||
|
||||
_next_alias=0
|
||||
|
||||
if [ "${_priv}" = "YES" ]
|
||||
then
|
||||
eval ifconfig_${_card}_${_vlan}_alias${_next_alias}=\"inet6 $(compute_v6_net ${secret_ip6_net} ${_subnet})/64\"
|
||||
_next_alias=1 # UGLY HACK!!! Does BASH increment work in BSD's sh?
|
||||
fi
|
||||
|
||||
if [ -n "${_isp}" ]
|
||||
then
|
||||
_add_dhcpv6 ${_card}.${_vlan} ${_isp}
|
||||
else
|
||||
_echo "Adding ${_card}.${_vlan} to default (which is ${default_isp} at this time)"
|
||||
_add_dhcpv6 ${_card}.${_vlan} default
|
||||
fi
|
||||
|
||||
_add_v6_prefixes ${_next_alias} ${_extra_address}
|
||||
}
|
||||
|
||||
add_net()
|
||||
{
|
||||
add_v4_net $*
|
||||
add_v6_net $*
|
||||
}
|
||||
|
||||
option_selected()
|
||||
{
|
||||
eval _value=\$${1}
|
||||
_echo "option_selected: $1 is set to $_value."
|
||||
case $_value in
|
||||
|
||||
# "yes", "true", "on", or "1"
|
||||
[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
|
||||
echo "YES"
|
||||
;;
|
||||
|
||||
# "no", "false", "off", or "0"
|
||||
[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0)
|
||||
echo "NO"
|
||||
;;
|
||||
*)
|
||||
_warn "\$${1} is not set properly - see rc.conf(5)."
|
||||
echo "FAILED"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
build_zoneinfo_for_host()
|
||||
{
|
||||
_ISP_PREFIX=${1};shift 1
|
||||
_MAIN_SUBNET=${1};shift 1
|
||||
_host=$( echo ${1} | sed -e 's/=.*$//' )
|
||||
# Not really the MAC, but maybe that's the right way?
|
||||
# For now it's host=SUFFIX
|
||||
_MAC=$( echo ${1} | sed -e 's/^.*=//' )
|
||||
#echo "Host: ${_host} --- MAC: ${_MAC}"
|
||||
echo "${_host}" IN AAAA ${_ISP_PREFIX}${_MAIN_SUBNET}:${_MAC}
|
||||
}
|
||||
|
||||
build_zoneinfo()
|
||||
{
|
||||
_prefix=${1} ; shift 1
|
||||
_subnet=${1} ; shift 1
|
||||
echo '$TTL 1h30m'
|
||||
|
||||
echo '@ IN SOA ns.nerdland.org. adam.imp-net.work. ('
|
||||
date +'%s'
|
||||
|
||||
echo 7200
|
||||
echo 1200
|
||||
echo 7200
|
||||
echo 5400
|
||||
|
||||
echo ')'
|
||||
|
||||
echo '$ORIGIN hosts.nerdland.org.'
|
||||
|
||||
echo '@ IN NS xns.nerdland.org.'
|
||||
|
||||
for _hostline in $(cat ${1})
|
||||
do
|
||||
#echo ${_prefix} ${_subnet} ${_hostline}
|
||||
case "${_hostline}" in
|
||||
"#"*)
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
||||
build_zoneinfo_for_host ${_prefix} ${_subnet} ${_hostline}
|
||||
done
|
||||
}
|
||||
|
||||
_hash()
|
||||
{
|
||||
sha1sum
|
||||
}
|
||||
|
||||
# Now we compute a prefix from the hash of the network name.
|
||||
# This lets us be deterministic, yet still know what our
|
||||
# net name is.
|
||||
#
|
||||
_compute_ula_prefix()
|
||||
{
|
||||
secret_ip6_net=$(compute_net ${rc_router_ula_prefix_size} "${rc_router_network_name}")
|
||||
}
|
||||
|
||||
load_isp_hints()
|
||||
{
|
||||
for _hint in $(ls ${rc_router_dir}/hints/*)
|
||||
do
|
||||
v4_setup="dhcp" # v4 usually defaults to DHCP
|
||||
_isp=$( basename ${_hint} )
|
||||
. ${rc_router_dir}/hints/${_isp}
|
||||
|
||||
eval rc_router_v4_isp_config_${_isp}=${v4_setup}
|
||||
eval prefix_len_${_isp}=${v6_prefix_len}
|
||||
done
|
||||
}
|
||||
|
||||
_rc_router_epilogue()
|
||||
{
|
||||
rtsold_flags="${rtsold_flags} ${ipv6_isp_interfaces}"
|
||||
}
|
||||
|
||||
#. ${router_conf_dir}/pf-framework.subr
|
||||
|
||||
# vim: ft=bash
|
||||
@@ -0,0 +1,22 @@
|
||||
#!/bin/sh
|
||||
. ${RC_ROUTER_HARNESS}/etc/rc.conf
|
||||
|
||||
echo "Which nic?"
|
||||
read nic
|
||||
|
||||
nic=`echo $nic | sed -e 's/\./_/g'`
|
||||
|
||||
echo "V6 net is: ${secret_ip6_net}"
|
||||
|
||||
eval echo "ifconfig_${nic}: \${ifconfig_${nic}}"
|
||||
eval echo "ifconfig_${nic}_ipv6: \${ifconfig_${nic}_ipv6}"
|
||||
eval echo "ifconfig_${nic}_alias0: \${ifconfig_${nic}_alias0}"
|
||||
eval echo "ifconfig_${nic}_alias1: \${ifconfig_${nic}_alias1}"
|
||||
eval echo "ifconfig_${nic}_alias2: \${ifconfig_${nic}_alias2}"
|
||||
eval echo "ifconfig_${nic}_alias3: \${ifconfig_${nic}_alias3}"
|
||||
eval echo "ifconfig_${nic}_alias4: \${ifconfig_${nic}_alias4}"
|
||||
echo "rtadvd_interfaces: ${rtadvd_interfaces}"
|
||||
echo "wireguard_interfaces: ${wireguard_interfaces}"
|
||||
echo "cloned_interfaces: ${cloned_interfaces}"
|
||||
|
||||
set
|
||||
@@ -0,0 +1,11 @@
|
||||
settings:\
|
||||
:@PREF64@:\
|
||||
:@MININTERVAL@:\
|
||||
:@MAXINTERVAL@:\
|
||||
:@PLTIME@:\
|
||||
:@PLTIME_DECR@:\
|
||||
:@VLTIME@:\
|
||||
:@VLTIME_DECR@:\
|
||||
:@RLTIME@:\
|
||||
:@DNS_SEARCHLIST@:\
|
||||
:dnssl="@DNS_SERVER@":
|
||||
Reference in New Issue
Block a user