summaryrefslogtreecommitdiffstats
path: root/src/net/mcast
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/mcast')
-rw-r--r--src/net/mcast/McastConfiguration.h26
-rw-r--r--src/net/mcast/McastConstants.h1
-rw-r--r--src/net/mcast/McastPGMSocket.cpp21
-rw-r--r--src/net/mcast/trial_programs/McastConfigArgParser.cpp6
4 files changed, 43 insertions, 11 deletions
diff --git a/src/net/mcast/McastConfiguration.h b/src/net/mcast/McastConfiguration.h
index a609ce1..c32ac4f 100644
--- a/src/net/mcast/McastConfiguration.h
+++ b/src/net/mcast/McastConfiguration.h
@@ -35,8 +35,8 @@ public:
_multicastDPort(DEFAULT_MULTICAST_DPORT),
_multicastWinSize(DEFAULT_MULTICAST_WSIZ),
_multicastMTU(DEFAULT_MULTICAST_MTU),
- _multicastUDPPort(DEFAULT_MULTICAST_UDPPORT),
- _multicastUseUDP(false)
+ _multicastUDPPortBase(DEFAULT_MULTICAST_UDPPORT),
+ _multicastUseUDP(DEFAULT_MULTICAST_USEUDP)
{
}
@@ -48,7 +48,7 @@ public:
_multicastDPort(other._multicastDPort),
_multicastWinSize(other._multicastWinSize),
_multicastMTU(other._multicastMTU),
- _multicastUDPPort(other._multicastUDPPort),
+ _multicastUDPPortBase(other._multicastUDPPortBase),
_multicastUseUDP(other._multicastUseUDP)
{
}
@@ -127,16 +127,26 @@ public:
return this;
}
- bool multicastUDPPort() const
+ quint16 multicastUDPPortBase() const
{
- return _multicastUDPPort;
+ return _multicastUDPPortBase;
}
- McastConfiguration* multicastUDPPort(quint16 port)
+ McastConfiguration* multicastUDPPortBase(quint16 port)
{
- _multicastUDPPort = port;
+ _multicastUDPPortBase = port;
return this;
}
+ quint16 multicastUDPUPort() const
+ {
+ return _multicastUDPPortBase;
+ }
+
+ quint16 multicastUDPMPort() const
+ {
+ return _multicastUDPPortBase + 1;
+ }
+
void commit()
{
emit changed();
@@ -152,7 +162,7 @@ private:
quint16 _multicastDPort;
quint16 _multicastWinSize;
quint16 _multicastMTU;
- quint16 _multicastUDPPort;
+ quint16 _multicastUDPPortBase;
bool _multicastUseUDP;
};
diff --git a/src/net/mcast/McastConstants.h b/src/net/mcast/McastConstants.h
index 712a0d5..9913457 100644
--- a/src/net/mcast/McastConstants.h
+++ b/src/net/mcast/McastConstants.h
@@ -23,6 +23,7 @@
#define DEFAULT_MULTICAST_ADDRESS ";239.255.220.207"
#define DEFAULT_MULTICAST_SPORT 6964
#define DEFAULT_MULTICAST_DPORT 6965
+#define DEFAULT_MULTICAST_USEUDP true
#define DEFAULT_MULTICAST_UDPPORT 6966
#define DEFAULT_MULTICAST_RATE (100*1024)
#define DEFAULT_MULTICAST_WSIZ 3000
diff --git a/src/net/mcast/McastPGMSocket.cpp b/src/net/mcast/McastPGMSocket.cpp
index 0d6b694..41764d5 100644
--- a/src/net/mcast/McastPGMSocket.cpp
+++ b/src/net/mcast/McastPGMSocket.cpp
@@ -142,8 +142,15 @@ bool McastPGMSocket::open(McastConfiguration const* config, Direction direction)
sa_family_t family = addrinfo->ai_send_addrs[0].gsr_group.ss_family;
- good
- = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_PGM, &err);
+ if(config->multicastUseUDP())
+ {
+ good = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_UDP, &err);
+ }
+ else
+ {
+ good = pgm_socket(&_priv->socket, family, SOCK_SEQPACKET, IPPROTO_PGM, &err);
+ }
+
if (!good)
{
qCritical() << "Could not open socket: PGM Error: " << err->message;
@@ -209,6 +216,16 @@ bool McastPGMSocket::open(McastConfiguration const* config, Direction direction)
int const mtu = config->multicastMTU();
pgm_setsockopt(_priv->socket, PGM_MTU, &mtu, sizeof(mtu));
+ // UDP Encapsulation
+ if(config->multicastUseUDP())
+ {
+ const quint16 uport = config->multicastUDPUPort();
+ const quint16 mport = config->multicastUDPMPort();
+
+ pgm_setsockopt(_priv->socket, PGM_UDP_ENCAP_MCAST_PORT, &mport, sizeof(mport));
+ pgm_setsockopt(_priv->socket, PGM_UDP_ENCAP_UCAST_PORT, &uport, sizeof(uport));
+ }
+
pgm_sockaddr_t addr;
addr.sa_addr.sport = config->multicastSPort();
addr.sa_port = config->multicastDPort();
diff --git a/src/net/mcast/trial_programs/McastConfigArgParser.cpp b/src/net/mcast/trial_programs/McastConfigArgParser.cpp
index 8849544..efea0b5 100644
--- a/src/net/mcast/trial_programs/McastConfigArgParser.cpp
+++ b/src/net/mcast/trial_programs/McastConfigArgParser.cpp
@@ -125,6 +125,10 @@ bool parseMcastConfigArg(QStringList::iterator& i, QStringList::iterator const&
{
config->multicastUseUDP(true);
}
+ else if (arg == "-no-udp")
+ {
+ config->multicastUseUDP(false);
+ }
else if (arg == "-udp-port")
{
i++;
@@ -140,7 +144,7 @@ bool parseMcastConfigArg(QStringList::iterator& i, QStringList::iterator const&
cerr << "Error: UDP-Port is not an integer" << endl;
return false;
}
- config->multicastUDPPort(udpport);
+ config->multicastUDPPortBase(udpport);
}
else
{