commit
						7565839fc4
					
				
							
								
								
									
										16
									
								
								docs/package/gluon-ebtables-segment-mld.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docs/package/gluon-ebtables-segment-mld.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | gluon-ebtables-segment-mld | ||||||
|  | ========================== | ||||||
|  | 
 | ||||||
|  | These filters drop IGMP/MLD packets before they enter the mesh and | ||||||
|  | filter any IGMP/MLD packets coming from the mesh. | ||||||
|  | 
 | ||||||
|  | IGMP/MLD have the concept of a local, elected Querier. For more | ||||||
|  | decentralization and increased robustness, the idea of this package is | ||||||
|  | to split the IGMP/MLD domain a querier is responsible for, allowing to | ||||||
|  | have a querier per node. The split IGMP/MLD domain will also reduce | ||||||
|  | overhead for this packet type, increasing scalability. | ||||||
|  | 
 | ||||||
|  | Beware of the consequences of using this package though: You might need | ||||||
|  | to explicitly, manually mark ports on snooping switches leading towards | ||||||
|  | your mesh node as multicast router ports for now (Multicast Router | ||||||
|  | Discovery, MRD, not implemented yet). | ||||||
| @ -1 +0,0 @@ | |||||||
| chain('MULTICAST_OUT', 'DROP') |  | ||||||
| @ -1,5 +1,3 @@ | |||||||
| rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type echo-request -j DROP' | rule 'MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type echo-request -j RETURN' | ||||||
| rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 139 -j DROP' | rule 'MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 139 -j RETURN' -- ICMP Node Information Query | ||||||
| rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j RETURN' | rule 'MULTICAST_OUT_ICMPV6 -j ACCEPT' | ||||||
| 
 |  | ||||||
| rule 'MULTICAST_OUT -p IPv6 --ip6-protocol 0 -j RETURN' -- hop-by-hop |  | ||||||
|  | |||||||
| @ -1,2 +0,0 @@ | |||||||
| rule 'FORWARD --logical-out br-client -o bat0 -d Multicast -j MULTICAST_OUT' |  | ||||||
| rule 'OUTPUT --logical-out br-client -o bat0 -d Multicast -j MULTICAST_OUT' |  | ||||||
| @ -0,0 +1 @@ | |||||||
|  | rule ('MULTICAST_OUT -j DROP') | ||||||
							
								
								
									
										51
									
								
								package/gluon-ebtables-segment-mld/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								package/gluon-ebtables-segment-mld/Makefile
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,51 @@ | |||||||
|  | include $(TOPDIR)/rules.mk | ||||||
|  | 
 | ||||||
|  | PKG_NAME:=gluon-ebtables-segment-mld | ||||||
|  | PKG_VERSION:=1 | ||||||
|  | PKG_RELEASE:=1 | ||||||
|  | 
 | ||||||
|  | PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) | ||||||
|  | 
 | ||||||
|  | include $(INCLUDE_DIR)/package.mk | ||||||
|  | 
 | ||||||
|  | define Package/gluon-ebtables-segment-mld | ||||||
|  |   SECTION:=gluon | ||||||
|  |   CATEGORY:=Gluon | ||||||
|  |   TITLE:=Ebtables filters for IGMP/MLD packets | ||||||
|  |   DEPENDS:=+gluon-core +gluon-ebtables | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | define Package/gluon-ebtables-segment-mld/description | ||||||
|  | 	Gluon community wifi mesh firmware framework: Ebtables filters for | ||||||
|  | 	IGMP/MLD packets | ||||||
|  | 
 | ||||||
|  | 	These filters drop IGMP/MLD packets before they enter the mesh and | ||||||
|  | 	filter any IGMP/MLD packets coming from the mesh. | ||||||
|  | 
 | ||||||
|  | 	IGMP/MLD have the concept of a local, elected Querier. For more | ||||||
|  | 	decentralization and increased robustness, the idea of this package is | ||||||
|  | 	to split the IGMP/MLD domain a querier is responsible for, allowing to | ||||||
|  | 	have a querier per node. The split IGMP/MLD domain will also reduce | ||||||
|  | 	overhead for this packet type, increasing scalability. | ||||||
|  | 
 | ||||||
