secdev / scapy

Scapy: the Python-based interactive packet manipulation program & library.
https://scapy.net
GNU General Public License v2.0
10.37k stars 1.99k forks source link

Support In-situ Operation Administration and Maintenance (IOAM) #4231

Open jingfeihu opened 6 months ago

jingfeihu commented 6 months ago

Brief description

I would like to contribute CMCC IOAM protocol to scapy. Partly of the IOAM layer has been implemented. I hope everyone who are interested in this can join us to enhance it.

In-situ Operation Administration and Maintenance (IOAM)

Notice: This is China Mobile Communications Corporation (CMCC) IOAM, instead of Cisco IOAM

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
+--------------------------------------+-+-+-+-+--------------+
|                Flow ID               |L|D|C|R| Next Header  |
+--------------------------------------+-+-+-+-+--------------+

L: Loss Flag, alias color value of packet D: Delay Flag, set enable to measure packet delay C: Color Flag, set enable to measure packet drop

IOAM Shim Reference: https://datatracker.ietf.org/doc/rfc9486/ https://datatracker.ietf.org/doc/html/rfc8321

IOAM Report Packet Reference: https://datatracker.ietf.org/doc/draft-ietf-netconf-udp-notif/12/

IOAM layer identifier: IPv4.proto == 186 IPv6.NextHeader == 0x0 && IPv6.HBH.option_type == 0x11

Example Packet Format: IOAMoIPv4 = Ether/IP/IOAM/Payload IOAMoIPv4UDP = Ether/IP/IOAM/UDP/Payload IOAMoIPv4TCP = Ether/IP/IOAM/TCP/Payload IOAMoIPv4VxLAN = Ether/IP/IOAM/UDP/VXLAN/Ether/IP/TCP/Payload IOAMoIPv6IP = Ether/IPv6/IPv6ExtHdrHopByHop(nh=59, options=[HBHOptIOAM(ioam=ioam)])/Payload IOAMoIPv6UDP = Ether/IPv6/IPv6ExtHdrHopByHop(nh=socket.IPPROTO_UDP, options=[HBHOptIOAM(ioam=IOAM)])/UDP/Payload IOAMoIPv6TCP = Ether/IPv6/IPv6ExtHdrHopByHop(nh=socket.IPPROTO_TCP, options=[HBHOptIOAM(ioam=IOAM)])/TCP/Payload IOAMoIPv6VxLAN = Ether/IPv6/IPv6ExtHdrHopByHop(nh=socket.IPPROTO_UDP, options=[HBHOptIOAM(ioam=IOAM)])/UDP/VXLAN/Ether/IP/TCP/Payload

Scapy version

2.5.0

Python version

3.7

Operating system

Linux 5.10.27-051027-generic

Additional environment information

No response

How to reproduce

Ignore

Actual result

No response

Expected result

No response

Related resources

No response

jingfeihu commented 6 months ago

This is the PR: https://github.com/secdev/scapy/pull/4232