2016-11-08 18 views
0

Я пытаюсь перенаправить потоки TCP на определенные серверы, используя их исходный порт tcp с контроллером RYU SDN. Это моя топология (простая для первого шага):Согласование потоков TCP на основе портов tcp Контроллер Ryu

host -- ovs1 -- ovs2 -- server 

правило подходит для ovs1:

match = parse.OFPMatch(in_port=port,eth_type=0x0800, ipv4_dst=server_ip, tcp_src=tcp_pkt.src_port) 

Но я получаю следующую ошибку:

EventOFPErrorMsg received. 
version=0x4, msg_type=0x1, msg_len=0x4c, xid=0x370bf1bf 
`-- msg_type: OFPT_ERROR(1) 
OFPErrorMsg(type=0x4, code=0x9, data=b'\x04\x0e\x00\x70\x37\x0b\xf1\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x28\x80\x00\x00\x04\x00\x00\x00\x01\x80\x00\x0a\x02') 
|-- type: OFPET_BAD_MATCH(4) 
|-- code: OFPBMC_BAD_PREREQ(9) 
`-- data: version=0x4, msg_type=0xe, msg_len=0x70, xid=0x370bf1bf 
    `-- msg_type: OFPT_FLOW_MOD(14) 

Дело в том, , если я удалю параметр tcp_src, все будет хорошо, поэтому я думаю, что проблема связана с тем, как я передаю порт.

Любые идеи?

Заранее благодарен!

ответ

1

Хорошо, потратив много времени на эту проблему, я получил ответ. Для того, чтобы определить конкретный матч с TCP портами, мы должны выполнить все необходимые условия, это означает, что в моем случае необходимо добавить поле ip_proto:

match = parse.OFPMatch(in_port=port,eth_type=0x0800, ip_proto=6, ipv4_dst=server_ip, tcp_src=tcp_pkt.src_port) 

Я нашел ответ здесь: OpenFlow Switch Specification