def forward_packet(self, pkt):
print "Received packet:"
hexdump(str(pkt))
pkt.show()
try:
assert isinstance(pkt, Ether)
assert isinstance(pkt.getlayer(1), Dot1Q)
dot1q = pkt.getlayer(1)
assert isinstance(dot1q, Dot1Q)
if self.in_out_stag is None:
payload = dot1q.payload
payload_type = dot1q.type
pkt.remove_payload()
pkt.type = payload_type
new_pkt = pkt / payload
in_port = dot1q.vlan
else:
if dot1q.vlan != self.in_out_stag:
print 'Dropping packet because outer tag %d does not match %d' % (
dot1q.vlan, self.in_out_stag)
return
dot1q_inner = dot1q.getlayer(1)
assert isinstance(dot1q_inner, Dot1Q)
payload = dot1q_inner.payload
payload_type = dot1q_inner.type
pkt.remove_payload()
pkt.type = payload_type
new_pkt = pkt / payload
in_port = dot1q_inner.vlan
if self.agent is not None:
self.agent.send_packet_in(str(new_pkt), in_port=in_port)
print 'new packet forwarded to controller (with in_port=%d):' % in_port
new_pkt.show()
except Exception, e:
logging.exception("Unexpected packet format received by InOutReceiver: %s" % e)
logging.error(hexdump(str(pkt), 'return'))
评论列表
文章目录