Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pd] semi-automated PD on raspbian scripts #2347

Merged
merged 14 commits into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions examples/platforms/raspbian/default
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
NAT64=1
DNS64=0
DHCPV6_PD=0
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
DHCPV6_PD_REF=1
NETWORK_MANAGER=0
BACKBONE_ROUTER=1
BORDER_ROUTING=1
Expand Down
61 changes: 61 additions & 0 deletions script/_dhcpv6_pd_ref
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/bash
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved

customise_dhcpcd_conf()
{
sudo tee /etc/dhcpcd.conf >/dev/null <<EOF
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.

# Allow users of this group to interact with dhcpcd via the control socket.
#controlgroup wheel

# Inform the DHCP server of our hostname for DDNS.
#hostname

# Use the hardware address of the interface for the Client ID.
#clientid
# or
# Use the same DUID + IAID as set in DHCPv6 for DHCPv4 ClientID as per RFC4361.
# Some non-RFC compliant DHCP servers do not reply with this set.
# In this case, comment out duid and enable clientid above.
#duid

# Rapid commit support.
# Safe to enable by default because it requires the equivalent option set
# on the server to actually work.
option rapid_commit

# A ServerID is required by RFC2131.
#require dhcp_server_identifier
superwhd marked this conversation as resolved.
Show resolved Hide resolved

noipv6rs
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
# disable routing solicitation
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
# denyinterfaces eth1 # Don't touch other_interfaces at all
interface eth0
superwhd marked this conversation as resolved.
Show resolved Hide resolved
ipv6rs
iaid 1
ia_pd 2/::/64 -
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
EOF
}

dhcpv6_pd_ref_stop()
{
if [[ -f "/etc/dhcpcd.conf.orig" ]]; then
sudo mv /etc/dhcpcd.conf.orig /etc/dhcpcd.conf
fi
# sudo systemctl restart dhcpcd
superwhd marked this conversation as resolved.
Show resolved Hide resolved
sudo rm -f /etc/dhcpcd.enter-hook /etc/dhcpcd.exit-hook

}

dhcpv6_pd_ref_start()
{
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
if [[ -f "/etc/dhcpcd.conf" ]]; then
sudo mv /etc/dhcpcd.conf /etc/dhcpcd.conf.orig
fi
customise_dhcpcd_conf
# Add dhcpcd.hooks
sudo install -m 755 "$(dirname "$0")"/reference-device/dhcpcd.enter-hook /etc/dhcpcd.enter-hook
sudo install -m 755 "$(dirname "$0")"/reference-device/dhcpcd.exit-hook /etc/dhcpcd.exit-hook

yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
}
14 changes: 14 additions & 0 deletions script/bootstrap
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,20 @@ install_packages_apt()
fi
}

# dhcpv6 pd
superwhd marked this conversation as resolved.
Show resolved Hide resolved
with DHCPV6_PD_REF && if [[ $PLATFORM == "raspbian" ]]; then
sudo apt-get install --no-install-recommends -y dhcpcd
sudo mkdir -p /etc/systemd/system/dhcpcd.service.d
# allow edit system config file eg. /etc/radvd.conf
sudo tee /etc/systemd/system/dhcpcd.service.d/custom.conf >/dev/null <<EOF
[Service]
ProtectSystem=false
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
EOF
# reload dhcpcd daemon to activate the custom.conf
sudo systemctl daemon-reload
sudo apt-get install --no-install-recommends -y radvd
fi

# network-manager
without NETWORK_MANAGER || sudo apt-get install --no-install-recommends -y dnsmasq network-manager

Expand Down
47 changes: 47 additions & 0 deletions script/reference-device/dhcpcd.enter-hook
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
#!/bin/bash
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved

WAN_INTERFACE="eth0"
WPAN_INTERFACE="wpan0"
RADVD_CONF="/etc/radvd.conf"
LOG_TAG="dhcpcd.enter.hook:"


config_ra()
{
logger -t "$LOG_TAG $reason start config radvd"

sudo tee "${RADVD_CONF}" > /dev/null <<EOF
interface ${WPAN_INTERFACE}
{
AdvSendAdvert on;
prefix ${1}/${2}
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvPreferredLifetime ${3};
AdvValidLifetime ${4};
};
};
EOF
}


if [ "${interface}" = "eth0" ]; then

for var in $(env); do
# Split the variable into name and value
name="${var%%=*}"
value="${var#*=}"
# Log to syslog
superwhd marked this conversation as resolved.
Show resolved Hide resolved
logger -t "$LOG_TAG $reason sysenv: " "$name=$value"
done

case $reason in
DELEGATED6 | REBIND6 | RENEW6 | BOUND6 )
logger "$LOG_TAG prefix is $new_dhcp6_ia_pd1_prefix1 length is $new_dhcp6_ia_pd1_prefix1_length pltime is $new_dhcp6_ia_pd1_prefix1_pltime vltime is $new_dhcp6_ia_pd1_prefix1_vltime"
config_ra $new_dhcp6_ia_pd1_prefix1 $new_dhcp6_ia_pd1_prefix1_length $new_dhcp6_ia_pd1_prefix1_pltime $new_dhcp6_ia_pd1_prefix1_vltime
sudo systemctl restart radvd || logger "$LOG_TAG Failed to restart radvd"
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
;;
esac
fi
48 changes: 48 additions & 0 deletions script/reference-device/dhcpcd.exit-hook
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/bin/bash
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
#dhcpcd.exit-hook
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved


WAN_INTERFACE="eth0"
WPAN_INTERFACE="wpan0"

RADVD_CONF="/etc/radvd.conf"
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
LOG_TAG="dhcpcd.exit.hook:"

config_ra()
{
logger -t "$LOG_TAG $reason start config radvd"

sudo tee "${RADVD_CONF}" > /dev/null <<EOF
interface ${WPAN_INTERFACE}
{
AdvSendAdvert on;
prefix ${1}/${2}
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
AdvPreferredLifetime ${3};
AdvValidLifetime ${4};
};
};
EOF
}

if [ “${interface}” = “eth0” ]; then

for var in $(env); do
# Split the variable into name and value
name="${var%%=*}"
value="${var#*=}"
# Log to syslog
yangsong-cnyn marked this conversation as resolved.
Show resolved Hide resolved
logger -t "$LOG_TAG $reason sysenv: " "$name=$value"
done

case $reason in
EXPIRE6 | STOP6)
config_ra $old_dhcp6_ia_pd1_prefix1 $old_dhcp6_ia_pd1_prefix1 0 0
sudo systemctl restart radvd
;;
esac
fi

3 changes: 3 additions & 0 deletions script/setup
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
. script/_nat64
. script/_dns64
. script/_dhcpv6_pd
. script/_dhcpv6_pd_ref
. script/_network_manager
. script/_rt_tables
. script/_swapfile
Expand All @@ -56,6 +57,7 @@ main()
border_routing_uninstall
network_manager_uninstall
dhcpv6_pd_uninstall
dhcpv6_pd_ref_stop
nat64_uninstall
dns64_uninstall
rt_tables_uninstall
Expand All @@ -69,6 +71,7 @@ main()
dns64_install
network_manager_install
dhcpv6_pd_install
dhcpv6_pd_ref_start
superwhd marked this conversation as resolved.
Show resolved Hide resolved
border_routing_install
otbr_install
# shellcheck source=/dev/null
Expand Down
Loading