Bladeren bron

gluon-ebtables: use Lua instead of sh for the rule DSL to increase flexibility

Matthias Schiffer 10 jaren geleden
bovenliggende
commit
0953c9befb
19 gewijzigde bestanden met toevoegingen van 55 en 56 verwijderingen
  1. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/100-mcast-chain
  2. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-arp
  3. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-babel
  4. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-btlpd
  5. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-dhcpv4
  6. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-dhcpv6
  7. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-icmp
  8. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-icmpv6
  9. 1 1
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-igmp
  10. 2 2
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-ospf
  11. 2 2
      package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/300-mcast
  12. 4 4
      package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-dhcpv4
  13. 4 4
      package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-dhcpv6
  14. 4 4
      package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-radv
  15. 12 13
      package/gluon-ebtables/files/etc/init.d/gluon-ebtables
  16. 2 2
      package/gluon-ebtables/files/lib/gluon/ebtables/100-dir-chain
  17. 2 2
      package/gluon-ebtables/files/lib/gluon/ebtables/101-dir-rules
  18. 12 12
      package/gluon-next-node/generate/lib/gluon/ebtables/250-next-node
  19. 2 2
      package/gluon-radvd/files/lib/gluon/ebtables/300-radv-input-output

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/100-mcast-chain

@@ -1 +1 @@
-chain MULTICAST_OUT DROP
+chain('MULTICAST_OUT', 'DROP')

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-arp

@@ -1 +1 @@
-rule MULTICAST_OUT -p ARP -j RETURN
+rule 'MULTICAST_OUT -p ARP -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-babel

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 6696 -j RETURN
+rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 6696 -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-btlpd

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv4 --ip-destination 239.192.152.143 --ip-protocol udp --ip-destination-port 6771 -j RETURN
+rule 'MULTICAST_OUT -p IPv4 --ip-destination 239.192.152.143 --ip-protocol udp --ip-destination-port 6771 -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-dhcpv4

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv4 --ip-protocol udp --ip-destination-port 67 -j RETURN
+rule 'MULTICAST_OUT -p IPv4 --ip-protocol udp --ip-destination-port 67 -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-dhcpv6

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j RETURN
+rule 'MULTICAST_OUT -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-icmp

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv4 --ip-protocol icmp -j RETURN
+rule 'MULTICAST_OUT -p IPv4 --ip-protocol icmp -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-icmpv6

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j RETURN
+rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ipv6-icmp -j RETURN'

+ 1 - 1
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-igmp

@@ -1 +1 @@
-rule MULTICAST_OUT -p IPv4 --ip-protocol igmp -j RETURN
+rule 'MULTICAST_OUT -p IPv4 --ip-protocol igmp -j RETURN'

+ 2 - 2
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/110-mcast-allow-ospf

@@ -1,2 +1,2 @@
-rule MULTICAST_OUT -p IPv4 --ip-protocol ospf -j RETURN
-rule MULTICAST_OUT -p IPv6 --ip6-protocol ospf -j RETURN
+rule 'MULTICAST_OUT -p IPv4 --ip-protocol ospf -j RETURN'
+rule 'MULTICAST_OUT -p IPv6 --ip6-protocol ospf -j RETURN'

+ 2 - 2
package/gluon-ebtables-filter-multicast/files/lib/gluon/ebtables/300-mcast

@@ -1,2 +1,2 @@
-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
+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'

+ 4 - 4
package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-dhcpv4

@@ -1,5 +1,5 @@
-rule FORWARD -p IPv4 --ip-protocol udp --ip-destination-port 67 -j OUT_ONLY
-rule OUTPUT -p IPv4 --ip-protocol udp --ip-destination-port 67 -j OUT_ONLY
+rule 'FORWARD -p IPv4 --ip-protocol udp --ip-destination-port 67 -j OUT_ONLY'
+rule 'OUTPUT -p IPv4 --ip-protocol udp --ip-destination-port 67 -j OUT_ONLY'
 
-rule FORWARD -p IPv4 --ip-protocol udp --ip-destination-port 68 -j IN_ONLY
-rule INPUT -p IPv4 --ip-protocol udp --ip-destination-port 68 -j IN_ONLY
+rule 'FORWARD -p IPv4 --ip-protocol udp --ip-destination-port 68 -j IN_ONLY'
+rule 'INPUT -p IPv4 --ip-protocol udp --ip-destination-port 68 -j IN_ONLY'

+ 4 - 4
package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-dhcpv6

@@ -1,5 +1,5 @@
-rule FORWARD -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j OUT_ONLY
-rule OUTPUT -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j OUT_ONLY
+rule 'FORWARD -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j OUT_ONLY'
+rule 'OUTPUT -p IPv6 --ip6-protocol udp --ip6-destination-port 546 -j OUT_ONLY'
 
-rule FORWARD -p IPv6 --ip6-protocol udp --ip6-destination-port 547 -j IN_ONLY
-rule INPUT -p IPv6 --ip6-protocol udp --ip6-destination-port 547 -j IN_ONLY
+rule 'FORWARD -p IPv6 --ip6-protocol udp --ip6-destination-port 547 -j IN_ONLY'
+rule 'INPUT -p IPv6 --ip6-protocol udp --ip6-destination-port 547 -j IN_ONLY'

