summaryrefslogtreecommitdiffstats
path: root/cpukit/libnetworking
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-02-05 22:29:19 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-02-05 22:29:19 +0000
commit5c62b53a647c42bf85db6f0a35ae95e974cd574a (patch)
treea326bc6a2b395ae0fb4343839ef453ab247333b2 /cpukit/libnetworking
parent2008-02-05 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-5c62b53a647c42bf85db6f0a35ae95e974cd574a.tar.bz2
2008-02-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* libnetworking/kern/uipc_socket2.c, libnetworking/netinet/tcp_usrreq.c, libnetworking/netinet/udp_usrreq.c, libnetworking/rtems/rtems_bsdnet.h, libnetworking/rtems/rtems_glue.c: Add configuration parameters for network stack efficiency multiplier and default socket buffer sizes. Change default multiplier from 8 to 2 to match GNU/Linux. This has no impact on performance on the BSPs tested.
Diffstat (limited to 'cpukit/libnetworking')
-rw-r--r--cpukit/libnetworking/kern/uipc_socket2.c9
-rw-r--r--cpukit/libnetworking/netinet/tcp_usrreq.c13
-rw-r--r--cpukit/libnetworking/netinet/udp_usrreq.c13
-rw-r--r--cpukit/libnetworking/rtems/rtems_bsdnet.h32
-rw-r--r--cpukit/libnetworking/rtems/rtems_glue.c15
5 files changed, 82 insertions, 0 deletions
diff --git a/cpukit/libnetworking/kern/uipc_socket2.c b/cpukit/libnetworking/kern/uipc_socket2.c
index 62baf6f861..74f7e1c9b0 100644
--- a/cpukit/libnetworking/kern/uipc_socket2.c
+++ b/cpukit/libnetworking/kern/uipc_socket2.c
@@ -65,6 +65,15 @@ static u_long sb_efficiency = 8; /* parameter for sbreserve() */
SYSCTL_INT(_kern, OID_AUTO, sockbuf_waste_factor, CTLFLAG_RW, &sb_efficiency,
0, "");
+#if defined(__rtems__)
+ void rtems_set_sb_efficiency(
+ u_long efficiency
+ )
+ {
+ sb_efficiency = (efficiency == 0) ? 2 : efficiency;
+ }
+#endif
+
/*
* Procedures to manipulate state flags of socket
* and do appropriate wakeups. Normal sequence from the
diff --git a/cpukit/libnetworking/netinet/tcp_usrreq.c b/cpukit/libnetworking/netinet/tcp_usrreq.c
index 8a99962a85..ba553d8b85 100644
--- a/cpukit/libnetworking/netinet/tcp_usrreq.c
+++ b/cpukit/libnetworking/netinet/tcp_usrreq.c
@@ -730,6 +730,19 @@ u_long tcp_recvspace = 1024*16;
SYSCTL_INT(_net_inet_tcp, TCPCTL_RECVSPACE, recvspace,
CTLFLAG_RW, &tcp_recvspace , 0, "");
+#if defined(__rtems__)
+ void rtems_set_tcp_buffer_sizes(
+ u_long sendspace,
+ u_long recvspace
+ )
+ {
+ if ( sendspace != 0 )
+ tcp_sendspace = sendspace;
+ if ( recvspace != 0 )
+ tcp_recvspace = recvspace;
+ }
+#endif
+
/*
* Attach TCP protocol to socket, allocating
* internet protocol control block, tcp control block,
diff --git a/cpukit/libnetworking/netinet/udp_usrreq.c b/cpukit/libnetworking/netinet/udp_usrreq.c
index 9e7d2c665c..d532e76c73 100644
--- a/cpukit/libnetworking/netinet/udp_usrreq.c
+++ b/cpukit/libnetworking/netinet/udp_usrreq.c
@@ -579,6 +579,19 @@ static u_long udp_recvspace = 40 * (1024 + sizeof(struct sockaddr_in));
SYSCTL_INT(_net_inet_udp, UDPCTL_RECVSPACE, recvspace, CTLFLAG_RW,
&udp_recvspace, 0, "");
+#if defined(__rtems__)
+ void rtems_set_udp_buffer_sizes(
+ u_long sendspace,
+ u_long recvspace
+ )
+ {
+ if ( sendspace != 0 )
+ udp_sendspace = sendspace;
+ if ( recvspace != 0 )
+ udp_recvspace = recvspace;
+ }
+#endif
+
/*ARGSUSED*/
int
udp_usrreq(so, req, m, addr, control)
diff --git a/cpukit/libnetworking/rtems/rtems_bsdnet.h b/cpukit/libnetworking/rtems/rtems_bsdnet.h
index 0ad1a5f9e2..5a8bf05092 100644
--- a/cpukit/libnetworking/rtems/rtems_bsdnet.h
+++ b/cpukit/libnetworking/rtems/rtems_bsdnet.h
@@ -154,6 +154,38 @@ struct rtems_bsdnet_config {
char *log_host; /* BOOTP */
char *name_server[3]; /* BOOTP */
char *ntp_server[3]; /* BOOTP */
+ /*
+ * Default "multiplier" on buffer size. This is
+ * claimed by the TCP/IP implementation to be for
+ * efficiency but you will have to measure the
+ * benefit for buffering beyond double buffering
+ * in your own application.
+ *
+ * The default value is 2.
+ *
+ * See kern/uipc_socket2.c for details.
+ */
+ unsigned long sb_efficiency;
+ /*
+ * Default UDP buffer sizes PER SOCKET!!
+ *
+ * TX = 9216 -- max datagram size
+ * RX = 40 * (1024 + sizeof(struct sockaddr_in))
+ *
+ * See netinet/udp_usrreq.c for details
+ */
+ unsigned long udp_tx_buf_size;
+ unsigned long udp_rx_buf_size;
+ /*
+ * Default UDP buffer sizes PER SOCKET!!
+ *
+ * TX = 16 * 1024
+ * RX = 16 * 1024
+ *
+ * See netinet/tcp_usrreq.c for details
+ */
+ unsigned long tcp_tx_buf_size;
+ unsigned long tcp_rx_buf_size;
};
/*
diff --git a/cpukit/libnetworking/rtems/rtems_glue.c b/cpukit/libnetworking/rtems/rtems_glue.c
index 1313738def..88f05dad90 100644
--- a/cpukit/libnetworking/rtems/rtems_glue.c
+++ b/cpukit/libnetworking/rtems/rtems_glue.c
@@ -221,6 +221,9 @@ static int
rtems_bsdnet_initialize (void)
{
rtems_status_code sc;
+ extern void rtems_set_udp_buffer_sizes( u_long, u_long );
+ extern void rtems_set_tcp_buffer_sizes( u_long, u_long );
+ extern void rtems_set_sb_efficiency( u_long );
/*
* Set the priority of all network tasks
@@ -238,6 +241,18 @@ rtems_bsdnet_initialize (void)
if (rtems_bsdnet_config.mbuf_cluster_bytecount)
nmbclusters = rtems_bsdnet_config.mbuf_cluster_bytecount / MCLBYTES;
+ rtems_set_udp_buffer_sizes(
+ rtems_bsdnet_config.udp_tx_buf_size,
+ rtems_bsdnet_config.udp_rx_buf_size
+ );
+
+ rtems_set_tcp_buffer_sizes(
+ rtems_bsdnet_config.tcp_tx_buf_size,
+ rtems_bsdnet_config.tcp_rx_buf_size
+ );
+
+ rtems_set_sb_efficiency( rtems_bsdnet_config.sb_efficiency );
+
/*
* Create the task-synchronization semaphore
*/