[Jack-Devel] [PATCH 3/4] Added multicast interface selection to NetManager
With new parameter multicast-if manager can be bound to one or all interfaces to listen for slaves
---
common/JackNetManager.cpp | 25 ++++++++++++++++++++++---
common/JackNetManager.h | 1 +
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/common/JackNetManager.cpp b/common/JackNetManager.cpp
index 23b8fd0..e970fb8 100644
--- a/common/JackNetManager.cpp
+++ b/common/JackNetManager.cpp
@@ -464,7 +464,7 @@ namespace Jack
if (out) {
memset(out, 0, sizeof(float) * fParams.fPeriodSize);
}
- fNetAudioPlaybackBuffer->SetBuffer(audio_port_index, out)));
+ fNetAudioPlaybackBuffer->SetBuffer(audio_port_index, out);
#endif
}
@@ -550,6 +550,13 @@ namespace Jack
strcpy(fMulticastIP, DEFAULT_MULTICAST_IP);
}
+ const char* default_multicast_if = getenv("JACK_NETJACK_INTERFACE");
+ if (default_multicast_if) {
+ strcpy(fMulticastIF, default_multicast_if);
+ } else {
+ strcpy(fMulticastIF, DEFAULT_MULTICAST_IF);
+ }
+
for (node = params; node; node = jack_slist_next(node)) {
param = (const jack_driver_param_t*) node->data;
@@ -563,6 +570,14 @@ namespace Jack
}
break;
+ case 'f' :
+ if (strlen(param->value.str) < 32) {
+ strcpy(fMulticastIF, param->value.str);
+ } else {
+ jack_error("Can't use multicast interface %s, using default %s", param->value.ui, DEFAULT_MULTICAST_IF);
+ }
+ break;
+
case 'p':
fSocket.SetPort(param->value.ui);
break;
@@ -655,7 +670,7 @@ namespace Jack
{
JackNetMasterManager* master_manager = static_cast<JackNetMasterManager*>(arg);
jack_info("Starting Jack NetManager");
- jack_info("Listening on '%s:%d'", master_manager->fMulticastIP, master_manager->fSocket.GetPort());
+ jack_info("Listening on '%s:%d%%%s'", master_manager->fMulticastIP, master_manager->fSocket.GetPort(),master_manager->fMulticastIF);
master_manager->Run();
return NULL;
}
@@ -691,7 +706,7 @@ namespace Jack
}
//join multicast group
- if (fSocket.JoinMCastGroup(fMulticastIP) == SOCKET_ERROR) {
+ if (fSocket.JoinMCastGroup(fMulticastIP,fMulticastIF) == SOCKET_ERROR) {
jack_error("Can't join multicast group : %s", StrError(NET_ERROR_CODE));
}
@@ -737,6 +752,7 @@ namespace Jack
}
break;
default:
+ jack_log("JackNetMasterManager::Run: read: %d; type: %d; peer: %s",rx_bytes,host_params.fPacketID,host_params.fName);
break;
}
}
@@ -825,6 +841,9 @@ extern "C"
strcpy(value.str, DEFAULT_MULTICAST_IP);
jack_driver_descriptor_add_parameter(desc, &filler, "multicast-ip", 'a', JackDriverParamString, &value, NULL, "Multicast address", NULL);
+ strcpy(value.str, DEFAULT_MULTICAST_IF);
+ jack_driver_descriptor_add_parameter(desc, &filler, "multicast-if", 'f', JackDriverParamString, &value, NULL, "Multicast interface", "Multicast interface to bind to. ('all' - all ip ifs; 'any' (default) kernel chosen; ifname i.e. eth0)");
+
value.i = DEFAULT_PORT;
jack_driver_descriptor_add_parameter(desc, &filler, "udp-net-port", 'p', JackDriverParamInt, &value, NULL, "UDP port", NULL);
diff --git a/common/JackNetManager.h b/common/JackNetManager.h
index c88a09b..e5c0a48 100644
--- a/common/JackNetManager.h
+++ b/common/JackNetManager.h
@@ -105,6 +105,7 @@ namespace Jack
jack_client_t* fClient;
const char* fName;
char fMulticastIP[32];
+ char fMulticastIF[32];
JackNetSocket fSocket;
jack_native_thread_t fThread;
master_list_t fMasterList;
--
1.8.1.2
1360532545.20934_0.ltw:2, <8efd91c730f837fe8edd55266dce099f740d17ec.1360530044.git.me at ruff dot mobi>