Send Network Data DSCP Tag QoS
-
- Beiträge: 6
- Registriert: 07.07.2024 02:02
Send Network Data DSCP Tag QoS
Hallo zusammen,
ist es möglich mit Purebasic Netwerkdaten per IPv4 mit DSCP Tag zu senden um QoS zu verwenden?
Wenn es keine native Unterstützung gibt, vielleicht über eine Lib? Wichtig ist mir, dass die Funktion mit allen Compiler für alle OS geht.
Vielen Dank.
ist es möglich mit Purebasic Netwerkdaten per IPv4 mit DSCP Tag zu senden um QoS zu verwenden?
Wenn es keine native Unterstützung gibt, vielleicht über eine Lib? Wichtig ist mir, dass die Funktion mit allen Compiler für alle OS geht.
Vielen Dank.
-
- Beiträge: 6
- Registriert: 07.07.2024 02:02
Re: Send Network Data DSCP Tag QoS
Nachtrag: Vielleicht gibt es eine Möglichkeit das IPv4 Paket auch indirekt zu bearbeiten?
Re: Send Network Data DSCP Tag QoS
Es sind IPv4 Header Daten und keine Nutzdaten die du Sendest.
Google
Wählen Sie „Lokale Computerrichtlinie“ > „Computerkonfiguration“ > „Windows-Einstellungen“. Klicken Sie mit der rechten Maustaste auf „Richtlinienbasiertes QoS“ und wählen Sie „Neue Richtlinie erstellen“. Schritt 2 – Benennen Sie die Richtlinie. Im folgenden Beispiel haben wir sie „Quicklink Studio“ genannt. Sie müssen dann einen DSCP-Dezimalwert festlegen. Für dieses Beispiel haben wir 46 verwendet.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 6
- Registriert: 07.07.2024 02:02
Re: Send Network Data DSCP Tag QoS
Das ist korrekt. Der DSCP Tag liegt direkt am Anfang von Layer 3 und somit im IPv4 Header. Klar lässt sich eine Richtlinie in Windows erstellen. Ich möchte aber, dass es die Anwendung direkt macht. Der Vorteil wäre die Portierbarkeit. Somit wäre der Tag auch bei Linux & macOS gesetzt. Also falls möglich. Die Anwendung "Zoom" macht dies schließlich auch.mk-soft hat geschrieben: 08.02.2025 13:25 Es sind IPv4 Header Daten und keine Nutzdaten die du Sendest.
Re: Send Network Data DSCP Tag QoS
Ich weiss nicht ob das so richtig ist.
Auf meiner VM Window 10 geht es nicht nach WireShark Diagnose ...
Update
Auf meiner VM Window 10 geht es nicht nach WireShark Diagnose ...
Update
Code: Alles auswählen
;-TOP
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
CompilerIf #PB_Compiler_Backend <> #PB_Backend_C
CompilerError "Linux only with C-Backend!"
CompilerEndIf
CompilerEndIf
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Macro GetLastError()
GetLastError_()
EndMacro
CompilerElse
CompilerIf #PB_Compiler_Backend = #PB_Backend_C
Procedure GetLastError()
!#include "errno.h"
!extern int errno;
Protected r1
!v_r1=errno;
ProcedureReturn r1
EndProcedure
CompilerElse
ImportC ""
errno
EndImport
;!extrn errno;
Procedure GetLastError()
Protected r1
r1 = errno
ProcedureReturn r1
EndProcedure
CompilerEndIf
CompilerEndIf
Procedure.s GetErrorString(ErrorCode)
Protected r1.s, *buffer, len
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
len = FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER|#FORMAT_MESSAGE_FROM_SYSTEM|#FORMAT_MESSAGE_IGNORE_INSERTS, 0, ErrorCode, 0, @*buffer,0,0)
If len
r1 = PeekS(*buffer)
LocalFree_(*buffer)
EndIf
CompilerDefault
*buffer = strerror_(ErrorCode)
r1 = PeekS(*buffer, -1, #PB_UTF8)
CompilerEndSelect
ProcedureReturn r1
EndProcedure
;
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
#IPPROTO_IP = 0
#IP_TOS = 3
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 36
Macro sock_errno()
GetLastError()
EndMacro
CompilerCase #PB_OS_Linux
#IPPROTO_IP = 0
#IP_TOS = 1
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 67
Macro sock_errno()
GetLastError()
EndMacro
CompilerCase #PB_OS_Windows
#IPPROTO_IP = 0
#IP_TOS = 3
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 39
ImportC ""
Macro sock_errno()
WSAGetLastError_()
EndMacro
EndImport
CompilerEndSelect
Procedure set_dscp(fd, dscp.a, flag = #PB_Network_IPv4)
Protected r1
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
Protected value.l
Protected value6.l
CompilerCase #PB_OS_Linux
Protected value.l
Protected value6.l
CompilerCase #PB_OS_Windows
Protected value.i
Protected value6.i
CompilerEndSelect
If dscp > 63
ProcedureReturn -1
EndIf
If flag = #PB_Network_IPv4
value = dscp << 2
If setsockopt_(fd, #IPPROTO_IP, #IP_TOS, @value, SizeOf(value))
ProcedureReturn sock_errno()
EndIf
ElseIf flag = #PB_Network_IPv6
value6 = dscp << 2
If setsockopt_(fd, #IPPROTO_IPV6, #IPV6_TCLASS, @value6, SizeOf(value6))
ProcedureReturn sock_errno()
EndIf
EndIf
ProcedureReturn 0
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
server = CreateNetworkServer(1, 9000, #PB_Network_IPv4)
If server
r1 = set_dscp(ServerID(1), 46, #PB_Network_IPv4)
Debug GetErrorString(r1)
CloseNetworkServer(1)
EndIf
Delay(500)
server = CreateNetworkServer(1, 9000, #PB_Network_IPv6)
If server
r1 = set_dscp(ServerID(1), 46, #PB_Network_IPv6)
Debug GetErrorString(r1)
CloseNetworkServer(1)
EndIf
CompilerEndIf
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
-
- Beiträge: 6
- Registriert: 07.07.2024 02:02
Re: Send Network Data DSCP Tag QoS
Ich habe den Code jetzt noch nicht getestet. Auf dem ersten Blick glaube ich, dass der Fehler im angegebenen IP Protokoll steckt. dieses muss 0x0800 für IPv4 sein. Ich werde das mal auf meiner Linux Maschine testen. Vielen Dank erst Mal für den Code.
-
- Beiträge: 6
- Registriert: 07.07.2024 02:02
Re: Send Network Data DSCP Tag QoS
Also auf Linux funktioniert der Code einwandfrei. Allerdings habe ich Ihn auf die Clientseite umgestellt. Ohne Error Unterstützung läuft er auch ohne C_Backend:

Code: Alles auswählen
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
#IPPROTO_IP = 0
#IP_TOS = 3
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 36
CompilerCase #PB_OS_Linux
#IPPROTO_IP = 0
#IP_TOS = 1
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 67
CompilerCase #PB_OS_Windows
#IPPROTO_IP = 0
#IP_TOS = 3
#IPPROTO_IPV6 = 41
#IPV6_TCLASS = 39
CompilerEndSelect
Procedure set_dscp(fd, dscp.a, flag = #PB_Network_IPv4)
Protected r1
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_MacOS
Protected value.i
Protected value6.i
CompilerCase #PB_OS_Linux
Protected value.i
Protected value6.i
CompilerCase #PB_OS_Windows
Protected value.i
Protected value6.i
CompilerEndSelect
If dscp > 63
ProcedureReturn -1
EndIf
If flag = #PB_Network_IPv4
value = dscp << 2
;int setsockopt( int s, int level, int optname, const void *optval, socklen_t optlen );
If setsockopt_(fd, #IPPROTO_IP, #IP_TOS, @value, SizeOf(value))
;ProcedureReturn sock_errno()
EndIf
ElseIf flag = #PB_Network_IPv6
value6 = dscp << 2
If setsockopt_(fd, #IPPROTO_IPV6, #IPV6_TCLASS, @value6, SizeOf(value6))
;ProcedureReturn sock_errno()
EndIf
EndIf
ProcedureReturn 0
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
*NetworkBuf = AllocateMemory(181)
PokeS(*NetworkBuf, "Here is a String in a DSCP Tag Paket!", -1, #PB_Ascii)
; server = CreateNetworkServer(#PB_Any, 9000, #PB_Network_UDP | #PB_Network_IPv4)
ConnID = OpenNetworkConnection("192.168.178.1", 9000, #PB_Network_UDP | #PB_Network_IPv4)
If ConnID
r1 = set_dscp(ConnectionID(ConnID), 56, #PB_Network_IPv4)
;Debug GetErrorString(r1)
Delay(300)
SendNetworkData(ConnID, *NetworkBuf, 180)
CloseNetworkConnection(ConnID)
EndIf
CompilerEndIf

Re: Send Network Data DSCP Tag QoS
Unter macOS und Linux funktioniert dieses auch bei mir.
Solltest aber ohne errno das r1 zurückgeben. Bei NULL Ok
Solltest aber ohne errno das r1 zurückgeben. Bei NULL Ok
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive