-
Notifications
You must be signed in to change notification settings - Fork 35
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Updated naming schema for IPv6 fragmentation extension protocol files.
- Loading branch information
Showing
13 changed files
with
163 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
#!/usr/bin/env python3 | ||
|
||
############################################################################ | ||
# # | ||
# PyTCP - Python TCP/IP stack # | ||
# Copyright (C) 2020-present Sebastian Majewski # | ||
# # | ||
# This program is free software: you can redistribute it and/or modify # | ||
# it under the terms of the GNU General Public License as published by # | ||
# the Free Software Foundation, either version 3 of the License, or # | ||
# (at your option) any later version. # | ||
# # | ||
# This program is distributed in the hope that it will be useful, # | ||
# but WITHOUT ANY WARRANTY; without even the implied warranty of # | ||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # | ||
# GNU General Public License for more details. # | ||
# # | ||
# You should have received a copy of the GNU General Public License # | ||
# along with this program. If not, see <https://www.gnu.org/licenses/>. # | ||
# # | ||
# Author's email: [email protected] # | ||
# Github repository: https://github.com/ccie18643/PyTCP # | ||
# # | ||
############################################################################ | ||
|
||
|
||
""" | ||
Module contains base class for the IPv6 fragmentation | ||
extension header. | ||
pytcp/protocols/ip6_ext_frag/base.py | ||
ver 2.9 | ||
""" | ||
|
||
|
||
from __future__ import annotations | ||
|
||
import struct | ||
from typing import TYPE_CHECKING, TypeAlias, override | ||
|
||
from pytcp.lib.proto import Proto | ||
from pytcp.protocols.ip6.header import Ip6Next | ||
from pytcp.protocols.ip6_ext_frag.header import ( | ||
Ip6ExtFragHeader, | ||
Ip6ExtFragHeaderProperties, | ||
) | ||
|
||
if TYPE_CHECKING: | ||
from pytcp.protocols.icmp6.fpa import Icmp6Assembler | ||
from pytcp.protocols.raw.fpa import RawAssembler | ||
from pytcp.protocols.tcp.assembler import TcpAssembler | ||
from pytcp.protocols.udp.fpa import UdpAssembler | ||
|
||
Ip6ExtFragPayload: TypeAlias = ( | ||
Icmp6Assembler | TcpAssembler | UdpAssembler | RawAssembler | ||
) | ||
|
||
|
||
class Ip6ExtFrag(Proto, Ip6ExtFragHeaderProperties): | ||
""" | ||
Base class for IPv4 packet parser and assembler. | ||
""" | ||
|
||
__ip6_next = Ip6Next.FRAG | ||
|
||
_header: Ip6ExtFragHeader | ||
|
||
_data: bytes | ||
|
||
_dlen: int | ||
|
||
@override | ||
def __str__(self) -> str: | ||
""" | ||
Get packet log string. | ||
""" | ||
|
||
return ( | ||
f"IPv6_FRAG id {self._header.id}{', MF' if self._header.flag_mf else ''}, " | ||
f"offset {self._header.offset}, next {self._header.next}" | ||
) | ||
|
||
@override | ||
def __repr__(self) -> str: | ||
""" | ||
Get the packet representation string. | ||
""" | ||
|
||
return f"{self.__class__.__name__}({self._header!r})" | ||
|
||
@override | ||
def __bytes__(self) -> bytes: | ||
""" | ||
Get the packet in raw form. | ||
""" | ||
|
||
return struct.pack( | ||
f"! BBH L {self._dlen}s", | ||
int(self._header.next), | ||
0, | ||
self._header.offset | self._header.flag_mf, | ||
self._header.id, | ||
bytes(self._data), | ||
) | ||
|
||
@property | ||
def ip6_next(self) -> Ip6Next: | ||
""" | ||
Get the '__ip6_next' attribute. | ||
""" | ||
|
||
return self.__ip6_next |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.