Skip to content

Commit fc089ae

Browse files
committed
Add IPv6 support to qos.sh
1 parent e126d0c commit fc089ae

File tree

2 files changed

+24
-10
lines changed

2 files changed

+24
-10
lines changed

contrib/qos/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
### Qos ###
1+
### QoS (Quality of service) ###
22

3-
This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 8333, but not if the destination IP is within a LAN (defined as 192.168.x.x).
3+
This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitcoin network. It limits outbound TCP traffic with a source or destination port of 8333, but not if the destination IP is within a LAN.
44

55
This means one can have an always-on bitcoind instance running, and another local bitcoind/bitcoin-qt instance which connects to this node and receives blocks from it.

contrib/qos/tc.sh

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (c) 2013 The Bitcoin Core developers
1+
# Copyright (c) 2017 The Bitcoin Core developers
22
# Distributed under the MIT software license, see the accompanying
33
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
44

@@ -8,8 +8,10 @@ IF="eth0"
88
LINKCEIL="1gbit"
99
#limit outbound Bitcoin protocol traffic to this rate
1010
LIMIT="160kbit"
11-
#defines the address space for which you wish to disable rate limiting
12-
LOCALNET="192.168.0.0/16"
11+
#defines the IPv4 address space for which you wish to disable rate limiting
12+
LOCALNET_V4="192.168.0.0/16"
13+
#defines the IPv6 address space for which you wish to disable rate limiting
14+
LOCALNET_V6="fe80::/10"
1315

1416
#delete existing rules
1517
tc qdisc del dev ${IF} root
@@ -28,6 +30,12 @@ tc class add dev ${IF} parent 1:1 classid 1:11 htb rate ${LIMIT} ceil ${LIMIT} p
2830
tc filter add dev ${IF} parent 1: protocol ip prio 1 handle 1 fw classid 1:10
2931
tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11
3032

33+
if [ ! -z "${LOCALNET_V6}" ] ; then
34+
# v6 cannot have the same priority value as v4
35+
tc filter add dev ${IF} parent 1: protocol ipv6 prio 3 handle 1 fw classid 1:10
36+
tc filter add dev ${IF} parent 1: protocol ipv6 prio 4 handle 2 fw classid 1:11
37+
fi
38+
3139
#delete any existing rules
3240
#disable for now
3341
#ret=0
@@ -37,9 +45,15 @@ tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11
3745
#done
3846

3947
#limit outgoing traffic to and from port 8333. but not when dealing with a host on the local network
40-
# (defined by $LOCALNET)
41-
# --set-mark marks packages matching these criteria with the number "2"
42-
# these packages are filtered by the tc filter with "handle 2"
48+
# (defined by $LOCALNET_V4 and $LOCALNET_V6)
49+
# --set-mark marks packages matching these criteria with the number "2" (v4)
50+
# --set-mark marks packages matching these criteria with the number "4" (v6)
51+
# these packets are filtered by the tc filter with "handle 2"
4352
# this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT}
44-
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2
45-
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET} -j MARK --set-mark 0x2
53+
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2
54+
iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET_V4} -j MARK --set-mark 0x2
55+
56+
if [ ! -z "${LOCALNET_V6}" ] ; then
57+
ip6tables -t mangle -A OUTPUT -p tcp -m tcp --dport 8333 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4
58+
ip6tables -t mangle -A OUTPUT -p tcp -m tcp --sport 8333 ! -d ${LOCALNET_V6} -j MARK --set-mark 0x4
59+
fi

0 commit comments

Comments
 (0)