mirror of
https://github.com/LibreQoE/LibreQoS.git
synced 2025-02-25 18:55:32 -06:00
Merge branch 'main' into unifig
This commit is contained in:
20
README.md
20
README.md
@@ -2,10 +2,12 @@
|
||||
|
||||
LibreQoS is a Quality of Experience (QoE) Smart Queue Management (SQM) system designed for Internet Service Providers to optimize the flow of their network traffic and thus reduce bufferbloat, keep the network responsive, and improve the end-user experience.
|
||||
|
||||
Servers running LibreQoS can shape traffic for many thousands of customers.
|
||||
Servers running LibreQoS can shape traffic for thousands of customers. On higher-end servers, LibreQoS is capable of shaping 50-80 Gbps of traffic.
|
||||
|
||||
Learn more at [LibreQoS.io](https://libreqos.io/)!
|
||||
|
||||
<img alt="LibreQoS" src="https://user-images.githubusercontent.com/22501920/223866474-603e1112-e2e6-4c67-93e4-44c17b1b7c43.png"></a>
|
||||
|
||||
## Sponsors
|
||||
|
||||
LibreQoS' development is made possible by our sponsors, the NLnet Foundation and Equinix.
|
||||
@@ -23,8 +25,18 @@ Please support the continued development of LibreQoS by sponsoring us via [GitHu
|
||||
|
||||
[ReadTheDocs](https://libreqos.readthedocs.io/en/latest/)
|
||||
|
||||
## Matrix Chat
|
||||
## LibreQoS Chat
|
||||
|
||||
Our Matrix chat channel is available at [https://matrix.to/#/#libreqos:matrix.org](https://matrix.to/#/#libreqos:matrix.org).
|
||||
Our Zulip chat server is available at [https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/](https://chat.libreqos.io/join/fvu3cerayyaumo377xwvpev6/).
|
||||
|
||||
## Long-Term Stats (LTS)
|
||||
|
||||
Long-Term Stats (LTS) is an analytics service built for LibreQoS that revolutionizes the way you track and analyze your network.
|
||||
With flexible time window views ranging from 5 minutes to 1 month, LTS gives you comprehensive insights into your network's performance.
|
||||
Built from the ground-up for performance and efficiency, LTS greatly outperforms our original InfluxDB plugin, and gives you rapidly rendered data to help you maximize your network performance.
|
||||
|
||||
We provide a free 30-day trial of LTS, after which the rate is $0.30 USD per shaped subscriber.
|
||||
You can enroll in the 30-day free trial by [upgrading to the latest version of LibreQoS v1.4](https://libreqos.readthedocs.io/en/latest/docs/Updates/update.html) and selecting "Start Stats Free Trial" in the top-right corner of the local LibreQoS WebUI.
|
||||
|
||||
<img alt="LibreQoS Long Term Stats" src="https://i0.wp.com/libreqos.io/wp-content/uploads/2023/11/01-Dashboard.png"></a>
|
||||
|
||||
<img alt="LibreQoS" src="https://user-images.githubusercontent.com/22501920/223866474-603e1112-e2e6-4c67-93e4-44c17b1b7c43.png"></a>
|
||||
|
||||
@@ -27,7 +27,8 @@ There are two options for the bridge to pass data through your two interfaces:
|
||||
- Bifrost XDP-Accelerated Bridge
|
||||
- Regular Linux Bridge
|
||||
|
||||
The Bifrost Bridge is faster and generally recommended, but may not work perfectly in a VM setup using virtualized NICs.
|
||||
The Bifrost Bridge is recommended for Intel NICs with XDP support, such as the X520 and X710.
|
||||
The regular Linux bridge is recommended for Nvidea/Mellanox NICs such as the ConnectX-5 series (which have superior bridge performance), and VM setups using virtualized NICs.
|
||||
To use the Bifrost bridge, skip the regular Linux bridge section below, and be sure to enable Bifrost/XDP in lqos.conf a few sections below.
|
||||
|
||||
### Adding a regular Linux bridge (if not using Bifrost XDP bridge)
|
||||
|
||||
@@ -14,8 +14,8 @@ Single-thread CPU performance will determine the max throughput of a single HTB
|
||||
| 250 Mbps | 1250 |
|
||||
| 500 Mbps | 1500 |
|
||||
| 1 Gbps | 2000 |
|
||||
| 2 Gbps | 3000 |
|
||||
| 4 Gbps | 4000 |
|
||||
| 3 Gbps | 3000 |
|
||||
| 10 Gbps | 4000 |
|
||||
|
||||
Below is a table of approximate aggregate throughput capacity, assuming a a CPU with a [single thread](https://www.cpubenchmark.net/singleThread.html#server-thread) performance of 2700 or greater:
|
||||
|
||||
@@ -26,8 +26,8 @@ Below is a table of approximate aggregate throughput capacity, assuming a a CPU
|
||||
| 5 Gbps | 6 |
|
||||
| 10 Gbps | 8 |
|
||||
| 20 Gbps | 16 |
|
||||
| 50 Gbps* | 32 |
|
||||
|
||||
| 50 Gbps | 32 |
|
||||
| 100 Gbps * | 64 |
|
||||
(* Estimated)
|
||||
|
||||
So for example, an ISP delivering 1Gbps service plans with 10Gbps aggregate throughput would choose a CPU with a 2500+ single-thread score and 8 cores, such as the Intel Xeon E-2388G @ 3.20GHz.
|
||||
|
||||
@@ -14,7 +14,38 @@ On the first successful run, it will create a network.json and ShapedDevices.csv
|
||||
If a network.json file exists, it will not be overwritten.
|
||||
You can modify the network.json file to more accurately reflect bandwidth limits.
|
||||
ShapedDevices.csv will be overwritten every time the UISP integration is run.
|
||||
You have the option to run integrationUISP.py automatically on boot and every 30 minutes, which is recommended. This can be enabled by setting ```automaticImportUISP = True``` in ispConfig.py
|
||||
You have the option to run integrationUISP.py automatically on boot and every 10 minutes, which is recommended. This can be enabled by setting ```automaticImportUISP = True``` in ispConfig.py
|
||||
|
||||
## Powercode Integration
|
||||
|
||||
First, set the relevant parameters for Sonar (powercode_api_key, powercode_api_url, etc.) in ispConfig.py.
|
||||
|
||||
To test the Powercode Integration, use
|
||||
|
||||
```shell
|
||||
python3 integrationPowercode.py
|
||||
```
|
||||
|
||||
On the first successful run, it will create a ShapedDevices.csv file.
|
||||
You can modify the network.json file manually to reflect Site/AP bandwidth limits.
|
||||
ShapedDevices.csv will be overwritten every time the Powercode integration is run.
|
||||
You have the option to run integrationPowercode.py automatically on boot and every 10 minutes, which is recommended. This can be enabled by setting ```automaticImportPowercode = True``` in ispConfig.py
|
||||
|
||||
## Sonar Integration
|
||||
|
||||
First, set the relevant parameters for Sonar (sonar_api_key, sonar_api_url, etc.) in ispConfig.py.
|
||||
|
||||
To test the Sonar Integration, use
|
||||
|
||||
```shell
|
||||
python3 integrationSonar.py
|
||||
```
|
||||
|
||||
On the first successful run, it will create a ShapedDevices.csv file.
|
||||
If a network.json file exists, it will not be overwritten.
|
||||
You can modify the network.json file to more accurately reflect bandwidth limits.
|
||||
ShapedDevices.csv will be overwritten every time the Sonar integration is run.
|
||||
You have the option to run integrationSonar.py automatically on boot and every 10 minutes, which is recommended. This can be enabled by setting ```automaticImportSonar = True``` in ispConfig.py
|
||||
|
||||
## Splynx Integration
|
||||
|
||||
@@ -31,4 +62,4 @@ python3 integrationSplynx.py
|
||||
On the first successful run, it will create a ShapedDevices.csv file.
|
||||
You can manually create your network.json file to more accurately reflect bandwidth limits.
|
||||
ShapedDevices.csv will be overwritten every time the Splynx integration is run.
|
||||
You have the option to run integrationSplynx.py automatically on boot and every 30 minutes, which is recommended. This can be enabled by setting ```automaticImportSplynx = True``` in ispConfig.py
|
||||
You have the option to run integrationSplynx.py automatically on boot and every 10 minutes, which is recommended. This can be enabled by setting ```automaticImportSplynx = True``` in ispConfig.py
|
||||
|
||||
@@ -83,6 +83,17 @@ powercode_api_key = ''
|
||||
# Everything before :444/api/ in your Powercode instance URL
|
||||
powercode_api_url = ''
|
||||
|
||||
# Sonar Integration
|
||||
automaticImportSonar = False
|
||||
sonar_api_key = ''
|
||||
sonar_api_url = '' # ex 'https://company.sonar.software/api/graphql'
|
||||
# If there are radios in these lists, we will try to get the clients using snmp. This requires snmpwalk to be install on the server. You can use "sudo apt-get install snmp" for that. You will also need to fill in the snmp_community.
|
||||
sonar_airmax_ap_model_ids = [] # ex ['29','43']
|
||||
sonar_ltu_ap_model_ids = [] # ex ['4']
|
||||
snmp_community = ''
|
||||
# This is for all account statuses where we should be applying QoS. If you leave it blank, we'll use any status in account marked with "Activates Account" in Sonar.
|
||||
sonar_active_status_ids = []
|
||||
|
||||
# Splynx Integration
|
||||
automaticImportSplynx = False
|
||||
splynx_api_key = ''
|
||||
|
||||
@@ -27,6 +27,13 @@ def pullMikrotikIPv6():
|
||||
# pass
|
||||
list_arp4 = api.get_resource('/ip/arp')
|
||||
entries = list_arp4.get()
|
||||
for entry in entries:
|
||||
try:
|
||||
macToIPv4[entry['mac-address']] = entry['address']
|
||||
except:
|
||||
pass
|
||||
list_dhcp4 = api.get_resource('/ip/dhcp-server/lease')
|
||||
entries = list_dhcp4.get()
|
||||
for entry in entries:
|
||||
try:
|
||||
macToIPv4[entry['mac-address']] = entry['address']
|
||||
@@ -35,10 +42,15 @@ def pullMikrotikIPv6():
|
||||
list_binding6 = api.get_resource('/ipv6/dhcp-server/binding')
|
||||
entries = list_binding6.get()
|
||||
for entry in entries:
|
||||
try:
|
||||
clientAddressToIPv6[entry['client-address']] = entry['address']
|
||||
except:
|
||||
pass
|
||||
if len(entry['duid']) == 14:
|
||||
mac = entry['duid'][2:14].upper()
|
||||
macNew = mac[0:2] + ':' + mac[2:4] + ':' + mac[4:6] + ':' + mac[6:8] + ':' + mac[8:10] + ':' + mac[10:12]
|
||||
macToIPv6[macNew] = entry['address']
|
||||
else:
|
||||
try:
|
||||
clientAddressToIPv6[entry['client-address']] = entry['address']
|
||||
except:
|
||||
pass
|
||||
list_neighbor6 = api.get_resource('/ipv6/neighbor')
|
||||
entries = list_neighbor6.get()
|
||||
for entry in entries:
|
||||
|
||||
Reference in New Issue
Block a user