def parse(self):
"""
Update the headers in self.match based on self.data
Parses the relevant header features out of the packet, using
the table outlined in the OF1.1 spec, Figure 4
"""
self.bytes = len(self.data)
self.match.in_port = self.in_port
self.match.type = ofp.OFPMT_STANDARD
self.match.length = ofp.OFPMT_STANDARD_LENGTH
self.match.wildcards = 0
self.match.nw_dst_mask = 0
self.match.nw_dst_mask = 0
self.match.dl_dst_mask = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
self.match.dl_src_mask = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
self.mpls_tag_offset = None
self.ip_header_offset = None
idx = 0
try:
idx = self._parse_l2(idx)
if self.match.dl_type == ETHERTYPE_IP:
self.ip_header_offset = idx
idx = self._parse_ip(idx)
if self.match.nw_proto in [ socket.IPPROTO_TCP,
socket.IPPROTO_UDP,
socket.IPPROTO_ICMP]:
self.tcp_header_offset = idx
if self.match.nw_proto != socket.IPPROTO_ICMP:
idx = self._parse_l4(idx)
else:
idx = self._parse_icmp(idx)
elif self.match.dl_type == ETHERTYPE_ARP:
self._parse_arp(idx)
except (parse_error), e:
self.logger.warn("Giving up on parsing packet, got %s" %
(str(e)))
return None
return self.match
评论列表
文章目录