12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """PPP-over-Ethernet."""
- from pypacker import pypacker
- from pypacker.layer12.ppp import PPP
- import struct
- # RFC 2516 codes
- PPPoE_PADI = 0x09
- PPPoE_PADO = 0x07
- PPPoE_PADR = 0x19
- PPPoE_PADS = 0x65
- PPPoE_PADT = 0xA7
- PPPoE_SESSION = 0x00
- class PPPoE(pypacker.Packet):
- __hdr__ = (
- ("v_type", "B", 0x11),
- ("code", "B", 0),
- ("session", "H", 0),
- ("len", "H", 0) # payload length
- )
- def __get_v(self):
- return self.v_type >> 4
- def __set_v(self, v):
- self.v_type = (v << 4) | (self.v_type & 0xf)
- v = property(__get_v, __set_v)
- def __get_type(self):
- return self.v_type & 0xf
- def __set_type(self, t):
- self.v_type = (self.v_type & 0xf0) | t
- type = property(__get_type, __set_type)
- def _dissect(self, buf):
- code = buf[1]
- if code == PPPoE_SESSION:
- try:
- self._set_bodyhandler(PPP(buf[6:]))
- except (KeyError, struct.error, pypacker.UnpackError):
- pass
- else:
- pass
- return 6
- # XXX - TODO TLVs, etc.
|