Policing for Captive Portal

First we select the protocols for Captive Portal availability in a separate class, as it is described in Assignment of priorities.

These protocols typically are http/https/dns/icmp.
http         cs0
https        cs0
dns          cs0
icmp         cs0
default      cs1
bittorrent   cs7

Next we create the configuration file captive_portal.cfg. It specifies the bandwidth limits in Captive Portal mode for each of 8 classes1).

htb_inbound_root=rate 1mbit 
htb_inbound_class0=rate 8bit ceil 1mbit
htb_inbound_class1=rate 8bit ceil 8bit
htb_inbound_class2=rate 8bit ceil 8bit
htb_inbound_class3=rate 8bit ceil 8bit
htb_inbound_class4=rate 8bit ceil 8bit
htb_inbound_class5=rate 8bit ceil 8bit
htb_inbound_class6=rate 8bit ceil 8bit
htb_inbound_class7=rate 8bit ceil 8bit
htb_root=rate 1mbit 
htb_class0=rate 8bit ceil 1mbit 
htb_class1=rate 8bit ceil 8bit
htb_class2=rate 8bit ceil 8bit
htb_class3=rate 8bit ceil 8bit
htb_class4=rate 8bit ceil 8bit
htb_class5=rate 8bit ceil 8bit
htb_class6=rate 8bit ceil 8bit
htb_class7=rate 8bit ceil 8bit

We place a subscriber into Captive Portal when his account runs out of money:

fdpi_ctrl load --policing captive_portal.cfg --ip 192.168.0.1
fdpi_ctrl load --service 5 --ip 192.168.0.1

Here we unblock the subscriber upon a deposit to his account:

fdpi_ctrl load --policing rate_plan1.cfg --ip 192.168.0.1
fdpi_ctrl del --service 5 --ip 192.168.0.1