Pass VLAN tag over wlan0?

Still stuck on trying to get IPTV traffic through any of the wired LAN ports on the Xiaomi AC2100 that's using DSA:

I have added all of wan.55 / lan1.55 / lan2.55 / lan3.55 (all "Software VLAN" apparently) to interface "iptv", which is an unmanaged bridge. I have tried turning STP on or off. I have tried setting up a new "iptv" firewall zone that allows Input/Output/Forward, or shut down and disable the firewall completely. But, no dice. The IPTV box cannot complete the dual-side (A/B) setup, failing on getting DHCP lease on the B-side (the ISP's dedicated network for IPTV). Supposedly this A/B config is called IPOE or DHCP+.

Comparing the difference of the DHCP traffic between direct modem-IPTV and modem-OpenwrtXiaomi-IPTV, I see the modem sending two consecutive DHCP ACKs, with the first one marked 802.1Q VLAN 55. In contrast, Openwrt/Xiaomi only sends the second one. This reminded me to try the " ip link set br-iptv type bridge vlan_default_pvid [iptv-vlan-ID]" command mentioned in Mt7621 DSA switch VLAN configuration - #2 by quarky

That has the effect of changing the output of "bridge vlan" on the Xiaomi to:
port vlan-id
br-iptv 55 PVID Egress Untagged
wan.55 55 PVID Egress Untagged
lan1.55 55 PVID Egress Untagged
lan2.55 55 PVID Egress Untagged
lan3.55 55 PVID Egress Untagged

instead of the original "1 PVID Egress Untagged". However, it also stopped Openwrt/Xiaomi from responding to DHCP request on any of the three wired LAN ports. So I have unset the vlan_default_pvid.

wan.55
...
RX packets:19282 errors:0 dropped:0 overruns:0 frame:0
TX packets:19181 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1117573 (1.0 MiB) TX bytes:1307737 (1.2 MiB)

lan#.55
...
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

br-iptv
...
RX packets:20266 errors:0 dropped:18396 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1466630 (1.3 MiB) TX bytes:1176 (1.1 KiB)

Any ideas what I'm missing? I'd love to learn the DSA way of configuration on this Xiaomi, rather than resorting to switching to the swconfig-based WNDR3800.