From ea2eed034bee6a529a9e8736a9e1c79c756a4104 Mon Sep 17 00:00:00 2001 From: marco Date: Wed, 16 Apr 2008 18:17:32 +0000 Subject: [PATCH] * Patch from Torben Hohn that adds the possibility to set the mtu used by NetJack connections git-svn-id: svn+ssh://jackaudio.org/trunk/jack@1162 0c269be4-1314-0410-8aa9-9f06e86f4224 --- drivers/netjack/net_driver.c | 11 ++++++----- tools/netsource.c | 21 ++++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/netjack/net_driver.c b/drivers/netjack/net_driver.c index 2edd6ff..5d8d59e 100644 --- a/drivers/netjack/net_driver.c +++ b/drivers/netjack/net_driver.c @@ -107,7 +107,7 @@ rx_again: return 0; } int len = netjack_recvfrom(driver->sockfd, (char *)driver->rx_buf, bufsize, - MSG_WAITALL, (struct sockaddr*) & driver->syncsource_address, &address_size, 1400); + MSG_WAITALL, (struct sockaddr*) & driver->syncsource_address, &address_size, driver->mtu); if (len != bufsize) { @@ -133,7 +133,7 @@ static inline int net_driver_run_cycle (net_driver_t *driver) { jack_engine_t *engine = driver->engine; - int wait_status; + int wait_status = -1; float delayed_usecs; jack_nframes_t nframes = net_driver_wait (driver, -1, &wait_status, @@ -194,7 +194,7 @@ net_driver_null_cycle (net_driver_t* driver, jack_nframes_t nframes) driver->syncsource_address.sin_port = htons(driver->reply_port); netjack_sendto(driver->outsockfd, (char *)packet_buf, tx_size, - 0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), 1400); + 0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), driver->mtu); return 0; } @@ -312,7 +312,7 @@ net_driver_write (net_driver_t* driver, jack_nframes_t nframes) if (driver->reply_port) driver->syncsource_address.sin_port = htons(driver->reply_port); netjack_sendto(driver->outsockfd, (char *)packet_buf, packet_size, - 0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), 1400); + 0, (struct sockaddr*)&driver->syncsource_address, sizeof(struct sockaddr_in), driver->mtu); return 0; } @@ -596,6 +596,7 @@ net_driver_new (jack_client_t * client, driver->playback_channels = driver->playback_channels_audio + driver->playback_channels_midi; driver->mtu = first_packet->mtu; + jack_info("mtu = %d", first_packet->mtu); driver->latency = first_packet->latency; } @@ -613,7 +614,7 @@ net_driver_new (jack_client_t * client, driver->pkt_buf = malloc(sizeof(jacknet_packet_header) + driver->net_period_down * driver->capture_channels * get_sample_size(driver->bitdepth)); int rx_bufsize = sizeof(jacknet_packet_header) + driver->net_period_down * driver->capture_channels * get_sample_size(driver->bitdepth); - global_packcache = packet_cache_new(driver->latency + 5, rx_bufsize, 1400); + global_packcache = packet_cache_new(driver->latency + 5, rx_bufsize, driver->mtu); jack_info("netjack: period : up: %d / dn: %d", driver->net_period_up, driver->net_period_down); jack_info("netjack: framerate: %d", driver->sample_rate); diff --git a/tools/netsource.c b/tools/netsource.c index b52e45a..a5294e8 100644 --- a/tools/netsource.c +++ b/tools/netsource.c @@ -56,6 +56,7 @@ int playback_channels_midi = 1; int latency = 5; jack_nframes_t factor = 1; int bitdepth = 0; +int mtu = 1400; int reply_port = 0; jack_client_t *client; @@ -199,9 +200,9 @@ process (jack_nframes_t nframes, void *arg) /* ---------- Receive ---------- */ if (reply_port) - size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400); + size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu); else - size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400); + size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu); packet_header_ntoh (pkthdr); /* Loop till we get the right packet at the right momment */ while (size == rx_bufsize && (framecnt - pkthdr->framecnt) > latency) @@ -209,9 +210,9 @@ process (jack_nframes_t nframes, void *arg) //printf ("Frame %d \tLate packet received with a latency of %d frames (expected frame %d, got frame %d)\n", framecnt, framecnt - pkthdr->framecnt, framecnt - latency, pkthdr->framecnt); printf ("Frame %d \tLate packet received with a latency of %d frames\n", framecnt, framecnt - pkthdr->framecnt); if (reply_port) - size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400); + size = netjack_recv (insockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu); else - size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, 1400); + size = netjack_recv (outsockfd, (char *) packet_buf, rx_bufsize, MSG_DONTWAIT, mtu); packet_header_ntoh (pkthdr); } @@ -274,10 +275,11 @@ process (jack_nframes_t nframes, void *arg) pkthdr->playback_channels_audio = capture_channels_audio; pkthdr->capture_channels_midi = playback_channels_midi; pkthdr->playback_channels_midi = capture_channels_midi; + pkthdr->mtu = mtu; packet_header_hton (pkthdr); if (cont_miss < 10) - netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), 1400); + netjack_sendto (outsockfd, (char *) packet_buf, tx_bufsize, 0, &destaddr, sizeof (destaddr), mtu); // else if (cont_miss >= 10 && cont_miss <= 50) // printf ("Frame %d \tToo many packets missed (%d). We have stopped sending data\n", framecnt, cont_miss); else if (cont_miss > 50) @@ -295,6 +297,7 @@ process (jack_nframes_t nframes, void *arg) * It is called by JACK if the server ever shuts down or * decides to disconnect the client. */ + void jack_shutdown (void *arg) { @@ -334,6 +337,7 @@ fprintf (stderr, "usage: jack_netsource -h [options]\n" " -r - Local UDP port to use\n" " -f - Downsample data in the wire by this factor\n" " -b - Set transport to use 16bit or 8bit\n" + " -m - Assume this mtu for the link\n" "\n"); } @@ -359,7 +363,7 @@ main (int argc, char *argv[]) sprintf(client_name, "netsource"); sprintf(peer_ip, "localhost"); - while ((c = getopt (argc, argv, ":n:s:h:p:C:P:i:o:l:r:f:b:")) != -1) + while ((c = getopt (argc, argv, ":n:s:h:p:C:P:i:o:l:r:f:b:m:")) != -1) { switch (c) { @@ -405,6 +409,9 @@ main (int argc, char *argv[]) case 'b': bitdepth = atoi (optarg); break; + case 'm': + mtu = atoi (optarg); + break; case ':': fprintf (stderr, "Option -%c requires an operand\n", optopt); errflg++; @@ -450,7 +457,7 @@ main (int argc, char *argv[]) jack_nframes_t net_period = (float) jack_get_buffer_size (client) / (float) factor; int rx_bufsize = get_sample_size (bitdepth) * capture_channels * net_period + sizeof (jacknet_packet_header); - global_packcache = packet_cache_new (latency + 5, rx_bufsize, 1400); + global_packcache = packet_cache_new (latency + 5, rx_bufsize, mtu); /* tell the JACK server that we are ready to roll */ if (jack_activate (client))