首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迷你网络中的pox : event.parsed在POX中提供了什么?什么是parse.next?

迷你网络中的pox : event.parsed在POX中提供了什么?什么是parse.next?
EN

Stack Overflow用户
提问于 2016-03-25 19:40:27
回答 1查看 2.6K关注 0票数 3

在l3_learning.py中,class l3_switch中有一个名为_handle_PacketIn的方法。现在我知道这个事件是当交换机接收到一个在其表中没有对应条目的数据包时联系控制器的事件。

我不明白的是这里

代码语言:javascript
复制
packet = event.parsed

那么在isinstance(packet.next, ipv4)packet.next是什么意思呢?

代码语言:javascript
复制
def _handle_PacketIn (self, event):
    dpid = event.connection.dpid
    inport = event.port
    packet = event.parsed
    if not packet.parsed:
      log.warning("%i %i ignoring unparsed packet", dpid, inport)
      return

    if dpid not in self.arpTable:
      # New switch -- create an empty table
      self.arpTable[dpid] = {}
      for fake in self.fakeways:
        self.arpTable[dpid][IPAddr(fake)] = Entry(of.OFPP_NONE,
         dpid_to_mac(dpid))

    if packet.type == ethernet.LLDP_TYPE:
      # Ignore LLDP packets
      return

    if isinstance(packet.next, ipv4):
      log.debug("%i %i IP %s => %s", dpid,inport,
                packet.next.srcip,packet.next.dstip)

      # Send any waiting packets...
      self._send_lost_buffers(dpid, packet.next.srcip, packet.src, inport)

      # Learn or update port/MAC info
      if packet.next.srcip in self.arpTable[dpid]:
        if self.arpTable[dpid][packet.next.srcip] != (inport, packet.src):
          log.info("%i %i RE-learned %s", dpid,inport,packet.next.srcip)
      else:
        log.debug("%i %i learned %s", dpid,inport,str(packet.next.srcip))
      self.arpTable[dpid][packet.next.srcip] = Entry(inport, packet.src)

      # Try to forward
      dstaddr = packet.next.dstip
      if dstaddr in self.arpTable[dpid]:
        # We have info about what port to send it out on...

        prt = self.arpTable[dpid][dstaddr].port
        mac = self.arpTable[dpid][dstaddr].mac
EN

回答 1

Stack Overflow用户

发布于 2016-03-25 20:30:13

我想我已经弄明白了。

数据包是数据链路层发送到物理层的整个数据包。packet.next去掉了对数据链路层的封装,将IP数据包( IP层发送到数据链路层的数据包)暴露出来。因此,为了获得源地址,我们使用packet.src,为了获得源的IP地址,我们使用packet.next.srcip

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36219238

复制
相关文章

相似问题

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