<div>I&#39;ve been using it for some time now, and it&#39;s been pretty good.&nbsp; I&#39;ve even bundled it up on this project:</div>
<div>&nbsp;</div>
<div><a href="http://downloads.sourceforge.net/bsd42/BSD-4.3-Reno-install.exe?modtime=1191969474&amp;big_mirror=0">http://downloads.sourceforge.net/bsd42/BSD-4.3-Reno-install.exe?modtime=1191969474&amp;big_mirror=0</a></div>

<div>&nbsp;</div>
<div>I have been rebuilding the supporting exe to incorporate the inline memory access to speed it up, and a </div>
<div>backport of 3-7-1&#39;s idle support onto 3-7-1.&nbsp; I&#39;ve even had a copy up and running for over a month until</div>
<div>a power hit took the test machine out...&nbsp; </div>
<div>&nbsp;</div>
<div>I know most people don&#39;t like it as it&#39;s TCP/IP centric... I&#39;ve been starting to play with directly integrating it</div>
<div>with the HECnet bridge code, but to be honest I&#39;ve been having too much fun with frontvm ( <a href="http://www.tomatarium.pwp.blueyonder.co.uk/glfrontier.html">http://www.tomatarium.pwp.blueyonder.co.uk/glfrontier.html</a>&nbsp;) as of late....</div>

