Пропускная способность Mininet не обновляется динамически через HTTP-запрос в Flask APIPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Пропускная способность Mininet не обновляется динамически через HTTP-запрос в Flask API

Сообщение Anonymous »

Я моделирую пользовательскую топологию сети с помощью Mininet и динамически контролирую пропускную способность с помощью API Flask. В настройку входят сервер, маршрутизатор и два клиента. Я использую TCLink в Mininet для управления пропускной способностью и использую tc (контроль трафика) для динамического ограничения пропускной способности каждого клиента.
На начальном этапе код работает хорошо, и Flask API успешно выполняется, когда я отправляю запрос на изменение пропускной способности для конкретного клиента. Однако, несмотря на правильное выполнение HTTP-запроса, я не вижу ожидаемого изменения пропускной способности в журналах мониторинга, где пропускная способность должна быть ограничена указанным значением (например, 30 Мбит/с).
Вот краткое описание настройки:
  • Сеть Mininet: сервер, маршрутизатор и два клиента.
  • Flask API: позволяет настраивать пользовательскую пропускную способность для каждого клиента через
    /api/set_bandwidth.
  • Мониторинг: запуск iperf для мониторинга пропускной способности между клиентами и
    серверу каждые 5 секунд.
  • Контроль пропускной способности: использование tc (управление трафиком Linux) для установки ограничения скорости TBF
    для каждого канала.
    < /ul>
    Пример вызова API:
    Я отправляю запрос POST на /api/set_bandwidth со следующей полезной нагрузкой:

    Код: Выделить всё

    {
    "client": "client1",
    "bandwidth": 30
    }
    
    Соответствующие фрагменты кода:
  • API Flask для настройки пропускной способности:< /p>

    Код: Выделить всё

    @app.route("/api/set_bandwidth", methods=["POST"])
    def set_bandwidth():
    data = request.json
    client = data.get("client")
    bandwidth = data.get("bandwidth")
    
    if client not in links:
    return jsonify({"status": "error", "message": "Client not found", "links": list(links.keys())})
    
    link = links[client]
    client_iface = f"{client}-eth0"
    router_iface = f"router-eth{1 if client == 'client1' else 2}"
    
    setCustomBandwidth(link, bandwidth, client_iface, router_iface)
    return jsonify({"status": "success"})
    
    Настройка пользовательской пропускной способности с помощью tc:

Код: Выделить всё

def setCustomBandwidth(link, bw, client_iface, router_iface):
def configure_tc(node, iface, bw):
node.cmd(f"tc qdisc replace dev {iface} root tbf rate {bw}mbit burst 10kb latency 50ms")

configure_tc(link.intf1.node, client_iface, bw)
configure_tc(link.intf2.node, router_iface, bw)
[*]Мониторинг пропускной способности:

Код: Выделить всё

def monitorBandwidth(client, server, interval=5):
while True:
result = client.cmd(f"iperf -c {server.IP()} -t 1")
bandwidth = re.search(r"(\d+\.\d+)\sMbits/sec", result)
if bandwidth:
bw_value = float(bandwidth.group(1))
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
insert_bandwidth_data(client.name, client.IP(), bw_value, timestamp)
time.sleep(interval)

Ожидаемое поведение:
Когда я устанавливаю пропускную способность 30 Мбит/с через HTTP-запросе мониторинг должен отражать, что пропускная способность клиента не превышает 30 Мбит/с. Однако пропускная способность остается неизменной.
Мой вопрос:
Почему ограничение пропускной способности не применяется динамически при настройке пропускной способности через API? даже если HTTP-запрос выполняется успешно? Я что-то упускаю из того, как tc применяет изменения пропускной способности, или мне нужна дополнительная настройка в Mininet?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -flask-api
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»