{ "client_requirement": "client_is_viewer+", "items": [ { "type": "header_page_title", "items": [ { "type": "h1", "text": "Inter-VLAN Exceptions" }, { "type": "p", "text": "Firewall rules that permit specific traffic to cross VLAN boundaries." } ] }, { "type": "table", "datasource": "config:inter_vlan_exceptions", "empty_message": "No inter-VLAN exceptions configured. All cross-VLAN traffic is blocked by default.", "columns": [ { "label": "Description", "field": "description" }, { "label": "Protocol", "field": "protocol", "class": "col-mono col-narrow" }, { "label": "Source", "field": "src_ip_or_subnet", "class": "col-mono" }, { "label": "Destination", "field": "dst_ip_or_subnet", "class": "col-mono" }, { "label": "Port Min", "field": "dst_port_min", "class": "col-mono col-narrow" }, { "label": "Port Max", "field": "dst_port_max", "class": "col-mono col-narrow" }, { "label": "Status", "field": "enabled", "render": "badge_enabled_disabled" } ], "row_actions": [ { "client_requirement": "client_is_administrator+", "action": "/action/intervlan/table_edit", "method": "inline_edit", "text": "Edit", "class": "btn-ghost btn-sm", "fields": [ { "col": "description", "input_type": "text" }, { "col": "protocol", "input_type": "select", "options": "%PROTOCOL_OPTIONS%" }, { "col": "src_ip_or_subnet", "input_type": "text" }, { "col": "dst_ip_or_subnet", "input_type": "text" }, { "col": "dst_port_min", "input_type": "number" }, { "col": "dst_port_max", "input_type": "number" }, { "col": "enabled", "input_type": "checkbox", "checkbox_label": "Enabled" } ] }, { "client_requirement": "client_is_administrator+", "action": "/action/intervlan/table_delete", "method": "post", "text": "Delete", "class": "btn-danger btn-sm" } ] }, { "type": "card", "id": "add-form", "label": "Add Exception", "client_requirement": "client_is_administrator+", "items": [ { "type": "form", "action": "/action/intervlan/addexception_add", "method": "post", "items": [ { "type": "field", "label": "Description", "name": "description", "input_type": "text", "placeholder": "e.g. Allow Chromecast" }, { "type": "field_row", "cols": 2, "items": [ { "type": "field", "label": "Source", "name": "src_ip_or_subnet", "input_type": "text", "validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR", "placeholder": "e.g. 192.168.20.100 or 192.168.20.0/24", "hint": "You may allow either a single device IP or an entire subnet to contact dest." }, { "type": "field", "label": "Destination", "name": "dst_ip_or_subnet", "input_type": "text", "validate": "VALIDATION_IPV4_FORMAT|VALIDATION_IPV4_CIDR", "placeholder": "e.g. 192.168.10.200 or 192.168.10.0/24", "hint": "You may allow either a single device IP or an entire subnet to be reached by source." } ] }, { "type": "field_row", "cols": 3, "items": [ { "type": "field", "label": "Protocol", "name": "protocol", "input_type": "select", "options": "%PROTOCOL_OPTIONS%" }, { "type": "field", "label": "Dest Port Range Start", "name": "dst_port_min", "input_type": "number", "min": 1, "max": 65535 }, { "type": "field", "label": "Dest Port Range End", "name": "dst_port_max", "input_type": "number", "min": 1, "max": 65535 } ] }, { "type": "raw_html", "html": "

This exception only applies to traffic matching the selected protocol and destination port range.

" }, { "type": "button_row", "items": [ { "type": "button_primary", "action": "/action/intervlan/addexception_add", "method": "post", "text": "Add Exception" }, { "type": "button_cancel", "text": "Cancel" } ] } ] } ] } ] }