L2TP - Layer Two Tunnelling Protocol#

pcapkit.protocols.link.l2tp contains L2TP only, which implements extractor for Layer Two Tunnelling Protocol (L2TP) [*], whose structure is described as below:

Octets

Bits

Name

Description

0

0

l2tp.flags

Flags and Version Info

0

0

l2tp.flags.type

Type (control / data)

0

1

l2tp.flags.len

Length

0

2

Reserved (must be zero x00)

0

4

l2tp.flags.seq

Sequence

0

5

Reserved (must be zero x00)

0

6

l2tp.flags.offset

Offset

0

7

l2tp.flags.prio

Priority

1

8

Reserved (must be zero x00)

1

12

l2tp.ver

Version (2)

2

16

l2tp.length

Length (optional by len)

4

32

l2tp.tunnelid

Tunnel ID

6

48

l2tp.sessionid

Session ID

8

64

l2tp.ns

Sequence Number (optional by seq)

10

80

l2tp.nr

Next Sequence Number (optional by seq)

12

96

l2tp.offset

Offset Size (optional by offset)

class pcapkit.protocols.link.l2tp.L2TP(file=None, length=None, **kwargs)[source]#

Bases: Link[L2TP, L2TP]

This class implements Layer Two Tunnelling Protocol.

property name: Literal['Layer 2 Tunnelling Protocol']#

Name of current protocol.

property length: int#

Header length of current protocol.

property type: Literal['control', 'data']#

L2TP type.

read(length=None, **kwargs)[source]#

Read Layer Two Tunnelling Protocol.

Structure of L2TP header [RFC 2661]:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|L|x|x|S|x|O|P|x|x|x|x|  Ver  |          Length (opt)         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Tunnel ID           |           Session ID          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             Ns (opt)          |             Nr (opt)          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Offset Size (opt)        |    Offset pad... (opt)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Parameters:
  • length (Optional[int]) – Length of packet data.

  • **kwargs (Any) – Arbitrary keyword arguments.

Return type:

L2TP

Returns:

Parsed packet data.

make(version=2, type=Type.Data, type_default=None, type_namespace=None, type_reversed=False, priority=False, length=None, tunnel_id=0, session_id=0, ns=None, nr=None, offset=None, payload=b'', **kwargs)[source]#

Make (construct) packet data.

Parameters:
Return type:

L2TP

Returns:

Constructed packet data.

classmethod _make_data(data)[source]#

Create key-value pairs from data for protocol construction.

Parameters:

data (L2TP) – protocol data

Return type:

dict[str, Any]

Returns:

Key-value pairs for protocol construction.

classmethod __index__()[source]#

Numeral registry index of the protocol.

Raises:

UnsupportedCall – This protocol has no registry entry.

Return type:

NoReturn

Header Schemas#

class pcapkit.protocols.schema.link.l2tp.L2TP(dict_=None, **kwargs)[source]#

Bases: Schema

Header schema for L2TP packet.

flags: FlagsType = <BitField flags>#

Flags and version of L2TP packet.

length: int = <ConditionalField length>#

Length of L2TP packet.

tunnel_id: int = <UInt16Field tunnel_id>#

Tunnel ID of L2TP packet.

session_id: int = <UInt16Field session_id>#

Session ID of L2TP packet.

ns: int = <ConditionalField ns>#

Sequence number of L2TP packet.

nr: int = <ConditionalField nr>#

Next sequence number of L2TP packet.

offset: int = <ConditionalField offset>#

Offset size of L2TP packet.

padding: bytes = <ConditionalField padding>#

Padding of L2TP packet.

payload: bytes = <PayloadField payload>#

Payload of L2TP packet.

Type Stubs#

class pcapkit.protocols.schema.link.l2tp.FlagsType[source]#

Bases: TypedDict

Flags of L2TP packet.

type: int#

Type of L2TP packet.

len: int#

Length of L2TP packet.

seq: int#

Sequence number of L2TP packet.

offset: int#

Offset size of L2TP packet.

prio: int#

Priority of L2TP packet.

version: Literal[2]#

Version of L2TP packet.

Data Models#

class pcapkit.protocols.data.link.l2tp.L2TP(*args: VT, **kwargs: VT)[source]#

Bases: Protocol

Data model for L2TP packet.

flags: Flags#

Flags and version info.

version: int#

Version.

length: Optional[int]#

Length.

tunnelid: int#

Tunnel ID.

sessionid: int#

Session ID.

ns: Optional[int]#

Sequence Number.

nr: Optional[int]#

Next Sequence Number.

offset: Optional[int]#

Offset Size.

hdr_len: int#

Header length.

class pcapkit.protocols.data.link.l2tp.Flags(*args: VT, **kwargs: VT)[source]#

Bases: Data

Data model for L2TP flags and version info.

type: Type#

Type.

len: bool#

Length.

seq: bool#

Sequence.

offset: bool#

Offset.

prio: bool#

Priority.

Footnotes