# Configuration Configuration through UCI and TR-181 data model is possible. ## UCI Configuration The configuration involved parentalcontrol UCI and (optionally) schedules UCI. ### `parentalcontrol` UCI Configuration The table below describes the options available in the `parentalcontrol` UCI file: | Option | Type | Description | | ---------------------------- | ------- | ---------------------------------------------------------------------------- | | `globals` | section | Defines global settings for parental controls. | | `enable` (in `globals`) | boolean | Enable or disable the parental control globally (`1` for enable). | | `profile` | section | Profile contains hosts and is referred to by filters. | | `name` | string | A descriptive name for the profile (e.g., `kids`). | | `host` | list | Specifies hosts associated with the profile (MAC addresses or device names). | | `profile_urlfilter` | section | Links URL filtering settings to a profile. | | `dm_parent` | string | Refers to the `profile` section by name. | | `filter_text` | list | List substrings which can be looked into URLs to block them. | | `profile_urlfilter_schedule` | list | Refers to schedules defined in the `schedules` UCI file. | | `profile_urlbundle` | list | Refers to `urlbundle` sections. | | `enable` | boolean | Enable or disable the specific profile URL filter (`1` for enable). | | `urlbundle` | section | Bundle contains options for individual urls and bundle files. | | `custom_url` | list | URLs to be resolved and added to daemon's cache at startup and blocked. | | `download_url` | string | Remote or local path to a file which contains newline separated URLs | --- **NOTE:** If the bundle is fetched from remote location, then maximum size allowed is 2MB per *download_url* option. ### `schedules` UCI Configuration The `schedules` UCI file allows defining time-based schedules for controlling URL filters. Options are described in the table below: | Option | Type | Description | | ---------------------- | ------- | -------------------------------------------------------------- | | `global` | section | Defines global scheduling settings. | | `enable` (in `global`) | boolean | Enable or disable scheduling globally (`1` for enable). | | `schedule` | section | Defines a time-based schedule. | | `enable` | boolean | Enable or disable the specific schedule (`1` for enable). | | `duration` | integer | Duration of the schedule in seconds (e.g., 28800 for 8 hours). | | `day` | list | Days on which the schedule is active (e.g., `Monday`). | | `start_time` | string | Start time of the schedule in `HH:MM` format (24-hour clock). | ## Explanation of Key Options ### `filter_text` - If a URL contains any of these strings, it will be blocked. ### `custom_url` - Allows manually defining individual URLs for blocking. - The IP addresses for these URLs are added to cache on start up, thus, these will be blocked even if someone alters the DNS configuration of the device. ### `download_url` - Specifies a source (local or remote) from where URL bundles can be fetched. --- ## Sample UCI configuration ````bash # cat /etc/config/parentalcontrol config globals 'globals' option enable '1' config profile 'profile_1' option name 'kids' list host 'aa:00:aa:92:01:01' list host ' D_wan_53_1' list internet_break_schedule 'schedule_1' option internet_break_enable '1' option bedtime_enable '1' config profile_urlfilter 'profile_1_profile_urlfilter_1' option dm_parent 'profile_1' option access 'Deny' list filter_text 'youtube.com' list profile_urlfilter_schedule 'schedule_1' option enable '1' list profile_urlbundle 'b_kids' list profile_urlbundle 'b_kids1' list profile_urlbundle 'b_kids2' list profile_urlbundle 'b_kids3' config urlbundle 'urlbundle_1' option name 'b_kids' option enable '1' option download_url 'file:///tmp/urlfilter/default/urlbundles/abuse' list custom_url 'facebook.com' config urlbundle 'urlbundle_2' option name 'b_kids1' option enable '1' option download_url 'file:///tmp/urlfilter/default/urlbundles/facebook' config urlbundle 'urlbundle_3' option name 'b_kids2' option enable '1' option download_url 'file:///tmp/urlfilter/default/urlbundles/tiktok' config urlbundle 'urlbundle_4' option name 'b_kids3' option enable '1' option download_url 'file:///tmp/urlfilter/default/urlbundles/porn' config profile_bedtime_schedule 'profile_1_profile_bedtime_schedule_1' option dm_parent 'profile_1' list day 'Monday' list day 'Tuesday' list day 'Wednesday' option start_time '23:00' option end_time '05:00' option enable '1' ```` ````bash # cat /etc/config/schedules config global 'global' option enable '1' config schedule 'schedule_1' option enable '1' option duration '28800' list day 'Monday' list day 'Tuesday' list day 'Wednesday' list day 'Thursday' list day 'Friday' option start_time '09:00' ```` ## Data model configuration ### URL Filter ````bash bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.Profile. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.HostList 'aa:00:aa:92:01:01, D_wan_53_1' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.Name 'kids' bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.Profile.1.URLFilter. bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.URLBundle. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.1.Name 'b_kids' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.1.DownloadURL "file:///tmp/urlfilter/default/urlbundles/abuse" bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.1.Enable '1' bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.URLBundle. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.2.Name 'b_kids1' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.2.DownloadURL "file:///tmp/urlfilter/default/urlbundles/facebook" bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.2.Enable '1' bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.URLBundle. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.3.Name 'b_kids2' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.3.DownloadURL "file:///tmp/urlfilter/default/urlbundles/tiktok" bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.3.Enable '1' bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.URLBundle. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.4.Name 'b_kids3' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.4.DownloadURL "file:///tmp/urlfilter/default/urlbundles/porn" bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.URLBundle.4.Enable '1' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.URLFilter.1.URLBundleRef "Device.X_IOWRT_EU_ParentalControl.URLBundle.1,Device.X_IOWRT_EU_ParentalControl.URLBundle.2,Device.X_IOWRT_EU_ParentalControl.URLBundle.3,Device.X_IOWRT_EU_ParentalControl.URLBundle.4" bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Enable 1 bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.URLFilter.1.Enable 1 ```` ### Internet break ````bash bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.InternetBreak.ScheduleRef Device.Schedules.Schedule.1 bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.InternetBreak.Enable 1 ```` ### Bedtime ````bash bbfdmd -c add Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Schedule. bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Schedule.1.Days 'Monday,Tuesday,Wednesday' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Schedule.1.StartTime '23:00' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Schedule.1.EndTime '05:00' bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Schedule.1.Enable 1 bbfdmd -c set Device.X_IOWRT_EU_ParentalControl.Profile.1.BedTime.Enable 1 ```` ---