summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorschmirl <schmirl>2007-05-09 09:12:42 +0000
committerschmirl <schmirl>2007-05-09 09:12:42 +0000
commitbb1ac54c87ea689e6275838c606fa7224adf4169 (patch)
tree5bce55f61bc8d7b527dc84db5ae4bd5ffbe1a1c4 /tools
parent2b103196d6fb69336a14d9167dbda701ab135183 (diff)
downloadvdr-plugin-streamdev-bb1ac54c87ea689e6275838c606fa7224adf4169.tar.gz
vdr-plugin-streamdev-bb1ac54c87ea689e6275838c606fa7224adf4169.tar.bz2
Set DSCP 41 on stream data packets. WMM capable WLAN accesspoints
should understand this and give precedence. For Internet streaming it could be used by traffic shapers. Suggested by ollo@vdrportal (#237). Modified Files: server/connectionHTTP.c server/connectionVTP.c tools/socket.c tools/socket.h
Diffstat (limited to 'tools')
-rw-r--r--tools/socket.c14
-rw-r--r--tools/socket.h3
2 files changed, 17 insertions, 0 deletions
diff --git a/tools/socket.c b/tools/socket.c
index 4b5167d..e9266c5 100644
--- a/tools/socket.c
+++ b/tools/socket.c
@@ -6,6 +6,15 @@
#include <errno.h>
#include <fcntl.h>
+// default class: best effort
+#define DSCP_BE 0
+// gold class (video): assured forwarding 4 with lowest drop precedence
+#define DSCP_AF41 34 << 2
+// premium class (voip): expedited forwarding
+#define DSCP_EF 46 << 2
+// actual DSCP value used
+#define STREAMDEV_DSCP DSCP_AF41
+
cTBSocket::cTBSocket(int Type) {
memset(&m_LocalAddr, 0, sizeof(m_LocalAddr));
memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr));
@@ -141,3 +150,8 @@ bool cTBSocket::Shutdown(int how) {
return ::shutdown(*this, how) != -1;
}
+
+bool cTBSocket::SetDSCP(void) {
+ int dscp = STREAMDEV_DSCP;
+ return ::setsockopt(*this, SOL_IP, IP_TOS, &dscp, sizeof(dscp)) != -1;
+}
diff --git a/tools/socket.h b/tools/socket.h
index d1a7d62..23272ec 100644
--- a/tools/socket.h
+++ b/tools/socket.h
@@ -68,6 +68,9 @@ public:
an appropriate value. */
virtual bool Accept(const cTBSocket &Listener);
+ /* Sets DSCP sockopt */
+ bool SetDSCP(void);
+
/* LocalPort() returns the port number this socket is connected to locally.
The result is undefined for a non-open socket. */
int LocalPort(void) const { return ntohs(m_LocalAddr.sin_port); }