多播路由需要用户态配置。用户态igmp proxy守护进程接收lan侧的igmp请求,转发给WAN侧。并配置转发条目。
查看多播路由表
1 2 | # ip mroute (192.168.110.110, 224.1.1.1) Iif: eth4094 Oifs: br-lan |
内核多播转发实现在:net/ipv4/ipmr.c
1 2 3 | static void ip_mr_forward( struct net *net, struct mr_table *mrt, struct sk_buff *skb, struct mfc_cache *cache, int local) |
/proc/net下两个接口ip_mr_vif,ip_mr_cache可以查看转发条目的情况:
1 2 3 4 5 6 7 8 9 | # cat /proc/net/ip_mr_vif Interface BytesIn PktsIn BytesOut PktsOut Flags Local Remote 0 br-lan 21323 116 681906636 503197 00008 00000013 00000000 1 eth4094 681906636 503197 9405 57 00008 0000000F 00000000 # cat /proc/net/ip_mr_cache Group Origin Iif Pkts Bytes Wrong Oifs 010101E0 6E6EA8C0 1 504321 683430780 0 0:1 FAFFFFEF 6400A8C0 0 4 808 0 1:1 |
多播抑制的可以通过
1 2 | # cat /sys/class/net/br-lan/bridge/multicast_snooping 0 |
控制。
开启多播抑制的时候,会有mdb表。通过bridge mdb可以查看mdb表。
igmp query可以由内核做,也可以由igmp proxy做。它们都可以发出igmp query。通过/sys/class/net/br-lan/bridge/multicast_querier这个文件控制。
典型的igmp proxy有:
igmpproxy/mcproxy