+ 4 - 4
package/gluon-ebtables-filter-ra-dhcp/files/lib/gluon/ebtables/200-dir-radv

@@ -1,5 +1,5 @@
-rule FORWARD -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY
-rule OUTPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY
+rule 'FORWARD -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY'
+rule 'OUTPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -j OUT_ONLY'
 
-rule FORWARD -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY
-rule INPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY
+rule 'FORWARD -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY'
+rule 'INPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -j IN_ONLY'

+ 12 - 13
package/gluon-ebtables/files/etc/init.d/gluon-ebtables

@@ -23,15 +23,14 @@ STOP=91
 exec_file() {
 	local file="$1"
 
-	sh -c "
-		eval 'rule() {
-			$EBTABLES_RULE
-		}'
-		eval 'chain() {
-			$EBTABLES_CHAIN
-		}'
-		source \"$1\"
-	" - "$file"
+	/usr/bin/lua -e "
+		function rule(command)
+			os.execute($EBTABLES_RULE)
+		end
+		function chain(name, policy)
+			os.execute($EBTABLES_CHAIN)
+		end
+	" "$file"
 }
 
 exec_all() {
@@ -49,8 +48,8 @@ exec_all() {
 
 start() {
 	(
-		export EBTABLES_RULE='ebtables -A "$@"'
-		export EBTABLES_CHAIN='ebtables -N "$1" -P "$2"'
+		export EBTABLES_RULE='"ebtables -A " .. command'
+		export EBTABLES_CHAIN='"ebtables -N " .. name .. " -P " .. policy'
 
 		if [ -z "$1" ]; then
 			exec_all ''
@@ -62,8 +61,8 @@ start() {
 
 stop() {
 	(
-		export EBTABLES_RULE='ebtables -D "$@"'
-		export EBTABLES_CHAIN='ebtables -X "$1"'
+		export EBTABLES_RULE='"ebtables -D " .. command'
+		export EBTABLES_CHAIN='"ebtables -X " .. name'
 
 		if [ -z "$1" ]; then
 			exec_all '-r'

+ 2 - 2
package/gluon-ebtables/files/lib/gluon/ebtables/100-dir-chain

@@ -1,2 +1,2 @@
-chain IN_ONLY RETURN
-chain OUT_ONLY RETURN
+chain('IN_ONLY', 'RETURN')
+chain('OUT_ONLY', 'RETURN')

+ 2 - 2
package/gluon-ebtables/files/lib/gluon/ebtables/101-dir-rules

@@ -1,2 +1,2 @@
-rule IN_ONLY --logical-in br-client -i ! bat0 -j DROP
-rule OUT_ONLY --logical-out br-client -o ! bat0 -j DROP
+rule 'IN_ONLY --logical-in br-client -i ! bat0 -j DROP'
+rule 'OUT_ONLY --logical-out br-client -o ! bat0 -j DROP'

+ 12 - 12
package/gluon-next-node/generate/lib/gluon/ebtables/250-next-node

@@ -1,14 +1,14 @@
-rule FORWARD --logical-out br-client -o bat0 -d @next_node.mac@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -d @next_node.mac@ -j DROP
-rule FORWARD --logical-out br-client -o bat0 -s @next_node.mac@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -s @next_node.mac@ -j DROP
+rule 'FORWARD --logical-out br-client -o bat0 -d @next_node.mac@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -d @next_node.mac@ -j DROP'
+rule 'FORWARD --logical-out br-client -o bat0 -s @next_node.mac@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -s @next_node.mac@ -j DROP'
 
-rule FORWARD --logical-out br-client -o bat0 -p IPv4 --ip-destination @next_node.ip4@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -p IPv4 --ip-destination @next_node.ip4@ -j DROP
-rule FORWARD --logical-out br-client -o bat0 -p IPv4 --ip-source @next_node.ip4@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -p IPv4 --ip-source @next_node.ip4@ -j DROP
+rule 'FORWARD --logical-out br-client -o bat0 -p IPv4 --ip-destination @next_node.ip4@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -p IPv4 --ip-destination @next_node.ip4@ -j DROP'
+rule 'FORWARD --logical-out br-client -o bat0 -p IPv4 --ip-source @next_node.ip4@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -p IPv4 --ip-source @next_node.ip4@ -j DROP'
 
-rule FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-destination @next_node.ip6@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-destination @next_node.ip6@ -j DROP
-rule FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-source @next_node.ip6@ -j DROP
-rule OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-source @next_node.ip6@ -j DROP
+rule 'FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-destination @next_node.ip6@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-destination @next_node.ip6@ -j DROP'
+rule 'FORWARD --logical-out br-client -o bat0 -p IPv6 --ip6-source @next_node.ip6@ -j DROP'
+rule 'OUTPUT --logical-out br-client -o bat0 -p IPv6 --ip6-source @next_node.ip6@ -j DROP'

+ 2 - 2
package/gluon-radvd/files/lib/gluon/ebtables/300-radv-input-output

@@ -1,2 +1,2 @@
-rule INPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -i bat0 -j DROP
-rule OUTPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -o bat0 -j DROP
+rule 'INPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-solicitation -i bat0 -j DROP'
+rule 'OUTPUT -p IPv6 --ip6-protocol ipv6-icmp --ip6-icmp-type router-advertisement -o bat0 -j DROP'