Skip to content

Commit

Permalink
semi-automated PD on raspbian scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
sherysheng committed Jun 13, 2024
1 parent 2071966 commit 702d768
Show file tree
Hide file tree
Showing 6 changed files with 201 additions and 0 deletions.
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
DHCPV6_PD_REF=1
NETWORK_MANAGER=0
BACKBONE_ROUTER=1
BORDER_ROUTING=1
Expand Down
76 changes: 76 additions & 0 deletions script/_dhcpv6_pd_ref
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#!/bin/bash

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
noipv6rs
# disable routing solicitation
# denyinterfaces eth1 # Don't touch other_interfaces at all
interface eth0
ipv6rs
iaid 1
ia_pd 2/::/64 -
EOF
}

# customise_dhcpcd_hooks90
# {
# #dhcpcd.enter-hook
# sudo tee /etc/dhcpcd.enter-hook > /dev/null <<EOF

# EOF

# #dhcpcd.exit-hook
# sudo tee /etc/dhcpcd.exit-hook > /dev/null <<EOF
# EOF
# }

dhcp6_pd_ref_stop()
{
if [[ -f "/etc/dhcpcd.conf.orig" ]]; then
sudo mv /etc/dhcpcd.conf.orig /etc/dhcpcd.conf
fi
# sudo systemctl restart dhcpcd
sudo rm /etc/dhcpcd.enter-hook /etc/dhcpcd.exit-hook

}

dhcp6_pd_ref_start()
{
if [[ -f "/etc/dhcpcd.conf" ]]; then
sudo mv /etc/dhcpcd.conf /etc/dhcpcd.conf.orig
fi
customise_dhcpcd_conf
# Add dhcpcd.hooks
sudo mv ~/repo/script/reference-device/dhcpcd.enter-hook /etc/dhcpcd.enter-hook
sudo mv ~/repo/script/reference-device/dhcpcd.exit-hook /etc/dhcpcd.exit-hook
sudo chmod +x /etc/dhcpcd.enter-hook /etc/dhcpcd.exit-hook

}

dhcp6_pd_ref "$@"
14 changes: 14 additions & 0 deletions script/bootstrap
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,20 @@ install_packages_apt()
fi
}

# dhcpv6 pd
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
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
59 changes: 59 additions & 0 deletions script/reference-device/dhcpcd.enter-hook
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#!/bin/bash

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
logger -t "$LOG_TAG $reason sysenv: " "$name=$value"
done

case $reason in
# | DELEGATED6 | BOUND6 | RENEW6 | REBIND6 | ROUTERADVERT
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
# "$new_dhcp6_ia_pd1_prefix1" "$new_dhcp6_ia_pd1_prefix1_pltime" "$new_dhcp6_ia_pd1_prefix1_vltime"
sudo systemctl restart radvd || logger "$LOG_TAG Failed to restart radvd"
;;
# RENEW6)
# if ["${new_dhcp6_ia_pd1_prefix1}" == "${old_dhcp6_ia_pd1_prefix1}"]; then
# {
# 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"
# }
# else
# {

# }
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
#dhcpcd.exit-hook


WAN_INTERFACE="eth0"
WPAN_INTERFACE="wpan0"

RADVD_CONF="/etc/radvd.conf"
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
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
border_routing_install
otbr_install
# shellcheck source=/dev/null
Expand Down

0 comments on commit 702d768

Please sign in to comment.