init-state auto if_carp_up="carp1.link.up" if_carp_down="carp1.link.down" state auto { if $if_carp_up { set-state master } if $if_carp_down { set-state backup } } state master { init { # spoof mac to keep dhcp lease in sync with both gw's run "/sbin/ifconfig vio1 lladdr {{ gw_home_mac }} up" # flush routes and run dhclient and dhcpcd run "/sbin/route -qn flush" run "/sbin/dhclient vio1" #run "/sbin/rcctl restart dhcpcd > /dev/null" # reset firewall rules run "sleep 5 ; pfctl -f /etc/pf.conf" } if $if_carp_down { set-state backup } } state backup { init { # kill dhclient (TODO: better command for this) run "pkill -9 dhclient" # bring down interface and reset mac run "/sbin/ifconfig vio1 delete lladdr {{ gw_home_mac }} down" # flush routes and fix default route run "/sbin/route -qn flush" {% if inventory_hostname == "dna-gw01.home.foo.sh" %} run "/sbin/route -qn add default 172.20.21.2" {% elif inventory_hostname == "dna-gw02.home.foo.sh" %} run "/sbin/route -qn add default 172.20.21.1" {% endif %} } if $if_carp_up { set-state master } }