首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pox主动openflow规则

Pox主动openflow规则
EN

Stack Overflow用户
提问于 2017-12-22 15:50:11
回答 1查看 1.4K关注 0票数 0

我创建了一个规则,以便在打开的vswitch连接到控制器时添加到它。该规则允许h1与位于同一交换机上的h2通信。下面的规则是在连接到控制器时添加的。

代码语言:javascript
复制
event.connection.send(
                of.ofp_flow_mod(action=of.ofp_action_output(port=1), priority=45,
                                match=of.ofp_match(dl_type=0x800, nw_dst="10.0.0.7")))

由于某些原因,流将无法工作,但如果我将其更改为匹配使用端口,而不是IP,它将工作。由于有多个交换机,我不能仅仅在端口上进行匹配。

起初,我认为ICMP可能不是IPV4,但我确认它正在使用Tcpdump。

代码语言:javascript
复制
sudo tcpdump -e -r tcpdump.pcap dst 192.168.0.103
reading from file tcpdump.pcap, link-type EN10MB (Ethernet)
14:24:30.940749 00:a0:98:ae:2c:fe (oui Unknown) > 00:1d:ec:0e:0b:fa (oui Unknown), ethertype IPv4 (0x0800), length 98: 192.168.0.112 > 192.168.0.103: ICMP echo request, id 1962, seq 1, length 64

该网络由连接到2个叶交换机和每个叶交换机的2个主机的脊柱开关组成。

任何帮助都将不胜感激。

代码语言:javascript
复制
def _handle_ConnectionUp(self, event):
        #dpid = event.connection.dpid
        # printing the dpid
        # log.info("Switch with DPID of %s has come up.",dpid_to_str(event.dpid))
        print("Switch with DPID of %s has come up." % (dpid_to_str(event.dpid)))

        # printing the dpid in hex
        # log.info("Switch with DPID in HEX format of %s has come up." % (hex(event.dpid)))
        print("Switch with DPID in HEX format of %s has come up." % (hex(event.dpid)))

        if event.dpid == 0x1:

            event.connection.send(
                of.ofp_flow_mod(action=of.ofp_action_output(port=2), priority=45,
                                match=of.ofp_match(in_port = 1)))
            event.connection.send(
                of.ofp_flow_mod(action=of.ofp_action_output(port=1), priority=45,
                                match=of.ofp_match(dl_type=0x800, nw_dst="10.0.0.1")))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-22 20:29:12

在典型的L2网络中,两个主机需要与ARP协议通信以交换硬件地址,然后才能互相ping (或任何其他基于IP的协议)。

我最好的客户是,使用您当前的配置,h1可以向h2发送一个ARP请求(这要感谢入口端口上的规则),但是h2不能回答。因此,h1不知道h2的硬件地址,无法发送IP数据包。要验证这一假设,您可以运行:

代码语言:javascript
复制
$ arp
Address               HWtype  HWaddress           Flags Mask            Iface
10.0.0.7                      (incomplete)                              eno1
10.0.0.254            ether   00:00:00:00:00:08   C                     eno1

例如,在这里,10.0.0.7的地址是未知的。

您至少有两个解决方案:

  1. 在h1和h2中手动设置新的ARP条目。见arp -h
  2. 通过添加必要的规则,让h1和h2通过ARP进行通信。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47944124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档