<div>&nbsp;</div>
<div>I guess I need to update my patchset ....<br><br></div>
<div class="gmail_quote">On Fri, Jun 13, 2008 at 7:39 AM, Peter Garay &lt;<a href="mailto:peter.garay@lhsystems.hu">peter.garay@lhsystems.hu</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Dear Jason and all,<br><br>A long time ago there was a post on this list about using SLiRP and I would<br>
like to inquire about the progress, if any made.<br><br>I know that SLiRP is only suitable for a subset of TCP/IP networking and hence<br>not applicable for everyone. However it is a good solution on platforms where<br>there is no pcap library available and it works well in qemu for client type<br>
applications. For instance, I would hope to get the emulator on WinMobile<br>this way.<br><br>Thanks and best regards,<br><br>Peter<br><br><br><br><br>Jason Stevens neozeed at <a href="http://gmail.com/" target="_blank">gmail.com</a><br>
Sun Oct 7 00:42:00 EDT 2007<br><br>I&#39;ve done some hacking with the networking on qemu &amp; simh, and I&#39;ve finally<br>done something that&#39;s been on my list of things to do. &nbsp;Qemu has a built in<br>&#39;user mode networking&#39; stack called slirp that will allow Qemu to connect to<br>
the network without any tap/tun or libpcap. &nbsp;All TCP/IP traffic on the<br>ethernet is intercepted, and operated on the host side. &nbsp;If you remember<br>slirp from the &quot;good old days&quot; when everyone had shell accounts, then the<br>
windows people would build slirp so a stubbed out winsock.dll would allow<br>them to use winsock applications going thru the host computer.<br><br>Anyways I&#39;ve tested this successfully with the VAX emulator. &nbsp;It appears<br>
that there is some weird issues either with the way the vax780 emulator<br>handles it&#39;s ethernet card (which may be why it&#39;s disabled to start with),<br>or with BSD 4.3 / Taho on how their ethernet frames are... &nbsp; Right now I&#39;m<br>
testing with IRC on 4.3 BSD Quasijarus UNIX #3. &nbsp;I&#39;ve also included a redir<br>port so that I can &#39;telnet&#39; into the host.<br><br>I don&#39;t know if anyone would even find this interesting, but the prospect of<br>
a &#39;drop and go&#39; host is quite usefull for me at least. &nbsp;Not to mention it&#39;ll<br>be a snap to setup on the network, or install Operating Systems like OpenBSD<br>which can pull the rest of the OS via HTTP.<br><br>
Remember it&#39;s best to use the following config under slirp<br><br>Host IP &nbsp; &nbsp; <a href="http://10.0.2.15/" target="_blank">10.0.2.15</a><br>Netmask &nbsp; <a href="http://255.255.255.0/" target="_blank">255.255.255.0</a><br>
Gateway &nbsp; <a href="http://10.0.2.2/" target="_blank">10.0.2.2</a><br>DNS &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://10.0.2.3/" target="_blank">10.0.2.3</a><br><br><br>In the source below, I&#39;ve hardcoded port 42323 on the host to go to port 23<br>
on the emulated vax. &nbsp;I then telnet to the loop on 42323 and connect to the<br>OS.<br><br>If you want to try, download and configure qemu on your PC. &nbsp;I just then<br>copied the slirp files into simh, and added them to the makefile. &nbsp;I had to<br>
copy some config headers from qemu to satisfy the last of the slirp<br>dependancies. &nbsp;From what I can gather the major &#39;block&#39; here is that slirp<br>needs to know what endian the host is at compile time.<br><br>For what it&#39;s worth, here is my addition to the sim_ether file. &nbsp;I&#39;m sorry<br>
it&#39;s not a diff, I had removed the os dependant portion from the independant<br>portion to speed my compiles &amp; tests...<br><br>#include &quot;slirp.h&quot;<br>#include &lt;ctype.h&gt;<br>#include &quot;sim_ether.h&quot;<br>
#include &quot;sim_sock.h&quot;<br><br>unsigned char tbuff[2000];<br>int tbufflen;<br>int slirp_inited=0;<br>extern fd_set *global_readfds, *global_writefds, *global_xfds;<br><br>t_stat eth_open(ETH_DEV* dev, char* name, DEVICE* dptr, uint32 dbit)<br>
&nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;struct in_addr guest_addr;<br>&nbsp; &nbsp; &nbsp; &nbsp;slirp_init();<br>&nbsp; &nbsp; &nbsp; &nbsp;tbufflen=0;<br>&nbsp; &nbsp; &nbsp; &nbsp;slirp_inited=1;<br>&nbsp; &nbsp; &nbsp; &nbsp;inet_aton(&quot; <a href="http://10.0.2.15/" target="_blank">10.0.2.15</a>&quot;,&amp;guest_addr);<br>
&nbsp; &nbsp; &nbsp; &nbsp;slirp_redir(0,42323,guest_addr,23);<br>&nbsp; &nbsp; &nbsp; &nbsp;return SCPE_OK;<br>&nbsp; &nbsp; &nbsp; &nbsp;}<br><br>t_stat eth_close (ETH_DEV* dev)<br>&nbsp;{slirp_exit(1);<br>&nbsp; &nbsp; &nbsp; &nbsp;return SCPE_OK;}<br><br>t_stat eth_write (ETH_DEV* dev, ETH_PACK* packet, ETH_PCALLBACK routine)<br>
&nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;slirp_input(packet-&gt;msg,packet-&gt;len);<br>&nbsp; &nbsp; &nbsp; &nbsp;if(routine)<br>&nbsp; &nbsp; &nbsp; &nbsp;(routine)(0);<br>&nbsp; &nbsp; &nbsp; &nbsp;return SCPE_OK;<br>&nbsp;}<br><br><br><br>t_stat eth_read (ETH_DEV* dev, ETH_PACK* packet, ETH_PCALLBACK routine)<br>
&nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;int ret,nfds;<br>&nbsp; &nbsp; &nbsp; &nbsp;fd_set rfds, wfds, xfds;<br>&nbsp; &nbsp; &nbsp; &nbsp;struct timeval tv;<br><br>if(!dev) return SCPE_UNATT;<br>if(!packet) return SCPE_ARG;<br><br>dev-&gt;read_packet = packet;<br>packet-&gt;len = 0;<br>
dev-&gt;read_callback = routine;<br><br>if(tbufflen&gt;0)<br>&nbsp; &nbsp; &nbsp; &nbsp;{<br>&nbsp; &nbsp; &nbsp; &nbsp;dev-&gt;read_packet-&gt;len=tbufflen;<br>&nbsp; &nbsp; &nbsp; &nbsp;memcpy(dev-&gt;read_packet-&gt;msg,tbuff,tbufflen);<br>&nbsp; &nbsp; &nbsp; &nbsp;eth_add_crc32(dev-&gt;read_packet);<br>
&nbsp; &nbsp; &nbsp; &nbsp;if(dev-&gt;read_callback)<br>&nbsp; &nbsp; &nbsp; &nbsp; (dev-&gt;read_callback)(0);<br>&nbsp; &nbsp; &nbsp; &nbsp;tbufflen=0;<br>&nbsp; &nbsp; &nbsp; &nbsp;}<br><br><br>nfds=-1;<br>FD_ZERO(&amp;rfds);<br>FD_ZERO(&amp;wfds);<br>FD_ZERO(&amp;xfds);<br>if(slirp_inited)<br>&nbsp; &nbsp; &nbsp; &nbsp;{<br>
&nbsp; &nbsp; &nbsp; &nbsp;slirp_select_fill(&amp;nfds,&amp;rfds,&amp;wfds,&amp;xfds);<br>&nbsp; &nbsp; &nbsp; &nbsp;tv.tv_sec=0;<br>&nbsp; &nbsp; &nbsp; &nbsp;tv.tv_usec=0;<br>&nbsp; &nbsp; &nbsp; &nbsp;ret = select(nfds + 1, &amp;rfds, &amp;wfds, &amp;xfds, &amp;tv);<br>&nbsp; &nbsp; &nbsp; &nbsp;if(ret&gt;0)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{}<br>
&nbsp; &nbsp; &nbsp; &nbsp;if(ret&lt;0) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FD_ZERO(&amp;rfds);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FD_ZERO(&amp;wfds);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;FD_ZERO(&amp;xfds);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>&nbsp; &nbsp; &nbsp; &nbsp;slirp_select_poll(&amp;rfds, &amp;wfds, &amp;xfds);<br>&nbsp; &nbsp; &nbsp; &nbsp;}<br><br>
<br>return SCPE_OK;<br>}<br><br><br>t_stat eth_filter (ETH_DEV* dev, int addr_count, ETH_MAC* addresses,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ETH_BOOL all_multicast, ETH_BOOL promiscuous)<br>&nbsp;{return SCPE_NOFNC;}<br><br>int eth_devices (int max, ETH_LIST* dev)<br>
&nbsp;{return -1;}<br><br>void slirp_output (const unsigned char *pkt, int pkt_len)<br>{<br>tbufflen=pkt_len;<br>memcpy(tbuff,pkt,pkt_len);<br>}<br><br>int slirp_can_output(void)<br>{<br>return 1;<br>}<br><br><br><br><br><br><br>
<br>-------<br><br>Let me know if anyone is interested, and I&#39;ll check out what the full<br>licensing is involved in this....<br><br>Jason Stevens<br>_______________________________________________<br>Simh mailing list<br>
<a href="mailto:Simh@trailing-edge.com">Simh@trailing-edge.com</a><br><a href="http://mailman.trailing-edge.com/mailman/listinfo/simh" target="_blank">http://mailman.trailing-edge.com/mailman/listinfo/simh</a><br></blockquote>
</div><br>