*** packet/ethernet_orig.py	2011-05-26 15:52:35.201175252 +0800
--- packet/ethernet.py	2011-05-26 15:30:50.325425778 +0800
***************
*** 59,64 ****
--- 59,66 ----
  
          self.dst  = array('B', ETHER_ANY)
          self.src  = array('B', ETHER_ANY)
+ 	# for vlan
+ 	self.vlan = 0
          self.type = 0
          self.next = ''
  
***************
*** 75,81 ****
  
          self.dst = self.arr[:6]
          self.src = self.arr[6:12]
!         self.type = struct.unpack('!H', self.arr[12:ethernet.MIN_LEN])[0]
  
          self.hdr_len = ethernet.MIN_LEN
          self.payload_len = alen - self.hdr_len
--- 77,92 ----
  
          self.dst = self.arr[:6]
          self.src = self.arr[6:12]
! 
! 	# check if the packet contained vlan
! 	ethernet.MIN_LEN = 14	
! 	self.vlan = struct.unpack('!H', self.arr[12:ethernet.MIN_LEN])[0]
! 	if (self.vlan == ethernet.VLAN_TYPE):
! 		ethernet.MIN_LEN = 18
! 		self.type = struct.unpack('!H', self.arr[16:ethernet.MIN_LEN])[0]
! 	else:
! 		# original parse method
!         	self.type = struct.unpack('!H', self.arr[12:ethernet.MIN_LEN])[0]
  
          self.hdr_len = ethernet.MIN_LEN
          self.payload_len = alen - self.hdr_len
