У меня есть приложение SDN на основе Pox, которое прослушивает PacketIns для контроллера.Я хотел бы проверить, является ли пакет для контроллера ICMP.Документы Pox предоставляют пример проверки, является ли PacketIn ARP , как показано в следующем коде.
def _handle_PacketIn (self, event):
packet = event.parsed
if packet.type == packet.ARP_TYPE: # packet.ARP_TYPE is const equal to 2054
# do something neat with the packet
pass
Но я не могу использовать ту же логику для проверки сообщений ICMP:
def _handle_PacketIn (self, event):
packet = event.parsed
if packet.type == packet.ICMP_TYPE:
# do something neat with the packet
pass
Последний код возвращает ошибку:
*** AttributeError: 'ethernet' object has no attribute 'ICMP_TYPE'
Нетpacket.ICMP_TYPE, который можно увидеть, проверив dir (packet).
Package.type равен числу, представляющему протокол, и где-то в коде pox эти числа, вероятно, аккуратно выложены помимопротоколы, которые они представляют - я понятия не имею, где это может быть.Например, я вижу, что package.type моего PacketIn имеет значение 2048, но я не знаю, какой протокол представляет или как узнать.