|  | 	Beware of the consequences of using this package though: You might need | ||||||
|  | 	to explicitly, manually mark ports on snooping switches leading towards | ||||||
|  | 	your mesh node as multicast router ports for now (Multicast Router | ||||||
|  | 	Discovery, MRD, not implemented yet). | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | define Build/Prepare | ||||||
|  | 	mkdir -p $(PKG_BUILD_DIR) | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | define Build/Configure | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | define Build/Compile | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | define Package/gluon-ebtables-segment-mld/install | ||||||
|  | 	$(CP) ./files/* $(1)/ | ||||||
|  | endef | ||||||
|  | 
 | ||||||
|  | $(eval $(call BuildPackage,gluon-ebtables-segment-mld)) | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | chain('MULTICAST_IN', 'RETURN', 'nat') | ||||||
|  | chain('MULTICAST_IN_ICMPV6', 'RETURN', 'nat') | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | rule ('PREROUTING -d Multicast --logical-in br-client -i bat0 -j MULTICAST_IN', 'nat') | ||||||
|  | rule ('MULTICAST_IN -p IPv6 --ip6-protocol ipv6-icmp -j MULTICAST_IN_ICMPV6', 'nat') | ||||||
| @ -0,0 +1,2 @@ | |||||||
|  | rule('MULTICAST_OUT -p IPv4 --ip-protocol igmp -j DROP') | ||||||
|  | rule('MULTICAST_IN -p IPv4 --ip-protocol igmp -j DROP', 'nat') | ||||||
| @ -0,0 +1,9 @@ | |||||||
|  | rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 130 -j DROP') -- MLD Query | ||||||
|  | rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 131 -j DROP') -- MLDv1 Report | ||||||
|  | rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 132 -j DROP') -- MLDv1 Done | ||||||
|  | rule('MULTICAST_OUT_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 143 -j DROP') -- MLDv2 Report | ||||||
|  | 
 | ||||||
|  | rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 130 -j DROP', 'nat') -- MLD Query | ||||||
|  | rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 131 -j DROP', 'nat') -- MLDv1 Report | ||||||
|  | rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 132 -j DROP', 'nat') -- MLDv1 Done | ||||||
|  | rule('MULTICAST_IN_ICMPV6 -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type 143 -j DROP', 'nat') -- MLDv2 Report | ||||||
| @ -24,12 +24,15 @@ exec_file() { | |||||||
| 	local file="$1" | 	local file="$1" | ||||||
| 
 | 
 | ||||||
| 	/usr/bin/lua -e " | 	/usr/bin/lua -e " | ||||||
| 		function rule(command) | 		function rule(command, table) | ||||||
|  | 			table = table or 'filter' | ||||||
| 			os.execute($EBTABLES_RULE) | 			os.execute($EBTABLES_RULE) | ||||||
| 		end | 		end | ||||||
| 		function chain(name, policy) | 		function chain(name, policy, table) | ||||||
|  | 			table = table or 'filter' | ||||||
| 			os.execute($EBTABLES_CHAIN) | 			os.execute($EBTABLES_CHAIN) | ||||||
| 		end | 		end | ||||||
|  | 
 | ||||||
| 	" "$file" | 	" "$file" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -48,8 +51,8 @@ exec_all() { | |||||||
| 
 | 
 | ||||||
| start() { | start() { | ||||||
| 	( | 	( | ||||||
| 		export EBTABLES_RULE='"ebtables -A " .. command' | 		export EBTABLES_RULE='"ebtables -t " .. table .. " -A " .. command' | ||||||
| 		export EBTABLES_CHAIN='"ebtables -N " .. name .. " -P " .. policy' | 		export EBTABLES_CHAIN='"ebtables -t " .. table .. "  -N " .. name .. " -P " .. policy' | ||||||
| 
 | 
 | ||||||
| 		if [ -z "$1" ]; then | 		if [ -z "$1" ]; then | ||||||
| 			exec_all '' | 			exec_all '' | ||||||
| @ -61,8 +64,8 @@ start() { | |||||||
| 
 | 
 | ||||||
| stop() { | stop() { | ||||||
| 	( | 	( | ||||||
| 		export EBTABLES_RULE='"ebtables -D " .. command' | 		export EBTABLES_RULE='"ebtables -t " ..	table .. " -D " .. command' | ||||||
| 		export EBTABLES_CHAIN='"ebtables -X " .. name' | 		export EBTABLES_CHAIN='"ebtables -t " .. table .. " -X " .. name' | ||||||
| 
 | 
 | ||||||
| 		if [ -z "$1" ]; then | 		if [ -z "$1" ]; then | ||||||
| 			exec_all '-r' | 			exec_all '-r' | ||||||
|  | |||||||
| @ -1,2 +1,5 @@ | |||||||
| chain('IN_ONLY', 'RETURN') | chain('IN_ONLY', 'RETURN') | ||||||
| chain('OUT_ONLY', 'RETURN') | chain('OUT_ONLY', 'RETURN') | ||||||
|  | 
 | ||||||
|  | chain('MULTICAST_OUT', 'RETURN') | ||||||
|  | chain('MULTICAST_OUT_ICMPV6', 'RETURN') | ||||||
|  | |||||||
| @ -0,0 +1,4 @@ | |||||||
|  | rule 'OUTPUT -d Multicast --logical-out br-client -o bat0 -j MULTICAST_OUT' | ||||||
|  | rule 'FORWARD -d Multicast --logical-out br-client -o bat0 -j MULTICAST_OUT' | ||||||
|  | 
 | ||||||
|  | rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j MULTICAST_OUT_ICMPV6' | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user