Как я могу включить уменьшение ttl на коммутаторах OpenFlow?

Я использую Mininet с пользовательской топологией и контроллером RYU-REST "ofctl-rest.py". После установки некоторых потоков в коммутаторах, отправки некоторых пакетов по сети и захвата трафика я обнаружил, что коммутаторы не уменьшают поле ttl в слое ip. Я выяснил, что я должен сказать переключателям уменьшить поле ttl (это возможно начиная с OpenFlow - версия 1.1). Для этого я пробую строку "type": "DEC_NW_TTL", но она не работает. Моя завершенная команда выглядит так:

curl -X POST -d '{
    "dpid": 1,
    "cookie": 1,
    "cookie_mask": 1,
    "table_id": 0,
    "idle_timeout": 3600,
    "hard_timeout": 3600,
    "priority": 0,
    "flags": 1,
    "match":{
        "in_port": 1
    },
    "actions":[
        {
            "type":"OUTPUT",
            "port": 4,
            "type":"DEC_NW_TTL"
        }
    ]
 }' http://localhost:8080/stats/flowentry/add

Что я не прав? Как мне изменить команду, чтобы коммутатор уменьшил ttl? Пожалуйста, помогите мне. Заранее спасибо.

2 ответа

Ответ Аббадона должен работать. Вы должны поместить каждое действие в пару скобок. Однако порядок различных действий в почтовом запросе не имеет значения. OpenFlow имеет порядок по умолчанию для различных типов действий.

  1. копировать TTL внутрь: применить копировать внутренние действия TTL к пакету
  2. pop: применить все действия с тегами pop к пакету
  3. push-MPLS: применить действие push метки MPLS к пакету
  4. push-PBB: применить к пакету push-метку PBB
  5. push-VLAN: применить действие push-метки VLAN к пакету
  6. копировать TTL наружу: применить действие копирования TTL наружу к пакету
  7. уменьшение TTL: применить действие уменьшения TTL к пакету
  8. set: применить все действия set-field к пакету
  9. qos: применить все действия QoS, такие как установка очереди для пакета
  10. group: если указано групповое действие, примените действия соответствующих групповых групп (ы) в порядке, указанном в этом списке
  11. вывод: если не указано групповое действие, переслать пакет на порт, указанный в выходном действии

Я думаю, что вы должны указать более одного действия. Также вам следует изменить порядок действий. Во-первых, вам нужно уменьшить TTL, а затем отправить пакет. Отправка пакета сначала, а затем уменьшение не работает.

Я бы попробовал это так:

curl -X POST -d '{
    "dpid": 1,
    "cookie": 1,
    "cookie_mask": 1,
    "table_id": 0,
    "idle_timeout": 3600,
    "hard_timeout": 3600,
    "priority": 0,
    "flags": 1,
    "match":{
        "in_port": 1
    },
    "actions":[
        {
            "type":"DEC_NW_TTL"
        },
        {
            "type":"OUTPUT",
            "port": 4
        }
    ]
 }' http://localhost:8080/stats/flowentry/add
Другие вопросы по тегам